Servlet p2 Servlet的生命周期

这篇具有很好参考价值的文章主要介绍了Servlet p2 Servlet的生命周期。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

学习课程: 【这可能是B站讲的最好的Servlet教程,5小时打通Servlet全套教程丨2022最新版,轻松掌握servlet基础+案例实操】 https://www.bilibili.com/video/BV1Kr4y1V7ZE/?share_source=copy_web&vd_source=2c07d62293f5003c919b2df9b2e0549e

Servlet的生命周期

基本介绍

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

  • 实例和初始化时机

    Servlet 通过调用 init () 方法进行初始化。当请求到达容器时,容器查找该servlet对象是否存在,如果不存在,则会创建实例并进行初始化。

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

  • 销毁时机
    Servlet 通过调用 destroy() 方法终止(结束)。当容器关闭时(应用程序停止时),会将程序中的Servlet实例进行销毁。最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

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

方法介绍

  • init方法:在Servlet实例创建之后执行(证明该Servlet有实例创建了)。init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。因此,它是用于一次性初始化,就像 Applet 的 init 方法一样。

    ​ Servlet 创建于用户第一次调用对应于该 Servlet 的 URL 时,但是您也可以指定 Servlet 在服务器第一次启动时被加载。

    ​ 当用户调用一个 Servlet 时,就会创建一个 Servlet 实例,每一个用户请求都会产生一个新的线程,适当的时候移交给 doGet 或 doPost 方法。init() 方法简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。

    init 方法的定义如下:

    public void init() throws ServletException {
      // 初始化代码...}
    
  • service方法:每次有请求到达某个Servlet方法时执行,用来处理请求(证明该Servlet进行服务了)。service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。

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

    下面是该方法的特征:

    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException
    {
    
    }
    
  • destroy方法:Servlet实例销毁时执行(证明该Servlet的实例被销毁了)。destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。

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

     public void destroy() {
        // 终止化代码...
      }
    

Servlet的生命周期,简单的慨括这就分为四步:servlet类加载->实例化->服务->销毁。下面我们描述一下Tomcat与Servlet是如何工作的,看看下面的时序图:

Servlet p2 Servlet的生命周期

  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
  6. HttpServlet调用HttpServletRequest对象的有关方法,获取Http请求信息

代码演示:文章来源地址https://www.toymoban.com/news/detail-504904.html

package com.xxxx.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/ser05")
public class servlet05 extends HttpServlet {

    /**
     * 就绪/服务方法(处理请求数据)
     * 系统方法,服务器自动调用,
     * 当有请求到达Servlet时,就会调用该方法
     * 方法可以被多次调用
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Servlet被调用...");
    }

    /**
     * 初始化方法
     * 系统方法,服务器自动调用,它在第一次创建 Servlet对象 时被调用
     * 当请求到达Servlet容器时,Servlet容器会判断该Servlet对象是否存在,如果不存在,则创建实例,并调用该方法初始化
     * 该方法在生命周期中只会执行一次
     * @throws ServletException
     */
    @Override
    public void init() throws ServletException {
        System.out.println("Servlet被创建了,初始化...");
    }

    /**
     * 销毁方法
     * 系统方法,服务器自动调用,在 Servlet 生命周期结束时被调用
     * 当服务器关闭或应用程序停止时,调用该方法
     * 方法在生命周期中只会调用一次
     */
    @Override
    public void destroy() {
        System.out.println("Servlet被销毁了...");
    }
}

到了这里,关于Servlet p2 Servlet的生命周期的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 创建javaEE项目(无maven),JSP(九大内置对象)、Servlet(生命周期)了解

    1.创建一个普通的java项目 2.项目根目录右键,添加模板 3.配置tomcat服务器 4.配置项目tomcat依赖         用户通过浏览器发送一个请求,服务器tomcat接收到后,解析web.xml配置文件进行分析执行接口对应的类;         Tomcat服务器支持:支持Servlet规范。而要想让它能找到

    2024年02月05日
    浏览(34)
  • STM32信息安全 1.2 课程架构介绍:芯片生命周期管理与安全调试

    下面开始学习课程的第二节,简单介绍下STM32H5芯片的生命周期和安全调试,具体课程大家可以观看STM32官方录制的课程,链接:1.2. 课程架构介绍:STM32H5 芯片生命周期管理与安全调试 调试端口访问控制,防止通过调试端口获取芯片内部资源 锁定全部调试访问或部分调试功能

    2024年03月26日
    浏览(47)
  • 学习Vue:组件生命周期

    在Vue.js中,组件的生命周期是指组件从创建到销毁的整个过程,而生命周期钩子函数则是在不同阶段执行的函数,允许您在特定时间点添加自定义逻辑。本文将详细介绍组件的生命周期以及常用的生命周期钩子函数。 组件的生命周期可以分为以下几个阶段: 创建阶段: 在这

    2024年02月12日
    浏览(27)
  • 【Unity学习笔记】生命周期

    官方文档:事件函数的执行顺序 如图: 脚本的生命周期主要经历以下几个阶段: 初始化阶段,(包括初始化Awake,OnEnable,然后Editor的Reset被穿插在着初始化过程之间,因此我们可以在脚本里重写Reset方法,这将在编辑器中的game的start之前执行。最后Start),当我们开始游戏的

    2024年02月14日
    浏览(28)
  • Rust学习-生命周期

    Rust 最与众不同的功能 之前学习中,有多种可能类型时必须注明类型;同理,引用的生命周期以一些不同方式相关联时,需要使用泛型生命周期参数来注明关系,这样就能确保运行时实际使用的引用有效 Rust 编译器有一个 借用检查器(borrow checker) 它比较作用域来确保所有的

    2024年02月16日
    浏览(30)
  • Angular 学习日记 - 7 - 生命周期

     建议在实现Angular  生命周期(LifeCycle Hooks) 时,可以写在类实现的后面,既可以方便他人知晓用了哪些生命周期方法,又可以用vscode自动补全来生成该方法,还可以防止拼错方法名 (指我自己) 。 1、ngOnInit() 在构造函数触发后触发   2、ngOnChanges() 触发时会自动传入一个

    2024年02月04日
    浏览(36)
  • Vue生命周期详解学习笔记

    生命周期又名生命周期回调函数,生命周期函数,生命周期钩子。 生命周期是Vue在关键时刻帮我们调用的一些特殊名称的函数。 生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的。 生命周期中的this指向vm或组件实例对象。 钩子函数用来描述Vue实例从

    2024年02月16日
    浏览(30)
  • 前端学习--Vue(4) 生命周期

    一个组件从创建-运行-销毁的真个阶段,强调的是一个时间段  1.1.1 创建 (只执行一次) created() 阶段任务:最早可以使用methods中的方法发起ajax请求获取数据,并将数据挂载到data中 mounted() 阶段任务:最早可以操作dom元素 1.1.2 运行 (最少0次,最多n次) beforeUpdate() 触发时机:

    2024年02月07日
    浏览(33)
  • 【React学习】React组件生命周期

    在 React 中,组件的生命周期是指组件从被创建到被销毁的整个过程。React框架提供了一系列生命周期方法,在不同的生命周期方法中,开发人员可以执行不同的操作,例如初始化状态、数据加载、渲染、更新等。一个组件的生命周期大致可以分为三个阶段,即组件挂载时,更

    2024年02月12日
    浏览(29)
  • 【Vue3】学习笔记-生命周期

    Vue3.0中可以继续使用Vue2.x中的生命周期钩子,但有有两个被更名: beforeDestroy 改名为 beforeUnmount destroyed 改名为 unmounted Vue3.0也提供了 Composition API 形式的生命周期钩子,与Vue2.x中钩子对应关系如下: beforeCreate === setup() created ======= setup() beforeMount === onBeforeMount mounted ======= onMo

    2024年02月11日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包