JavaWEB中Servlet的生命周期详解

目录
  • 一、什么是Servlet 生命周期?
  • 二、Servlet 是由谁来维护的?
  • 三、Servlet 对象 是什么时候创建的?
  • 四、测试 Tomcat 什么时候被销毁?
  • 总结

一、什么是Servlet 生命周期?

Servlet 对象什么时候被创建?

Servlet对象什么时候被销毁?

Servlet 对象创建了几个?

Servlet 对象的声明周期表示:Servlet 对象从出生到销毁的过程是怎样的

二、Servlet 是由谁来维护的?

Servlet 是由 Tomcat 服务器全权负责的,程序员无法干预。

Tomcat 又叫 WEB 容器。

我们自己 new 的 Servlet 对象 是不受 WEB 容器 管理的。

WEB 容器 自己创建的 Servlet 对象,会放到一个集合中【Map集合】,自己创建的 Servlet 是不会放到这个集合中的。这个集合保存了 请求路径 和 Servlet 对象 的对应关系。

三、Servlet 对象 是什么时候创建的?

在 Servlet 类中 写一个无参构造方法,当Tomcat 启动时 这个无参构造方法 并没有被启动,说明 Tomcat 启动时 并不会提前创建对象。

我们可以看到,当我们在浏览器中发送请求时,这个无参构造方法才会执行,说明:只有用户发送请求时,这个Servlet 对象 才会被创建。

那么可不可以让 Tomcat 提前创建对象?

是可以的,在配置文件中 增加一行代码即可

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>StudentList</servlet-name>
        <!--完整包名-->
        <servlet-class>yangzhaoguang.servlet.StudentServlet</servlet-class>
        <!--设置Tomcat启动时,创建对象、这里必须是正整数,越小优先级越高-->
        <load-on-startup>0</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>StudentList</servlet-name>
        <!--请求路径-->
        <url-pattern>/servlet/Student</url-pattern>
    </servlet-mapping>
</web-app>

当设置之后,Tomcat 启动时 ,无参构造方法执行了,说明创建对象成功。但是这个方法不常用,提前创建对象会耗费内存。

四、测试 Tomcat 什么时候被销毁?

我们在 新建一个模块,在模块中新建一个 AServlet 类 并 编写三个方法

修改配置文件,并重新部署 Servlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>AServlet</servlet-name>
        <servlet-class>yangzhaoguang.servlet.AServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>AServlet</servlet-name>
        <!--请求路径-->
        <url-pattern>/a</url-pattern>
    </servlet-mapping>
</web-app>

当我们启动Tomcat 时,Servlet 并没有被创建

第一次发送请求时, init 和 service 被调用。Servlet 对象被创建

当我们不停的刷新网页,每提交一次请求 service 方法就会执行一次init 方法 只会在第一次用户请求时执行一次

当我们关闭 Tomcat 服务器时,会销毁 AServlet 的内存,destroy 方法执行了。

在执行 destroy 方法时,对象没有被销毁,这是因为 destroy 方法是 实例方法,需要对象来调用次方法。在执行之后 对象才会被销毁

Tomcat 响应请求的过程:

1、Tomcat 的配置文件中保存 路径请求 与 Servlet 的对应关系。Tomcat 根据浏览器中的URL,分析URL找到 AServlet 类

2、通过反射机制先调用 AServlet 中的无参构造方法创建对象,执行 init 完成初始化工作,调用 service 方法处理用户的请求。【无参构造方法是在init 方法执行之前先执行】

3、当服务器关闭时,执行 destroy 方法。执行之后销毁对象。

创建对象(无参方法执行)---->  初始化(init 方法执行)---->   提供服务(service方法执行) ---->  销毁(destroy方法执行)

当 Servlet 类中 有一个 有参数构造时,会报错吗?

        会报错:500错误。一般情况下是服务端的java小程序出现了错误。

所以在开发中,不建议自己创建构造方法。

思考一下:既然无参构造方法和 init 方法都是在Servlet对象创建时执行并只执行一次,那么 无参构造方法可以替代 init 方法吗?

        不可以,因为在Servlet 不建议构建有参数构造方法,所以 init 可以替代有参数构造方法。

总结

到此这篇关于JavaWEB中Servlet的生命周期详解的文章就介绍到这了,更多相关JavaWEB Servlet生命周期内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • servlet生命周期_动力节点Java学院整理

    本文为大家分享了servlet生命周期的相关资料,供大家参考,具体内容如下 1.Servlet 生命周期:Servlet 加载--->实例化--->服务--->销毁. 2.init():在Servlet的生命周期中,仅执行一次init()方法.它是在服务器装入Servlet时执行的,负责初始化Servlet对象.可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet.无论有多少客户机访问Servlet,都不会重复执行init(). 3.service():它是S

  • Java中Servlet的生命周期

    目录 init() service() doGet() doPost() destroy() 方法 架构 Servlet从创建直到毁灭的整个过程: Servlet 初始化后调用 init () 方法 Servlet 调用 service() 方法来处理客户端的请求 Servlet 销毁前调用 destroy() 方法 最后,Servlet 是由 JVM 的垃圾回收器进行GC init() 只调用一次.在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用.因此,它是用于一次性初始化

  • JavaWEB中Servlet的生命周期详解

    目录 一.什么是Servlet 生命周期? 二.Servlet 是由谁来维护的? 三.Servlet 对象 是什么时候创建的? 四.测试 Tomcat 什么时候被销毁? 总结 一.什么是Servlet 生命周期? Servlet 对象什么时候被创建? Servlet对象什么时候被销毁? Servlet 对象创建了几个? Servlet 对象的声明周期表示:Servlet 对象从出生到销毁的过程是怎样的 二.Servlet 是由谁来维护的? Servlet 是由 Tomcat 服务器全权负责的,程

  • Java中Servlet的生命周期详解

    目录 Web基础和HTTP协议 什么是Servlet Servlet的生命周期 Web基础和HTTP协议 ┌─────────┐ ┌─────────┐ │░░░░░░░░░│ │O ░░░░░░░│ ├─────────┤ ├─────────┤ │░░░░░░░░░│ │ │ ├─────────┤ │ │ │░░░░░░░░░│ └─────────┘ └─────────┘ │ request 1 │ │─────────────────────>│ │ request 2 │ │───

  •  Spring 中 Bean 的生命周期详解

    目录 前言 1.Bean 生命周期 2.代码演示 总结 前言 Java 中的公共类称之为 Bean 或 Java Bean,而 Spring 中的 Bean 指的是将对象的生命周期,交个 Spring IoC 容器来管理的对象.所以 Spring 中的 Bean 对象在使用时,无需通过 new 来创建对象,只需要通过 DI(依赖注入),从 Spring 中取出要使用的对象即可. 那么 Spring 中,Bean 的生命周期又有哪些呢?接下来,我们一起来看. 1.Bean 生命周期 Spring

  • spring中bean的生命周期详解

    1.Spring IOC容器可以管理bean的生命周期,Spring允许在bean生命周期内特定的时间点执行指定的任务. 2.Spring IOC容器对bean的生命周期进行管理的过程: ① 通过构造器或工厂方法创建bean实例 ② 为bean的属性设置值和对其他bean的引用 ③ 调用bean的初始化方法 ④ bean可以使用了 ⑤ 当容器关闭时,调用bean的销毁方法 3.在配置bean时,通过init-method和destroy-method 属性为bean指定初始化和销毁方法 4.be

  • servlet配置方法及其生命周期详解

    servlet配置: 在web.xml中,首先向服务器注册一个servlet.在<servlet>标签下 给定一个servlet名字,这个servlet-name是我们自己用的,方便我们用它对servlet进行配置. 1 <servlet-name>AServlet</servlet-name>然后指定一个全类名,这个是给服务器使用,服务器用来创建全类名对象的实例 1 <servlet-class>com.servlet.AServlet</servl

  • React中的生命周期详解

    目录 react生命周期 常用的生命周期 不常用的生命周 完整的生命周期图 react生命周期 函数组件无生命周期,生命周期只有类组件才拥有 生命周期函数指在某一时刻组件会自动调用并执行的函数. React每个类组件都包含生命周期方法,以便于在运行过程中特定的阶段执行这些方法. 例如:我们希望在第一次将其呈现到DOM时设置一个计时器Clock.这在React中称为“安装”.我们也想在删除由产生 的DOM时清除该计时器Clock.这在React中称为“卸载”. 一般分为:挂载.更新.卸载 常用的生

  • 基于Listener监听器生命周期(详解)

    一.Listener生命周期 listener是web三大组件之一,是servlet监听器,用来监听请求,监听服务端的操作. listener分为:(都是接口类,必须实现相应方法) 1.生命周期监听器(3个) ServletContextListener requestDestroyed 在容器启动时被调用(在servlet被实例化前执行) requestInitialized 在容器销毁时调用(在servlet被销毁后执行) HttpSessionListener sessionCreated

  • Java开发学习之Bean的作用域和生命周期详解

    目录 一.Bean 的作用域 二.Spring 的执行流程 三.Bean 的生命周期 一.Bean 的作用域 在之前学习Java基础的时候,有接触到作用域这样的概念.一个变量并不一定在任何区域都是有效的,限定这个变量的可用性的代码范围就是该变量的作用域. 但是在这里 Bean 的作用域的概念和以前所认为的作用域有所不同. Bean 的作用域是指 Bean 在 Spring 整个框架中的某种行为模式. 接下来,将会举一个案例来讲讲什么是作用域,什么是行为模式 案例概要: 创建一个共有的 Bean

  • Spring配置使用之Bean生命周期详解

    基本概念 Spring 中的 Bean 的生命周期,指的是 Bean 从创建到销毁的过程. 下面来探究下几个有关 Bean 生命周期配置的属性. lazy-init lazy-init 表示延迟加载 Bean,默认在 Spring IoC 容器初始化时会实例化所有在配置文件定义的 Bean,若启用了 lazy-init 则在调用 Bean 时才会去创建 Bean. 定义 Bean: public class Animals { public Animals(){ System.out.print

  • 基于asp.net MVC 应用程序的生命周期(详解)

    首先我们知道http是一种无状态的请求,他的生命周期就是从客户端浏览器发出请求开始,到得到响应结束.那么MVC应用程序从发出请求到获得响应,都做了些什么呢? 本文我们会详细讨论MVC应用程序一个请求的生命周期,从一个控件到另一个控件是怎样被处理的.我们还会详细介绍一下整个请求的生命周期中,用到的相关组件.因为在平常的开发过程中,我们可能知道怎样去使用MVC框架来处理相关的请求,大部分的时候我们只是在controller和action方法之间做相关的处理,对于真正内在的运行机制可能不是很了解.其实

随机推荐