Servlet生命周期-9
创始人
2024-04-03 13:55:11

目录

1、初始化阶段

2、运行时阶段

3、销毁阶段

4、Servlet 生命周期执行流程

5、示例


        Servlet 的生命周期就是 Servlet 从创建到销毁的过程。Servlet 的生命周期由 Servlet 容器管理,主要分为以下 3 个阶段。

  • 初始化阶段
  • 运行时阶段
  • 销毁阶段

        在 jakarta.servlet.Servlet 接口中定义了 3 个方法:init()、service()、destory(),它们分别在 Servlet 生命周期的不同阶段被 Servlet 容器调用。

1、初始化阶段

        Servlet 初始化是其生命周期的第一个阶段,也是其他阶段的基础。只有完成了初始化,Servlet 才能处理来自客户端的请求。

        Servlet 初始化阶段分为 2 步:

  • 加载和实例化 Servlet;
  • 调用 init() 方法进行初始化;

1)加载和实例化 Servlet

        Servlet 容器负责加载和实例化 Servlet。当容器启动或首次请求某个 Servlet 时,容器会读取 web.xml (或 @WebServlet 注解)中的配置信息,对指定的 Servlet 进行加载。加载成功后,容器会通过反射对 Servlet 进行实例化。

因为 Servlet 容器是通过 Java 的反射 API 来创建 Servlet 实例的,需要调用 Servlet 的默认构造方法,所以在编写 Servlet 类时,不能只提供一个带参数的构造方法。

2)调用 init() 方法进行初始化 

        加载和实例化完成后,Servlet 容器调用 init() 方法初始化 Servlet 实例。其目的是:让 Servlet 实例在处理请求之前完成一些初始化工作,例如:建立数据库连接,获取配置信息等。(Servlet 实例可以通过 ServletConfig 对象获取在 web.xml (或 @WebServlet)中配置的初始化参数。)

        在 Servlet 的整个生命周期,init() 方法只会被调用一次。

2、运行时阶段

        运行时阶段是 Servlet 生命周期中最重要的阶段。Servlet 容器在接收到客户端请求时,容器会针对该请求分别创建一个 ServletRequest 对象和 ServletResponse 对象,并将它们以参数的形式传入 service() 方法内,并调用该方法对请求进行处理。这里需要注意的是,执行 service() 方法前,init() 方法必须已成功执行。

        在 service() 方法中,Servlet 通过 ServletRequest 对象获取客户端的相关信息和请求信息。在请求处理完成后,通过 ServletResponse 对象将响应信息进行包装,返回给客户端。当 Servlet 容器将响应信息返回给客户端后,ServletRequest 对象与 ServletResponse 对象就会被销毁。

        在 Servlet 的整个生命周期内,对于 Servlet 的每一次请求,Servlet 容器都会调用一次 service() 方法,并创建新的 ServletRequest 和 ServletResponse 对象。即 service() 方法在 Servlet 的整个生命周期中会被调用多次。

3、销毁阶段

        当 Servlet 容器关闭、重启或移除 Servlet 实例时,容器就会调用 destory() 方法,释放该实例使用的资源。例如:关闭数据库连接,关闭文件的输入流和输出流等。随后该实例被 Java 的垃圾收集器所回收。对于每个 Servlet 实例来说,destory() 方法只能被调用一次。

4、Servlet 生命周期执行流程

        Servlet 生命周期流程如下图所示:

        在 Servlet 的整个生命周期中,创建 Servlet 实例、调用 init() 方法和 destory() 方法都只执行一次。当初始化完成后,Servlet 容器会将该实例保存在内存中,通过调用它的 service() 方法,处理接收到的请求。

5、示例

1)在 servletDemo 项目中,对 MyServlet.java 进行修改,代码如下:

package com.hoperun.www;import java.io.IOException;
import java.io.PrintWriter;import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;/*** * @author Administrator**/
@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {private static final long serialVersionUID = 1L;private int initCount = 0;private int httpCount = 0;private int destoryCount = 0;@Overridepublic void init() throws ServletException {initCount++;super.init();// 向控制台输出init方法被调用次数System.out.println("调用init方法:" + initCount + "次.");}protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {httpCount++;// 控制台输出doGet方法次数System.out.println("调用doGet方法:" + httpCount + "次.");// 设置返回页面格式与字符集response.setContentType("text/html;charset=UTF-8");PrintWriter writer = response.getWriter();// 向页面输出writer.write("初始化次数:" + initCount + "
" + "处理请求次数:" + httpCount + "
" + "销毁次数:" + destoryCount);writer.close();}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}@Overridepublic void destroy() {destoryCount++;super.destroy();// 向控制台输出destory方法被调用次数System.out.println("**********************************调用destroy方法:" + destoryCount + "次*******************************");}}

2)启动 Tomcat,在地址栏输入:http://localhost:8080/servletDemo/MyServlet,多次访问MyServlet,结果如下图:

3)点击停止Tomcat,控制台输出,如下图:

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...