servlet的生命周期
一、🚀 模拟生命周期
首先创建一个servlet模板类,为了更直观,直接重写构造、初始化init
、doGet
、doPost
和销毁destroy
等方法,如下代码
;
public class testServlet extends HttpServlet {
//重写一下构造
public testServlet() {
System.out.println("testServlet");
}
@Override
public void destroy() {
System.out.println("servlet销毁");
}
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("servlet初始化");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("get请求-----");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("post请求-----");
}
}
在body里面写测试用例,一个get
请求,一个post
请求
<body>
<a href="testrequest?upass=abc&uage=12">test-request-get请求</a>
<hr>
<form action="testrequest" method="post">
uname:<input type="text" name="username"/>
爱好:<input type="checkbox" name="aihao" value="篮球"/>篮球
<input type="checkbox" name="aihao" value="排球"/>排球
<input type="checkbox" name="aihao" value="足球"/>足球
<input type="submit" value="提交"/>
</form>
</body>
完成上面两部,最后进行一下web.xml
配置信息,前后台关联一下,如下:
<servlet>
<servlet-name>user</servlet-name>
<servlet-class>
com.servlet.testServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>user</servlet-name>
<url-pattern>/testrequest</url-pattern>
</servlet-mapping>
现在当我们启动tomcat
服务器时,显示两个测试用例
当我们点击get请求时后台输出内容如下:
说明执行了构造方法、初始化方法和请求方法。当我多次请求时,构造方法和初始方法并不会再次执行。
最后当我们关闭tomcat
服务器时,观察后台输出,销毁方法执行,说明销毁方法会在tomcat
服务器停止的过程中执行。
二、🚀servlet生命周期是什么
经过上面的模拟,所以servlet的生命周期到底是什么,简单来说就是如下四个过程:
(1)实例化 --先创建servlet实例
(2)初始化 --init()
(3)处理请求 —service()
(4)服务终⽌ --destory()
- 当客户端⾸次发送第⼀次请求后,由容器(web服务器(tomcat))去解析请求
- 根据请求找到对应的servlet,判断该类的对象是否存在,不存在则创建servlet实例
- 调取init()⽅法 进⾏初始化操作-
- 初始化完成后调取service()⽅法,由service()判断客户端的请求⽅式,如果是get,则执⾏doGet(),如果是post则执⾏doPost()。处理⽅法完成后,作出相应结果给客户端。
- 单次请求处理完毕。当⽤户发送第⼆次以后的请求时,会判断对象是否存在,但是不再执⾏init(),⽽直接执⾏service⽅法,调取doGet()/doPost()⽅法。
- 当服务器关闭时调取destroy()⽅法进⾏销毁。