Servlet生命周期

Servlet 生命周期总述

1. 调用init()方法     初始化Servlet对象
2. 调用service()方法  处理用户请求
3. 调用destory()方法  销毁Servlet对象,释放资源

生命周期测试(IDEA内)

创建新的project和module


2

在src下建package用于存放java代码,web下建一个lib文件夹用于存放第三方包

目录结构如下

3

写servlet程序并配置web.xml文件

   + 在src的包下新建一个类ServletTest
   + 该类继承HttpServlet
   + 编写代码如下(默认ctrl+o重写方法)
        package com.szx.servlet;
        import javax.servlet.ServletException;
        import javax.servlet.http.HttpServlet;
        import javax.servlet.http.HttpServletRequest;
        import javax.servlet.http.HttpServletResponse;
        import java.io.IOException;

        public class ServletTest extends HttpServlet {
            public ServletTest(){
                System.out.println("这是构造方法");
            }
            protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                System.out.println("这是doGet方法");
            }
            protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                super.service("这是service方法");
            }
            public void destroy() {
                System.out.println("这是destroy方法");
            }
            public void init() throws ServletException {
                System.out.println("这是init方法");
            }
        }

配置web.xml文件并运行

4

然后运行服务器, 默认会得到如下画面

5

这是默认的 index.jsp 页面, 我们在地址栏后面添上servletTest

6

返回控制台查看结果

7

关闭服务器 查看结果

8

我们可以看出方法执行的顺序:
构造方法--->init()方法--->service()方法--->destroy()方法
但是我们重写的doGet()方法并没有被执行 ,这是为什么呢
其实我们在重写service()方法的时候,HttpServlet中的service()方法已经失效,而service方法有着调度请求的作用,因此重写service方法后,doGet()或者doPost()方法将不再被执行
如果想要继续执行doGet()或者doPost()方法,则需要在重写完service方法后调用父类的service方法

9

然后重新运行即可查看到生命周期

10

posted @ 2020-04-19 17:46  退役的熬夜选手  阅读(212)  评论(0编辑  收藏  举报