首页 > 编程语言 >Java登陆第二十八天——Servlet生命周期

Java登陆第二十八天——Servlet生命周期

时间:2023-12-22 17:44:57浏览次数:40  
标签:初始化 Java 请求 Tomcat 报文 TestServlet2 第二十八 Servlet

Servlet是运行在Web容器(指Tomcat)的,其生命周期由Web容器控制。

Servlet生命周期

image

Servlet生命周期解析

以下,一个Servlet特指一个实现了Servlet接口的类

  1. 构造

    • Tomcat会使用反射实例化一个Servlet

    • 而实例化类必先会调用某类的构造方法

  2. 初始化:init()

    • 当一个Servlet被实例化后,Tomcat会调用init()方法初始化这个对象

    • 初始化的目的是为了处理请求前,完成某些工作

  3. 服务:service()

    • 处理请求时,Tomcat会调用service()方法进行处理。
  4. 销毁:destroy()

    • 当一个Servlet要从Tomcat中删除时,会调用destroy()方法,从而释放资源。

    • Tomcat关闭时,也会调用destroy()方法

Servlet都要删除了其实也就是Tomcat关闭了。

Servlet生命周期特点

生命周期 执行的时机 执行次数
构造(构造方法) 客户端第一次请求容器启动时 1
初始化(init()) 构造阶段完成后 1
服务(service()) 每次客户端请求 多次
销毁(destroy()) 容器关闭 1

客户端请求的栗子

TestServlet2

@WebServlet("/Test2")
public class TestServlet2 extends HttpServlet {
    public TestServlet2() {
        System.out.println("构造:TestServlet2类被Tomcat反射初始化");
    }

    @Override
    public void init() throws ServletException {
        System.out.println("初始化:Tomcat要做一些服务之前的准备工作");
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("服务:这里是请求报文与响应报文被处理的地方");
    }

    @Override
    public void destroy() {
        System.out.println("销毁:关闭Tomcat时,Servlet会被删除,也就莫得了");
    }
}

客户端请求URL:http://localhost:8080/JavaWeb_war_exploded/Test2

//控制台输出
构造:TestServlet2类被Tomcat反射初始化
初始化:Tomcat要做一些服务之前的准备工作
服务:这里是请求报文与响应报文被处理的地方

客户端再请求URL:http://localhost:8080/JavaWeb_war_exploded/Test2

//控制台输出
服务:这里是请求报文与响应报文被处理的地方

关闭客户端再请求URL:http://localhost:8080/JavaWeb_war_exploded/Test2

//控制台输出
服务:这里是请求报文与响应报文被处理的地方

关闭Tomcat
image

容器启动时栗子

当注解中设置loadOnStartup的值为正整数时(1-5被Tomcat其他服务占了),就会在容器启动时进入构造阶段

TestServlet2

@WebServlet(value = "/Test2",loadOnStartup = 6)
public class TestServlet2 extends HttpServlet {
    public TestServlet2() {
        System.out.println("构造:TestServlet2类被Tomcat反射初始化");
    }

    @Override
    public void init() throws ServletException {
        System.out.println("初始化:Tomcat要做一些服务之前的准备工作");
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("服务:这里是请求报文与响应报文被处理的地方");
    }

    @Override
    public void destroy() {
        System.out.println("销毁:关闭Tomcat时,Servlet会被删除,也就莫得了");
    }
}

启动Tomcat但不请求任何资源
image
也正确进入了构造阶段,初始化阶段会随着构造阶段完成进入

标签:初始化,Java,请求,Tomcat,报文,TestServlet2,第二十八,Servlet
From: https://www.cnblogs.com/Ocraft/p/17922076.html

相关文章

  • 一文看懂java单例模式
    ​ Java单例模式是一种常用的创建型设计模式,用于确保一个类只有一个实例,并提供一个全局访问点来访问该实例。在Java中,有多种方式可以实现单例模式,下面详细介绍其中的几种常见实现方式。1什么是创建型设计模式?处理对象创建的模式,简答的理解就是如何创建对象?很多人都会想到new......
  • 基于html+javascript开发的base64解码工具
    base64在线解码工具可以帮助你将Base64编码的字符串解码为原始的文本或数据。预览入口以下是一个简单的base64在线解码工具的示例:html<!DOCTYPEhtml><html><head><title>Base64在线解码工具</title></head><body><h1>Base64在线解码工具</h1><labelf......
  • 基于html+javascript开发的base64解码工具
    base64在线解码工具可以帮助你将Base64编码的字符串解码为原始的文本或数据。预览入口以下是一个简单的base64在线解码工具的示例:html<!DOCTYPEhtml><html><head><title>Base64在线解码工具</title></head><body><h1>Base64在线解码工具</h1><l......
  • Java中使用JTS实现WKB数据写入、转换字符串、读取
    场景Java中使用JTS实现WKT字符串读取转换线、查找LineString的list中距离最近的线、LineString做缓冲区扩展并计算点在缓冲区内的方位角:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/132755202WKB介绍WKB(Well-KnownBinary)用二进制流描述几何对象信息。WK......
  • java反射
    一、反射概述  二、反射的相关操作1、获取Class类对象示例:学生类:packagecom.itbianma;publicclassStudent{privateStringname;privateStringaddress;privateIntegerage;publicStudent(){}publicStudent(Stringname,......
  • java8排序
    升序List<Transaction>transactions=Arrays.asList(newTransaction(brian,2011,300),newTransaction(raoul,2012,1000),newTransaction(raoul,2011,400),newTransaction(mario,2012,......
  • javaWeb中文乱码
    问题归类1.登录时无法用中文名登录2.页面修改数据,后端传入乱码解决方法1.数据库看看数据库编码集是不是中文编码集如果不是可以在数据库中运行下面语句ALTERDATABASE数据库CHARACTERSET=utf8mb42.数据库连接关键是characterEncoding=utf8没有的加上url=jdb......
  • 计算机 JAVA 语言的基础小总结
    计算机JAVA语言的基础小总结一维数组和二维数组的定义及初始化在Java中,数组是一种数据结构,用于存储多个数据。数组中的元素是相同类型的数据。数组是一个引用数据类型,数组的变量只是一个引用,数组元素和数组变量在内存里是分开存放的。一维数组的定义和初始化一维数组在Jav......
  • 如何 使 Java、C# md5 加密的值保持一致
    JavaC#md5加密值保持一致,一般是编码不一致造成的值不同JAVA(加密:123456)C#(加密:123456)UTF-8e10adc3949ba59abbe56e057f20f883eUTF8e10adc3949ba59abbe56e057f20f883eUTF-16LEce0bfd15059b68d67688884d7a3d3e8cUnicodece0bfd15059b68d67688884d7a3d3e8c......
  • javaweb中的设计模式
    1.监听器基于观察者模式。1.myTestEvent自定义事件。被观察者publicclassMyTestEventextendsApplicationEvent2.MyNoAnnotationListener自定义监听器。观察者@ComponentpublicclassMyNoAnnotationListenerimplementsApplicationListener<MyTestEvent>{@Override......