Servlet

2021/2/25 Java

# Servlet 生命周期

主要体现在三个方法上,init、service和destroy。

# 初始化阶段

Servlet容器加载Servlet,加载完成后,Servlet容器会创建一个Servlet实例,并调用init方法。init方法只会调用一次。Servlet容器会在以下几种情况下装载Servlet:

1、在Servlet容器启动时自动装载某些Servlet,如SpringBoot启动类做的事情;

2、在Servlet容器启动后,客户端首次向Servlet发送请求;

3、Servlet类文件被更新后,重新装载。

# 处理客户端请求阶段

每收到一个客户端请求,服务器都会产生一个新的线程去处理。

# 终止阶段

当Servlet容器终止运行,或者Servlet重新装载Servlet新实例时,Servlet容器会调用Servlet的destroy方法,由JVM的垃圾回收器进行垃圾回收的。

# Servlet 工作原理

客户端发送一个请求,Servlet调用service方法对请求进行响应。

Servlet和GenericServlet是不特定于任何协议的,所以Servlet和GenericServlet接口中没有doGet、doPost等方法。

HttpServlet是特定于Http协议的,在service方法中,将ServletRequest,ServletResponse强转为HttpRequest和HttpResponse,最后调用自己的service方法去完成响应。service方法会对请求的方法进行匹配,进入相应的逻辑层,完成请求的响应。

# Servlet 隐射路径

隐射路径优先级:完全路径匹配 > 目录匹配 > 扩展命名匹配