Java Servlet(一)--- Servlet hello world的写法,smart tomcat,Servlet代码中的常见问题

文章目录

Servlet

  1. Tomcat提供了一组api,这里面封装了HTTP协议 ,这样能够更好地编写动态网页
  2. Spring对Servlet进行了进一步的封装,从而让我们编写网站更简单了,我们以后进行开发,都是以Spring为主的
  3. 我们学了Sevlet能够更好地理解Spring,除了使用API之外,更重要的是web开发的基本思路和流程

Sevlet主要做的工作:
就是让我们自己写一些类,然后把这些类给加载到Tomcat中,后续Tomcat收到HTTP请求(来自浏览器),就会执行到我们写的代码上,从而通过这些代码完成一定的业务逻辑

写一个最简单的Servlet程序

先写一个最简单的Servlet的 hello world 程序。

目标:编写Servlet代码,最终在浏览器上,能够展示出 hello world

这分为7个步骤:

1. 创建项目

了解:Maven是什么

Maven能干什么

Maven生成的目录结构是怎么样的

Maven解决依赖关系和编译打包工作

此处创建的是一种新的项目形式,称为Maven项目,Maven是Java中一个知名的构建工具(IDEA已经集成了Maven,可以直接使用),Maven是帮助你编译/打包代码的工具

在IDEA中创建一个Maven项目

maven项目在首次创建的时候,会自动从网站上下载一些依赖的组件(这个过程需要网络稳定,不然后续使用Maven会出错)

Maven的目录结构:


什么是业务?

高效率地解决实际问题,问题的详细情况,解决问题的具体过程也就是所谓的业务。

默认生成的Maven文件:

2. 引入依赖

1.接下来要写的程序,会使用Servlet。Servlet这个api是tomcat提供的。而不是jdk提供的(第三方库不是 jdk 自带的)这就需要我们手动安装引入(之前搞mysql的时候,搞了一个 mysql jdbc driver)

可以手动下载导入,比较麻烦。(在工作中涉及的项目,可能依赖的内容非常多),手动管理就非常麻烦了
使用maven就可以非常方便地解决上述问题了

(1) 打开maven中央仓库,找到需要的servlet的jar包
3.1是和Tomcat 8匹配的版本,Servlet的版本必须要和Tomcat版本匹配

(2) 借助maven,自动下载上述依赖


刚才的 jar 包被下载到哪里了呢?

maven 本地仓库

maven就会在你的机器上搞一个目录

这个目录就会保存你这边下载好的这些jar包

可以通过idea,找到你的maven的仓库位置

3.创建目录

maven 项目,是普适的。不仅仅局限于Tomcat。

对于Tomcat来说,对于项目的目录结构,还有一些额外的要求。

Tomcat要求的目录结构,必须是下面这样的:

web.xml的代码:

xml 复制代码
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
 <display-name>Archetype Created Web Application</display-name>
</web-app>

可能会出现标红的问题(以及解决办法):

4.编写代码

1.在java目录中,创建类

doGet方法中参数的含义:

这里就使用到了多态

多线程,网络,Servlet,都用到了多态机制。本质目的,都是为了能够给现有的代码流程中,插入一段咱们自定义的逻辑。

写一个服务器代码的主要三个步骤(只有业务逻辑是需要咱们自己写的):

通过路径找到这个类,然后在浏览器上执行代码

java 复制代码
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 这个打印是显示到 tomcat 的控制台上的(服务器端)
        System.out.println("hello world");
        // 把内容显示到页面上,把 "hello world" 字符串作为 http响应的 body 部分
        // 这个部分就会被浏览器显示到页面上
        resp.getWriter().write("hello world");
    }
}

5.打包程序

  1. 打包程序,把我们写的代码打成 war包。(Tomcat需要一个war包在上面)
    maven 就可以完成打包操作

(1) 修改pom.xml,设置打包的类型和包名字

(2) 在右侧maven面板中,双击package这个按钮

首次打包,更容易出现问题,这些依赖下载好了之后,后续就不需要重新下载了

6. 部署程序

  1. 把war拷贝到webapps目录中即可,然后启动tomcat

找到war包

把war包拷贝到webapps目录下

7. 验证程序

  1. 通过浏览器,访问tomcat,获取到我们代码返回的hello world

    上面的7个步骤需要我们多操作几遍,要能够非常熟悉才行

如果想修改代码怎么办呢

把hello world 修改成 hello java

(1) 修改代码 (现在不是我们一修改代码,就能立即生效的)

(2) 重新打包

(3) 重新部署

每次修改代码都需要重新打包,重新部署,并且我们修改代码是非常频繁的,这个过程是比较麻烦的

所以引入了IDEA的插件,把tomcat集成到IDEA中。此时,就可以通过IDEA一键式的重新打包部署了

什么是插件??

插件是在这个程序上的又扩展,并且可以按需使用扩展功能,不要就不装,需要就装

  1. Tomcat的插件是 Smart Tomcat

如果下载不了,可以到idea plugin中下载

下载好之后,得到jar包,把jar包拖到idea中,就会安装了

smart tomcat的使用

  1. 配置tomcat


    现在点击三角形就能够跑起来了

    tomcat跑起来之后,tomcat的日志就显示到idea的控制台上了
    并且乱码问题也好了,因为idea的编码方式和tomcat的编码方式都是utf-8

出现报错的问题

点击链接是一级目录,我们需要两级目录才能访问

有了smart tomcat之后,修改代码的时候只需要重新点击运行即可

解决中文乱码的问题

  1. 乱码,意味着有多个环节,对于编码方式的理解是不一致的

    比如构造数据按照utf8,解析数据按照gbk,就很容易出现乱码了。
    1.梳理清楚,程序运行过程中,哪些环节涉及到对于编码的处理
    2.每个环节的编码都是什么

(1) 构造数据

这里的你好两个字,是直接在idea的代码编辑器中,构造的。这个编码方式就要看idea的代码编辑器是什么编码,idea这里是utf-8

File -> Setting -> Encoding

(2) 解析数据

浏览器默认额解析方式,是跟随系统的。Windows 10 简体中文版,使用的字符集是 GBK

把gbk改成utf8。utf8才是主流

解决方法:在HTTP响应报文中,显示地告诉浏览器,返回的body字符集是什么
设置响应报文的body

java 复制代码
resp.setContentType("text/html; charset=utf8");

编写Servlet代码中遇到的问题

404

404表示用户访问的资源不存在,大概率是url路径写的不正确

(1) url路径写错了

路径的正确写法:

(2) webapp 没有正确加载

比如,web.xml 内容不对

405

  1. 405 是方法没有被实现(GET请求,但是Servlet却没有重写doGet)

比如把方法名改为doPost,自然不是没有实现doGet了

  1. 还有一个原因,会引发405,写的代码中,没有删掉 super.doGet()

500

  1. 服务器内部错误,你的代码抛出异常了
    在日志,或者响应中,会带有异常信息

出现空白页面

  1. 这个时候,就要检查,服务器是否真的返回了带有正文的响应报文,浏览器显示的内容,就是http响应的正文

出现无法访问此网站

  1. Tomcat没有正确运行

    这个情况就需要检查tomcat是否是正常工作的。如果tomcat确实正常工作了,就需要检查,浏览器的ip和端口号是否正确,这两种都可能导致出现无法访问此网站的问题

Servlet API

Servlet的api主要学习的是三个类

1.HttpServlet

2.HttpServletRequest

3.HttpServletResponse

HttpServlet

  1. 写一个代码,往往都是要继承这个类,重写里面的方法

    写的Servlet程序,没写main。我们写的这个程序,不是直接运行的,而是放到tomcat上运行的。tomcat这个程序里,有main的。tomcat就是火车头,写的webapp就是车厢

HttpServlet:继承这个类,重写里面的方法,目的就是为了把我们自己定义的代码,插入到 tomcat 中

  1. 在tomcat中,就有下面这样的代码

方法

  1. 方法

    Servlet的生命周期(经典的面试题)
    生命周期:什么时间点,做什么事情
    最开始初始化都执行init
    最终结束前都执行destroy
    每次收到请求都执行service
相关推荐
智界软体库2 小时前
《IDEA 2025长效使用配置指南:有效期配置至2099年实战之JetBrains全家桶有效》
java·ide·intellij-idea
Yang.O3 小时前
MyEclipse在高分辨率显示屏上图标显示太小的解决方案
java·ide·myeclipse
刘火锅3 小时前
Java读取Excel图片技术详解:悬浮式与嵌入式图片的三种实现方案(支持WPS嵌入和Office Excel嵌入)
java·excel·wps
神云瑟瑟3 小时前
spring boot拦截器获取requestBody的巨坑
java·spring boot·拦截器
博睿谷IT99_4 小时前
Linux 备份与恢复常用命令
java·linux·服务器
qq_402605654 小时前
JAVA大文件分片上传
java·大文件上传
ss2734 小时前
手写MyBatis第78弹:装饰器模式在MyBatis二级缓存中的应用:从LRU到防击穿的全方案实现
java·开发语言
凯尔萨厮4 小时前
Java学习笔记五(多态)
java·笔记·学习