第五章、Servlet
1、Servlet技术
1.1、什么是Servlet
- Servlet是Java EE的规范之一,规范就是接口。
- Servlet是JavaWeb的三大组件之一,三大组件:Servlet程序、Filter过滤器、Listener监听器。
- Servlet是运行在服务器上的一个Java小程序,它可以接受科幻段发动来的请求,并响应数据给客户端
1.2、实现Servlet程序
- 编写一个类,去实现Servlet接口
- 实现service方法,处理请求并响应数据
- 到web.xml中配置Servlet程序的访问地址
1.3、url地址到Servlet程序的访问
![image-20201019232637000](5%E3%80%81Servlet.assets/image-20201019232637000.png)
1.4、Servlet的生命周期
1、执行Servlet构造器方法
2、执行init初始化方法
3、执行service方法
4、执行destroy销毁方法
说明:
1和2:在第一次访问时,创建Servlet程序时,被调用
3:每次访问都会调用
4:停止web工程时调用
1.5、GET和POST请求的分发处理
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
// 类型转换(因为它有 getMethod()方法)
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
// 获取请求的方式
String method = httpServletRequest.getMethod();
if ("GET".equals(method)) {
doGet();
}
else if ("POST".equals(method)) {
doPost();
}
}
/**
* 做 get 请求的操作
*/
public void doGet(){}
/**
* 做 post 请求的操作
*/
public void doPost(){}
1.6、通过记成HttpServlet实现Servlet程序(开发中常用方法)
- 编写一个类去继承HttpServlet类
- 根据需求重写doGet()和doPost()方法
- 在web.xml中配置Servlet程序的访问地址
public class HelloServlet2 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//这里是具体的方法
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//这里是具体的方法
}
}
<servlet>
<servlet-name>HelloServlet2</servlet-name>
<servlet-class>com.javalove.servlet.HelloServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet2</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
1.7、使用idea创建Servlet程序(同样可以实现如上效果)
1.8、Servlet类的继承体系
![image-20201019235049109](5%E3%80%81Servlet.assets/image-20201019235049109.png)
2、ServletConfig类
- 顾名思义,ServletConfig类,是Servlet程序的配置信息类
- Servlet程序和ServletConfig对象,是由Tomcat创建的,我们只需要使用就ok
- Servlet 程序默认是第一次访问的时候创建
- ServletConfig 是每个 Servlet 程序创建时,就创建一个对应的 ServletConfig 对 象;因此,每个Servlet只能访问到自己的Servlet程序的配置信息。
2.1、ServletConfig类的三大作用
- 可以获取 Servlet 程序的别名 servlet-name 的值
- 获取初始化参数 init-param
- 获取 ServletContext 对象
@Override
public void init(ServletConfig servletConfig) throws ServletException {
//1、可以获取 Servlet 程序的别名 servlet-name 的值
System.out.println("HelloServlet 程序的别名是:" + servletConfig.getServletName());
//2、获取初始化参数 init-param
System.out.println("初始化参数 username 的值是;" + servletConfig.getInitParameter("username"));
System.out.println("初始化参数 url 的值是;" + servletConfig.getInitParameter("url"));
//3、获取 ServletContext 对象
System.out.println(servletConfig.getServletContext());
}
注意:重写init方法,一定要调用父类的init(ServletConfig)。
- 因为子父类中都有init时,会调用子类的init()
- 而父类中的init(),使用了
this.config = config
保存了ServletConfig类型的配置信息 - 因此必须要调用一下父类
@override
public void init(ServletConfig config){
super.init(config);
//下面是自己重写的操作
}
3、ServletContext类
3.1、什么是ServletContext类
-
是一个接口,表示:Servlet上下文对象
-
ServletContext类型的对象是域对象
-
域对象:可以向Map一样存取数据的对象
-
域:指的是存取对象的操作范围---整个web工程
-
Map和域对象对比
存数据 取数据 删除数据 说明 Map put() get() remove() 域对象 setAttribute() getAttribute() removeAttribute() 方法名中有Attribute---》域对象
-
-
一个web工程只有一个ServletContext对象实例
-
ServletContext类型的对象是在web工程部署的时候创建,停止的时候销毁
3.2、ServletContext类的四个作用
- 获取 web.xml 中配置的上下文参数 context-param
- 获取当前的工程路径, 格式: /工程路径
- 获取工程部署后在服务器硬盘上的绝对路径
- 像 Map 一样存取数据
4、HTTP协议
4.1、是什么HTTP协议
- 协议:双方、多方约定好的规则
- HTTP协议:客户端和服务器之间通信,要遵守的规则
- 报文:协议中的数据
4.2、请求的HTTP协议格式
1、GET请求
- 请求行
- 请求的方式:GET
- 请求的资源路径【+?+请求参数】
- 请求的协议版本号:HTTP/1.1
- 求情头
- 很多key:value
![image-20201020024036689](5%E3%80%81Servlet.assets/image-20201020024036689.png)
2、POST请求
-
请求行
- 请求的方式:POST
- 请求的资源路径【+?+请求参数】
- 请求的协议版本号:HTTP/1.1
-
请求头
- key:value
-
空行
-
请求体:发给服务器的数据
![image-20201020024244463](5%E3%80%81Servlet.assets/image-20201020024244463.png)
3、哪些是GET、哪些是POST
-
GET 请求有哪些:
1、form 标签 method=get
2、a 标签
3、link 标签引入 css
4、Script 标签引入 js 文件
5、img 标签引入图片
6、iframe 引入 html 页面
7、在浏览器地址栏中输入地址后敲回车
-
POST 请求有哪些:
8、form 标签 method=post
4.3、响应的HTTP协议格式
- 响应行
- 响应的协议和版本号
- 响应状态码
- 响应状态描述符
- 响应头
- key : value 不同的响应头,有其不同含义
- 空行
- 响应体 ---->>> 就是回传给客户端的数据
![image-20201020024827387](5%E3%80%81Servlet.assets/image-20201020024827387.png)
4.4、响应码的说明
响应码 | 含义 |
---|---|
200 | 请求成功 |
302 | 请求重定向 |
404 | 服务器收到请求,但是数据不存在或请求地址错误 |
500 | 服务器收到请求,服务器里的代码错误 |
4.5、MIME类型说明
-
MIME 的英文全称是" Multipurpose Internet Mail Extensions" 多功能 Internet 邮件扩充服务。 MIME 类型的格式是“大类型/小 类型”,并与某一种文件的扩展名相对应
-
常用MIME类型
![image-20201020025252559](5%E3%80%81Servlet.assets/image-20201020025252559.png)
![image-20201020025304861](5%E3%80%81Servlet.assets/image-20201020025304861.png)