Servlet生命周期
Servlet 生命周期总述
1. 调用init()方法 初始化Servlet对象
2. 调用service()方法 处理用户请求
3. 调用destory()方法 销毁Servlet对象,释放资源
生命周期测试(IDEA内)
创建新的project和module
在src下建package用于存放java代码,web下建一个lib文件夹用于存放第三方包
目录结构如下
写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文件并运行
然后运行服务器, 默认会得到如下画面
这是默认的 index.jsp 页面, 我们在地址栏后面添上servletTest
返回控制台查看结果
关闭服务器 查看结果
我们可以看出方法执行的顺序: |
构造方法--->init()方法--->service()方法--->destroy()方法 |
但是我们重写的doGet()方法并没有被执行 ,这是为什么呢 |
其实我们在重写service()方法的时候,HttpServlet中的service()方法已经失效,而service方法有着调度请求的作用,因此重写service方法后,doGet()或者doPost()方法将不再被执行 |
如果想要继续执行doGet()或者doPost()方法,则需要在重写完service方法后调用父类的service方法 |