Sevlet的生命周期总览
各个阶段
1、实例化
Servlet容器创建Servlet的实例
2、初始化
该容器调用init()方法
3、服务
如果请求Servlet,则容器调用service()方法
4、销毁
销毁实例之前调用destory()方法
举例说明:
@WebServlet("/abc")
public class ABCServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public ABCServlet() {
System.out.println("ABCServlet的构造方法运行了");
}
public void init(ServletConfig config) {
System.out.println("ABCServlet的init方法运行了");
}
public void destroy() {
System.out.println("ABCServlet的destroy方法运行了");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("ABCServlet的doGet方法运行了");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("ABCServlet的doPost方法运行了");
}
}
控制台打印的结果:
ABCServlet的构造方法运行了
ABCServlet的init方法运行了
ABCServlet的doGet方法运行了
启动的时候自动将abc二进制代码加载到Servlet容器中
浏览器网址发送get请求
先执行构造方法,创建实例化对象
然后调用init方法,初始化操作
Servlet调用doGet方法
完成服务,看到一个空白的页面
第二次输入网址的时候发送的还是get请求,控制台输出
ABCServlet的doGet方法运行了
第一次执行Servlet比较慢是因为要创建实例化对象及初始化操作
实例化对象已经创建了,不会再重新创建实例化对象,所以运行速度很快
修改doGet方法之后保存,Servlet会调用destroy方法销毁实例化对象,重新创建
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("ABCServlet的doGet方法运行了");
System.out.println("ABCServlet的doGet方法修改了");
}
控制台输出:运行destroy方法
ABCServlet的构造方法运行了
ABCServlet的init方法运行了
ABCServlet的doGet方法运行了
十月 29, 2022 5:55:16 下午 org.apache.catalina.core.StandardContext reload
信息: 已开始重新加载名为[/Servlet]的上下文
ABCServlet的destroy方法运行了
上面的案例能够完整的说明Sevlet的生命周期
实例化,初始化,服务及销毁。