Servlet-生命周期

Servlet 的生命周期详解 在方法执行过程中,DispatcherServlet 会根据配置的 HandlerAdapter 对请求参数进行解析,将其转换为方法所需的类型,并将方法的执行结果封装为 ModelAndView 对象。在初始化阶段中,DispatcherServlet 会读取并解析配置文件(如 web.xml 或注解配置等),创建必要的组件对象(如 HandlerMapping、HandlerAdapter 等),并将它们存储在 ServletContext 中,以便于在后续的请求处理中使用。 阅读详情


Servlet生命周期可以定义为从加载到卸载的整个过程。以下是servlet遵循的路径:

  • 通过调用init()方法初始化servlet 。
  • Servlet调用service()方法来处理客户端的请求。
  • 通过调用destroy()方法来终止servlet 。
  • 最后,JVM的垃圾收集器处理servlet。

说明:Servlet的生命周期一共有5个阶段(注意,3个阶段是不正确的),这5个阶段分别是:

  • 加载:Servlet自动加载
  • 初始化init()方法:该方法会在Servlet被加载并实例化后执行
  • 服务:抽象方法service()——一般常用的是doGet()和doPost()方法
  • 销毁destroy()方法:Servlet被系统回收时执行
  • 卸载:Servlet自动处理
    现在让我们详细讨论生命周期方法。

init()方法

初始化方法仅被调用一次。仅在创建servlet时调用它,此后不为任何用户请求调用。因此,它与applet的init()方法一样用于一次性初始化。

通常,在用户首次调用与该servlet相对应的URL时创建servlet,但是也可以指定在首次启动服务器时加载servlet。

当用户调用servlet时,将创建每个servlet的单个实例,每个用户请求都会产生一个新线程,该线程将适当地移交给doGet或doPost。init()方法仅创建或加载一些将在servlet的整个生命周期内使用的数据。

初始化init()方法定义

public void init() throws ServletException {
   // 初始化方法...
}

初始化init()方法具体使用

  1. 默认第一次访问Servlet时,会被执行(在这个生命周期中有且只执行这一次)
  2. 可以修改为Tomcat服务器启动时自动执行:
    1. 在Servlet3.0之前,可以在web.xml的该Servlet的<Servlet></Servlet>之间添加这么一句,这个适用于3.0之前即以后的版本:
    <Servlet>
       ...
       <load-on-startup>1</load-on-stratup>
       	<!--其中的1代表执行顺序,如果有其他的Servlet,按照这个数字依次执行--> 
       ...
    </Servlet>
    
    1. Servlet3.0之后,可以直接用Servlet注释@WebServlet(value="url-pattern",loadOnStartup=1),当只有一个值时前面的属性可以省略,如@WebServlet("url-pattern")Servlet-注释详情见此链接。

service()方法

service()方法是执行实际任务的主要方法。Servlet容器(即Web服务器)调用service()方法来处理来自客户端(浏览器)的请求,并将格式化后的响应写回到客户端。

每次服务器收到对Servlet的请求时,服务器都会产生一个新线程并调用服务。service()方法检查HTTP请求类型(GET,POST,PUT,DELETE等),并在适当的情况下调用doGet,doPost,doPut,doDelete等方法。

service()方法:

public void service(ServletRequest request, ServletResponse response) 
   throws ServletException, IOException {
}

容器调用service()方法,并且service()方法适当地调用doGet,doPost,doPut,doDelete等方法。因此,您与service()方法无关,但可以根据从客户端收到的请求类型来覆盖doGet()或doPost()。

doGet()和doPost()是每个服务请求中最常用的方法。

doGet()方法

GET请求是由对URL的常规请求或未指定METHOD的HTML表单产生的,应由doGet()方法处理。

public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
   // Servlet 代码
}

doPost()方法

POST请求是由HTML表单产生的,该表单专门将POST列为METHOD,它应该由doPost()方法处理。

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
   // Servlet 代码
}

在日常的程序编程时,编写一个Servlet,我们可以只编写doGet()或doPost()中的其中一个,如我们只编写doGet()方法,然后用doPost()方法去调用该Servlet的doGet方法即可,如:

public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
   // Servlet 代码
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
   doGet(request, response);
}

destroy()方法

在Servlet的生命周期结束时,只会调用一次destroy()方法。该方法使您的Servlet有机会关闭数据库连接,暂停后台线程,将Cookie列表或命中计数写入磁盘,以及执行其他此类清理活动。

调用destroy()方法后,该servlet对象被标记为垃圾回收。destroy方法的定义如下所示:

public void destroy() {
   // 销毁的代码...
}

架构图

下图描述了典型的servlet生命周期场景。

首先,将到达服务器的HTTP请求委托给Servlet容器。

servlet容器在调用service()方法之前先加载servlet。

然后,Servlet容器通过产生多个线程来处理多个请求,每个线程执行该Servlet单个实例的service()方法。
在这里插入图片描述
下一篇:Servlet-示例

Servlet生命周期、配置、创建时机及默认Servlet 阅读详情

相关推荐

MATLAB新手必看:SVPWM七段式算法仿真全流程解析(附完整代码)

本文为MATLAB新手和电机控制初学者提供了SVPWM七段式算法的完整仿真与代码实现指南。文章详细解析了从扇区判断、矢量作用时间计算到PWM波形生成的全流程,并附带了可直接运行的MATLAB代码,帮助读者在理解FOC控制核心算法的基础上,快速掌握工程仿真与调试技巧。

weixin_29074295的博客 281

Servlet的生命周期

Servlet的生命周期 servlet的生命周期顾名思义就是从servlet出现到消亡(销毁)的全过程。 主要分为以下几个阶段:加载类—>实例化(为对象分配空间)—>初始化(为对象的属性赋值)—>请求响应(服务阶段)—>销毁 servlet生命周期三个方法: init()初始化阶段 service()处理客户端请求阶段 destroy()终止阶段 ​ 容器(tomcat等)装载servlet 实例化阶段 1.1 当客户端首次发送第一次请求后,由Serv

Ran小Ran的博客 2万+

如何浏览与下载全球免费的地图高分辨率(亚米级)的遥感影像?

前言 如果你想使用商业卫星的高分辨遥感影像,一般价格昂贵。我们可以使用地图平台上免费的高分辨率数据。目前数据源很多,比如说google earth、天地图、四维地球、必应地图等等。这些影像统一有一个共同点就是:RGB三波段;Web地图瓦片服务。这意味着我们可以通过瓦片服务下载影像,但下载的影像只有三个波段,分别是 一.引言 二、可使用高分辨率的地图数据源 1.Google Earth影像 2.Esri World Image 3.天地图 4.必...

锐多宝的地理空间 2万+

servlet生命周期

1.servlet的生命周期 主要有三个方法: init()初始化阶段 service()处理客户端请求阶段 destroy()终止阶段 初始化阶段: Servlet容器加载Servlet,加载完成后,Servlet容器会创建一个Servlet实例并调用init()方法,init()方法只会调用一次 Servlet容器会在一下几种情况装载Servlet: Servlet容器启动时自动装载某些s...

zhaohong_bo的专栏 2万+

保姆级教程:在RK3588开发板上配置USB-C PD充电(基于HUSB311芯片与DTS详解)

本文详细介绍了在RK3588开发板上配置USB-C PD充电的完整流程,重点解析了HUSB311芯片的硬件原理与DTS安全配置。通过实战案例和调试技巧,帮助开发者避免常见错误,实现稳定可靠的Type-C PD快充功能,适用于从基础开发板到工业设备的多场景需求。

weixin_42552315的博客 521

Java Servlet系列之Servlet生命周期

Servlet生命周期定义了一个Servlet如何被加载、初始化,以及它怎样接收请求、响应请求,提供服务。在讨论Servlet生命周期之前,先让我们来看一下这几个方法: 1. init()方法       在Servlet的生命周期中,仅执行一次init()方法,它是在服务器装入Servlet时执行的,可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少

紫羽风的博客 1万+

SigmaStudio进阶技巧:如何用ADAU1701实现60段EQ与防啸叫算法

本文深入探讨了如何在ADAU1701 DSP芯片上实现专业级音频处理系统。通过精密的资源规划与架构设计,详细讲解了构建高达60段参数均衡器(EQ)的有效方法,并集成了移频与自适应陷波双策略的智能防啸叫算法。内容涵盖从SigmaStudio工程优化、算法模块组合到系统联调实战的全流程,旨在帮助中高级开发者充分利用ADAU1701性能,打造稳定、高效的音频处理解决方案。

weixin_28256233的博客 384

描述Servlet生命周期

Servlet是在服务器端运行的Java程序,可以接收客户端请求并做出响应,是基于 Java 技术的 web 组件,该组件由容器托管,用于生成动态内容。他是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。//初始化servlet,调用init方法@OverrideSystem.out.println("初始化时调用");}//开启服务@OverrideSystem.out.println("开启服务时调用");

qq_53123736的博客 5192

编程语言的未来走向:趋势、挑战与机遇

同时,鼓励他们接触和掌握一些专业领域的开发工具和技术框架,比如Web开发中的JavaScript、React.js,数据分析的Python(Pandas, NumPy, Matplotlib等),以及人工智能和机器学习领域的TensorFlow、PyTorch等。当前,全球范围内正积极推动编程教育的普及化,从儿童启蒙阶段到高等教育阶段,乃至终身学习的过程中,如何优化编程语言的教学方法、提高教学质量,并将其广泛应用于不同领域,是教育者与政策制定者面临的重大课题。未来,编程语言的多样化和包容性将会继续加强。

zrc_xiaoguo的博客 1828

JMeter压力测试全攻略:从入门到精通

本文系统讲解JMeter压力测试的完整流程与结果评估方法。开篇介绍压力测试的核心概念及JMeter工具特性,随后从环境搭建入手,详细说明JDK配置、JMeter安装及中文界面设置。主体部分围绕测试流程展开,涵盖测试计划创建、线程组参数调优、HTTP请求配置、断言与监听器添加等实操步骤;结果评估环节深入解析聚合报告指标、结果树分析及性能瓶颈定位方法,并通过电商接口测试案例演示全流程应用。文末总结关键要点,为读者提供从基础操作到分布式压测、性能调优的进阶学习方向,助力掌握JMeter在系统性能评估中的核心应用。

邓邓子的博客 2416

java servlet的生命周期_Java Servlet系列之Servlet生命周期

Servlet生命周期定义了一个Servlet如何被加载、初始化,以及它怎样接收请求、响应请求,提供服务。在讨论Servlet生命周期之前,先让我们来看一下这几个方法:1. init()方法在Servlet的生命周期中,仅执行一次init()方法,它是在服务器装入Servlet时执行的,可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servl...

weixin_36268390的博客 1358

YOLOv8与Swin Transformer的完美结合:如何提升目标检测的精度与速度

Swin Transformer(Shifted Window Transformer)是一种新型的视觉Transformer架构,采用了局部窗口(Window)和局部窗口偏移(Shifted Window)的策略,极大减少了计算复杂度,同时保持了全局感知能力。局部窗口注意力:每个窗口内的元素进行自注意力计算,减少计算量。窗口偏移:通过在不同层次引入窗口偏移,增强了全局信息的交互。层级设计:通过堆叠多个层次的模块,逐渐捕捉不同尺度的特征。

shrgegrb的博客 2151

Servlet生命周期

Servlet生命周期

雷神乐乐的博客 895

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

JavaWeb——Servlet——Servlet的生命周期

JavaWeb——Servlet——Servlet的生命周期 导语:所谓Servlet的生命周期,就是说Servlet什么时候被创建的?什么时候被销毁的?从被创建到被销毁它又经历了哪些过程呢? 原理: Servlet底层的生命周期分为5个阶段来执行 1、装载web.xml web.xml文件中对Servlet进行了声明,并且绑定了url,tomcat启动时会自动扫描web.xml文件,从而知道了Servlet的存在并将其解析。 2、创建Servlet对象,执行构造函数 当我们第一次去访问url时,tomca

muyuxifeng的博客 434

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

servlet的生命周期

1、Servlet的生命周期就是servlet类对象什么时候创建?什么时候调用对应的方法,什么时候销毁。也就是说自定义对象的生命周期由我们程序员自己手动控制。但是!!!Servlet它不是一个普通的java类。是一个被tomcat服务器调用的。所以Servlet是生命周期是被tomcat服务器去控制的。

m0_74356429的博客 1062

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Servlet 生命周期

当我们Servlet类中编写一个有参数的构造方法,如果没有手动编写无参数构造方法会出现什么问题?思考:Servlet的无参数构造方法是在对象第一次创建的时候执行,并且只执行。研究:服务器在启动的Servlet对象有没有被创建出来(默认情况下)?思考:我们自己new的Servlet对象受WEB容器的管理吗?请问:destroy方法调用的时候,对象销毁了还是没有销毁呢?init方法也是在对象第一次创建的时候执行,并且只执行。怎么让服务器启动的时候创建Servlet对象呢?关于Servlet类中方法的调用次数?

拒绝八股,追寻本质。 667
上一篇: Servlet-示例
下一篇: Servlet-客户端请求
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值