[TOC]
Servlet是什么
Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
狭义的Servlet是指java实现的一个接口。
广义的Servlet是任何一个实现了这个接口的类。
我们看一下,Servlet这个接口,Servlet接口定义了所有Servlets必须实现的方法
public interface Servlet {
public void init(ServletConfig config) throws ServletException;
public ServletConfig getServletConfig();
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException;
public String getServletInfo();
public void destroy();
}
Servlet生命周期
Servlet接口定义的5个方法
-
init
:当一个请求进来时,Servlet容器会调用该方法初始化一个Servlet来处理请求 -
getServletConfig
:返回Servlet初始化参数 -
service
:Servlet初始化后,调用该方法处理具体请求 -
getServletInfo
:返回作者,版本等信息 -
destroy
:Servlet处理完请求后调用该方法销毁Servlet,清理该servlet持有的资源,比如内存,线程,确保任何持久状态都与内存中servlet的当前状态同步
Servlet容器启动时,根据配置生成Servlet实例并调用init
方法初始化,当有请求进来时,调用对应的service
方法处理请求。
Servlet容器关闭时,调用Servlet的destroy
方法销毁Servlet。
实现Servlet
- 实现Servlet接口
public class MyServlet implements Servlet {
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("MyServlet开始初始化");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest req,
ServletResponse res) throws ServletException, IOException {
System.out.println("MyServlet开始处理请求");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("MyServlet开始销毁");
}
}
- 配置web.xml
...
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.servlet.MyServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
...
- Tomcat作为容器,启动
......
MyServlet开始初始化
[2020-05-10 06:16:13,229] Artifact sample-servlet:war exploded: Artifact is deployed successfully
[2020-05-10 06:16:13,230] Artifact sample-servlet:war exploded: Deploy took 473 milliseconds
可以看到,Tomcat容器调用了init
方法初始化了MyServlet
- 浏览器请求
......
MyServlet开始初始化
[2020-05-10 06:16:13,229] Artifact sample-servlet:war exploded: Artifact is deployed successfully
[2020-05-10 06:16:13,230] Artifact sample-servlet:war exploded: Deploy took 473 milliseconds
MyServlet开始处理请求
可以看到,Tomcat容器调用了service
方法初始化了MyServlet
- 关闭Tomcat
MyServlet开始初始化
[2020-05-10 06:16:13,229] Artifact sample-servlet:war exploded: Artifact is deployed successfully
[2020-05-10 06:16:13,230] Artifact sample-servlet:war exploded: Deploy took 473 milliseconds
MyServlet开始处理请求
MyServlet开始销毁
Disconnected from server
可以看到,Tomcat容器调用了destroy
方法销毁了MyServlet
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。