`

[转]Servlet生命周期-51CTO

阅读更多

原帖地址:http://book.51cto.com/art/200808/84955.htm

 

2.4   Servlet生命周期

Servlet运行在Servlet容器中,其生命周期由容器来管理。Servlet的生命周期通过javax.servlet.Servlet接口中的init()、service()和destroy()方法来表示。

Servlet的生命周期包含了下面4个阶段:

(1)加载和实例化

Servlet容器负责加载和实例化Servlet。当Servlet容器启动时,或者在容器检测到需要这个Servlet来响应第一个请求时,创建Servlet实例。当Servlet容器启动后,它必须要知道所需的Servlet类在什么位置,Servlet容器可以从本地文件系统、远程文件系统或者其他的网络服务中通过类加载器加载Servlet类,成功加载后,容器创建Servlet的实例。因为容器是通过Java的反射API来创建Servlet实例,调用的是Servlet的默认构造方法(即不带参数的构造方法),所以我们在编写Servlet类的时候,不应该提供带参数的构造方法。

(2)初始化

在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象。初始化的目的是为了让Servlet对象在处理客户端请求前完成一些初始化的工作,如建立数据库的连接,获取配置信息等。对于每一个Servlet实例,init()方法只被调用一次。在初始化期间,Servlet实例可以使用容器为它准备的ServletConfig对象从Web应用程序的配置信息(在web.xml中配置)中获取初始化的参数信息。在初始化期间,如果发生错误,Servlet实例可以抛出ServletException异常或者UnavailableException异常来通知容器。ServletException异常用于指明一般的初始化失败,例如没有找到初始化参数;而UnavailableException异常用于通知容器该Servlet实例不可用。例如,数据库服务器没有启动,数据库连接无法建立,Servlet就可以抛出UnavailableException异常向容器指出它暂时或永久不可用。

(3)请求处理

Servlet容器调用Servlet的service()方法对请求进行处理。要注意的是,在service()方法调用之前,init()方法必须成功执行。在service()方法中,Servlet实例通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse对象的方法设置响应信息。在service()方法执行期间,如果发生错误,Servlet实例可以抛出ServletException异常或者UnavailableException异常。如果UnavailableException异常指示了该实例永久不可用,Servlet容器将调用实例的destroy()方法,释放该实例。此后对该实例的任何请求,都将收到容器发送的HTTP 404(请求的资源不可用)响应。如果UnavailableException异常指示了该实例暂时不可用,那么在暂时不可用的时间段内,对该实例的任何请求,都将收到容器发送的HTTP 503(服务器暂时忙,不能处理请求)响应。

(4)服务终止

当容器检测到一个Servlet实例应该从服务中被移除的时候,容器就会调用实例的destroy()方法,以便让该实例可以释放它所使用的资源,保存数据到持久存储设备中。当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收。如果再次需要这个Servlet处理请求,Servlet容器会创建一个新的Servlet实例。

在整个Servlet的生命周期过程中,创建Servlet实例、调用实例的init()和destroy()方法都只进行一次,当初始化完成后,Servlet容器会将该实例保存在内存中,通过调用它的service()方法,为接收到的请求服务。下面给出Servlet整个生命周期过程的UML序列图,如图2-16所示。

 
(点击查看大图)图2-16  Servlet在生命周期内为请求服务

如果需要让Servlet容器在启动时即加载Servlet,可以在web.xml文件中配置<load-on-startup>元素。具体配置方法,参见第3.1节。

分享到:
评论

相关推荐

    javax.servlet-api-3.1.0.jar

    此外,还包括了Servlet生命周期管理的接口,如Servlet、ServletConfig和ServletContainerInitializer,它们帮助服务器管理和加载Servlet实例。 在实际开发中,将`javax.servlet-api-3.1.0.jar`作为项目的依赖,可以...

    Servlet-Servlet生命周期

    &lt;servlet-name&gt;LifeCycleServlet&lt;/servlet-name&gt; &lt;servlet-class&gt;com.example.LifeCycleServlet&lt;/servlet-class&gt; &lt;init-param&gt; &lt;param-name&gt;initParamName&lt;/param-name&gt; &lt;param-value&gt;initParamValue&lt;/param-...

    servlet-api-3.0.jar包

    Servlet-api-3.0.jar是Java Servlet API的第三版实现,它是开发Web应用程序的重要组成部分,特别是在基于Java的服务器端编程中。这个库包含了用于创建和管理HTTP服务端点的接口和类,允许开发者构建动态、交互式的...

    javax.servlet jar包---解决找不到javax.servlet.*等问题

    5. **Servlet生命周期** - 初始化:当Servlet首次被请求或者在web.xml中配置了`load-on-startup`时,Servlet容器会调用Servlet的`init()`方法进行初始化。 - 服务:每当有新的请求到来,Servlet容器创建一个...

    javax.servlet-api-4.0.1.jar

    本篇文章将聚焦于`javax.servlet-api-4.0.1.jar`这个jar包,它是Servlet API 4.0.1版本的实现,主要用于支持JSP和Servlet的开发,特别是针对自定义标签的使用。本文将详细介绍Servlet API 4.0.1的关键特性以及如何在...

    javax.servlet.jsp-api-2.3.2-b01.jar.zip

    如果在不同作用域(request, session, application)中设置,那么数据的可见性和生命周期也会相应地扩展。 **5. 版本2.3.2-b01** 这个特定的版本2.3.2-b01修复了一些已知问题和可能存在的安全漏洞,同时可能引入了...

    servlet源码 servlet-api-src javax.servlet.Servlet源码

    `servlet-api-src`通常指的是Servlet API的源代码,它是理解Servlet工作原理的关键。 首先,让我们深入了解一下`javax.servlet.Servlet`接口。这个接口定义了两个主要方法:`init()`和`service()`。`init()`方法在...

    javax.servlet-api-4.0.0.jar

    javax.servlet-api-4.0.0.jar,使用时将其放在WEB-INF/LIB下即可

    servlet-api-2.3.jar

    servlet-api-2.3.jar servlet-api-2.3.jar

    servlet-api-3.0-7.0.0pre1-sources.jar

    servlet-api-3.0-7.0.0pre1-sources.jar

    Servlet 介绍 以及Servlet生命周期(详细)

    &lt;servlet-name&gt;MyServlet&lt;/servlet-name&gt; &lt;servlet-class&gt;com.example.MyServlet&lt;/servlet-class&gt; &lt;init-param&gt; &lt;param-name&gt;configFile&lt;/param-name&gt; &lt;param-value&gt;/WEB-INF/config.properties&lt;/param-value&gt; ...

    SERVLET生命周期与JSP生命周期比较

    ### SERVLET生命周期与JSP生命周期比较 #### 一、引言 在现代Web开发中,Servlet和JSP是两种非常重要的技术,它们都属于Java EE平台的一部分,主要用于构建动态Web应用程序。这两种技术各有特点,但又紧密相关,...

    jakarta-servletapi-4-src.zip servlet源码

    在Servlet的生命周期中,`init()`方法在Servlet实例化后首次被调用,用于初始化Servlet;`service()`方法处理客户端请求;而`destroy()`方法在Servlet销毁前执行,用于释放资源。源码中,我们可以看到这些方法的具体...

    servlet生命周期详解

    ### Servlet 生命周期详解 #### 初始化阶段 初始化阶段是整个Servlet生命周期的第一个关键步骤,它标志着Servlet的开始。此阶段主要由以下步骤组成: 1. **Servlet容器加载Servlet类**:Servlet容器负责加载...

    servlet-api-2.5-6.1.2rc0.jar

    servlet-api-2.5-6.1.2rc0.jar

    servlet-api-3.0.jar

    servlet-api-3.0.jar ,servlet API工具包

    servlet生命周期演示代码

    ### Servlet 生命周期演示代码详解 #### 一、Servlet 生命周期概述 在深入分析代码之前,我们先来了解一下 Servlet 的生命周期。Servlet 的生命周期主要包括三个阶段:初始化 (`init` 方法)、请求处理 (`service` ...

    servlet-api-2.4-sources.jar

    servlet-api-2.4-sources 源码

    javax.servlet-api.jar.zip

    文件中包含javax.servlet-api-3.0.1.jar,javax.servlet-api-3.1.0.jar,javax.servlet-api-4.0.0.jar,用来处理java项目运行中找不到servlet JAR的问题,需要的朋友可以下载

Global site tag (gtag.js) - Google Analytics