Servlet系列:生命周期(init、 service、destroy)详解

Servlet的生命周期是由Web容器(如Tomcat)管理的,包括以下三个阶段:

  1. 加载和实例化:当Web应用程序启动时,Web容器会加载和实例化Servlet。加载和实例化过程可以在应用程序启动时自动完成,也可以通过Servlet的名称手动加载。在实例化Servlet后,Web容器会调用其init()方法进行初始化。
  2. 处理请求:当客户端发送请求时,Web容器会调用Servlet的service()方法处理请求。service()方法会根据请求的类型(GET、POST等)调用doGet()或doPost()方法。除了service()方法外,还可以覆盖doGet()、doPost()、doPut()、doDelete()等方法来处理不同类型的请求。
  3. 销毁:当Web应用程序停止或重新部署时,Web容器会调用Servlet的destroy()方法进行清理。此后,Servlet实例将被回收并释放资源。

在Servlet的生命周期中,init()、service()和destroy()方法是必须实现的。而doGet()、doPost()等其他方法则根据需要实现。需要注意的是,在多个线程同时访问Servlet时,Web容器会对Servlet实例进行同步处理,以保证线程安全。

Servlet没有 main()方法,不能独立运行,它的运行完全由 Servlet 引擎来控制和调度。 所谓生命周期,指的是 servlet 容器何时创建 servlet 实例、何时调用其方法进行请求的处理、 何时并销毁其实例的整个过程。

  • 实例和初始化时机

当请求到达容器时,容器查找该 servlet 对象是否存在,如果不存在,则会创建实例并进行初始化。

  • 就绪/调用/服务阶段

有请求到达容器,容器调用 servlet 对象的 service()方法,处理请求的方法在整个生命周期中可以被多次调用; HttpServlet 的 service()方法,会依据请求方式来调用 doGet()或者 doPost()方法。但是, 这两个 do 方法默认情况下,会抛出异常,需要子类去 override。

  • 销毁时机

当容器关闭时(应用程序停止时),会将程序中的 Servlet 实例进行销毁。

上述的生命周期可以通过 Servlet 中的生命周期方法来观察。在 Servlet 中有三个生命周 期方法,不由用户手动调用,而是在特定的时机有容器自动调用,观察这三个生命周期方法 即可观察到Servlet 的生命周期。

init 方法,在 Servlet 实例创建之后执行(证明该 Servlet 有实例创建了)

    @Overridepublic void init(ServletConfig servletConfig) throws ServletException {System.out.println("2.初始化");}

service 方法,每次有请求到达某个 Servlet 方法时执行,用来处理请求(证明该Servlet 进行服务了)

    @Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("3.处理请求");}

destroy 方法,Servlet 实例销毁时执行(证明该 Servlet 的实例被销毁了)

    @Overridepublic void destroy() {System.out.println("4.销毁了");}

Servlet 的生命周期,简单的概括这就分为四步:servlet 类加载–>实例化–>服务–>销毁。

package com.mcode;import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import java.io.IOException;/*** ClassName: LifeServlet* Package: com.mcode* Description:** @Author: robin* @Version: v1.0*/
@WebServlet("/life")
public class LifeServlet implements Servlet {public LifeServlet() {System.out.println("1.实例化");}@Overridepublic void init(ServletConfig servletConfig) throws ServletException {System.out.println("2.初始化");}@Overridepublic ServletConfig getServletConfig() {return null;}@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("3.处理请求");}@Overridepublic String getServletInfo() {return null;}@Overridepublic void destroy() {System.out.println("4.销毁了");}
}

image

整体流程

  1. Web Client 向 Servlet 容器(Tomcat)发出 Http 请求

  2. Servlet 容器接收 Web Client 的请求

  3. Servlet 容器创建一个 HttpServletRequest 对象,将 Web Client 请求的信息封装到这个对象 中

  4. Servlet 容器创建一个 HttpServletResponse 对象

  5. Servlet 容器调HttpServlet 对象service 方法,把 Request 与 Response 作为参数,传给

HttpServlet

  1. HttpServlet 调用 HttpServletRequest 对象的有关方法,获取 Http 请求信息

  2. HttpServlet 调用 HttpServletResponse 对象的有关方法,生成响应数据

  3. Servlet 容器把 HttpServlet 的响应结果传给 Web Client

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/642062.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mac上如何设置映射某个网站站点域名的IP

最近某常用的站点换 IP 了,但是 DNS 服务器还没有修改,这就导致无法访问(换 DNS 服务器也不行)。在用了一段时间的 IP 访问之后,还是没好,不知道是 DNS 污染还是咋了,所以最后还是手动改一下吧。…

MySQL定期整理磁盘碎片

MySQL定期整理磁盘碎片:提升数据库性能的终极指南 MySQL作为一个强大的关系型数据库管理系统,在长时间运行后可能会产生磁盘碎片,影响数据库性能。本博客将深入讨论如何定期整理MySQL磁盘碎片,以确保数据库的高效运行。我们将介绍…

mac滚动截图

参考博客 https://www.zhihu.com/question/313673726/answer/2938671835 首先去AppStore搜索 iShot 这个也是要钱的,不过我输入appleID后,并没有扣我钱,不知道设么回事 然后打开iShot 点击观看视频,然后mac会自动打开一个新的…

Softing mobiLink Power:集成FDI技术,简化多协议总线设备的配置方式

Softing的mobiLink Power是一款多协议总线通信工具,用于调试和维护过程自动化现场设备。目前,该工具已具备完整的FDI CommServer(包括FF、PA、HART),并支持与FDI客户端一起使用,如艾默生的AMS Device Confi…

LeetCode 670 最大交换数

周一,非常冷,大风呼呼的,上班路都走不动。 好消息,马上要过年了。大风吹,天气好。 过年过年,回家过年~ 学生时代的迷茫是不应该存在的,最好的时光应该尽情享受,而不应该自己给加层…

西门子触摸屏维修6AV7880-0AA22-2DA2

西门子SIMATIC ITP1000平板PC机10.1 英寸采用 Intel Core i5 Skylake CPU,适合需要达16GB RAM的较高图形性能的工业移动计算应用。该 CPU 还提供了足够性能储备以满足将来的要求。安装的 Microsoft Windows 7 和 Microsoft Windows 10 操作系统以合理方式集成到现有…

68. redis计数与限流中incr+expire的坑以及解决办法(Lua+TTL)

文章目录 一、简介二、代码演进第一版代码(存在bug隐患)第二版代码(几乎无隐患)第三版代码(完美无瑕) 一、简介 在日常工作中,经常会遇到对某种操作进行频次控制或者统计次数的需求,此时常用的…

Elasticsearch分布式一致性原理剖析(一)-节点篇

前言 “Elasticsearch分布式一致性原理剖析”系列将会对Elasticsearch的分布式一致性原理进行详细的剖析,介绍其实现方式、原理以及其存在的问题等(基于6.2版本)。 ES目前是最流行的分布式搜索引擎系统,其使用Lucene作为单机存储引擎并提供强大的搜索查…

解决Git添加.gitignore文件后不生效的问题

1. 问题描述 如上图所示,在已存在.gitignore文件且已经提交过的Git管理的项目中,其中.class、.jar文件以及.idea目录内的内容全部都还是被Git管理了,可见.gitignore文件并没有生效。 2. 原因发现 .gitignore文件只能作用于 Untracked Files…

eNSP学习——配置通过FTP进行文件操作

原理概述: FTP(File Transfer Protocol,文件传输协议)是在TCP/IP网络和Internet上最早使用的协议之一,在TCP/IP协议族中属于应用层协议,是文件传输的Internet标准。主要功能是向用户提供本地和远程主机…

python--pyQt5 对话框使用(QInputDialog) PySide6

参考: https://www.cnblogs.com/XJT2018/p/10208710.html https://blog.csdn.net/panrenlong/article/details/79948261 含参数详解: https://blog.csdn.net/zhulove86/article/details/52515460 一、简介 QInputDialog类提供了一个简单的便捷对话框&a…

深入浅出AI落地应用分析:AI音乐生成之「Suno.ai」

接下来会每周集中体验一些通用或者垂直的AI落地应用,主要以一些全球或者国外国内排行较前的产品为研究对象,「AI 产品榜: aicpb.com」以专题的方式在博客进行分享。 本节主要介绍和体验AI音乐生成应用产品Suno AI,Suno来自目前最…

HQL,SQL刷题简单查询,基础,尚硅谷

今天刷SQL简单查询,大家有兴趣可以刷一下 目录 相关表数据: 题目及思路解析: 总结归纳: 知识补充: 关于LIKE操作符/运算符 LIKE其他使用场景包括 LIKE模糊匹配情况 相关表数据: 1、student_info表 2、sc…

Unity中URP下获取主灯信息

文章目录 前言一、计算BulinnPhone的函数有两个重载1、 目前最新使用的是该方法(这是我们之后主要分析的函数)2、 被淘汰的老方法,需要传入一堆数据 二、GetMainLight1、Light结构体2、GetMainLight具有4个方法重载3、1号重载干了什么&#x…

主动轮廓——计算机视觉中的图像分割方法

​ 一、说明 简单来说,计算机视觉就是为计算机提供类似人类的视觉。作为人类,我们很容易识别任何物体。我们可以很容易地识别山丘、树木、土地、动物等,但计算机没有眼睛,也没有大脑,因此它很难识别任何图像。计算机只…

Linux下软件安装的命令【RPM,YUM】及常用服务安装【JDK,Tomcat,MySQL】

Linux下软件安装的命令 源码安装 以源代码安装软件,每次都需要配置操作系统、配置编译参数、实际编译,最后还要依据个人喜好的方式来安装软件。这个过程很麻烦很累人。 RPM软件包管理 RPM安装软件的默认路径: 注意: /etc 配置文件放置目录…

docker network网络

网络分类 bridge网络 bridge是docker默认网络模式,docker安装后会选择一个私有网段作为bridge的子网,在我们创建容器时默认会将容器网络加入到这个子网中。 原理:Docker Daemon(后台进程) 利用 veth pair 技术&#…

3dmax渲不出模型是什么原因---模大狮模型网

3DMax无法渲染模型可能有多种原因。以下是一些常见的问题和解决方法: 材质设置错误:检查模型的材质设置是否正确,包括纹理贴图的路径、UV映射是否正确等。确保材质的属性设置正确,如颜色、反射率、透明度等。 灯光设置问题&#…

【JS逆向学习】某壁纸下载(ast混淆)

逆向目标 目标网址:https://bz.zzzmh.cn/index逆向接口一:https://api.zzzmh.cn/bz/v3/getData逆向接口二:https://cdn2.zzzmh.cn/wallpaper/origin/0d7d8d691e644989b72ddda5f695aca2.jpg?response-content-dispositionattachment&aut…

AnimatedDrawings:让绘图动起来

老样子,先上图片和官网。这个项目是让绘制的动画图片动起来,还能绑定人体的运动进行行为定制。 快速开始 1. 下载代码并进入文件夹,启动一键安装 git clone https://github.com/facebookresearch/AnimatedDrawings.gitcd AnimatedDrawingspip…