JavaWeb应用的生命周期由Servlet容器来控制,而Servlet作为JavaWeb应用的最核心的组件,其生命周期也由Servlet容器来控制。Servlet的生命周期可以分为3个阶段:初始化阶段、运行时阶段和销毁阶段。在javax.servlet.Servlet接口中定义了3个方法:init()、service()、destory(),它们将分别在Servlet的不同阶段被Servlet容器调用。

初始化阶段

Servlet的初始化包括4个步骤:

●  Servlet容器加载Servlet类,把它的.class文件中的数据读入到内存中。

●  Servlet容器创建ServletConfig对象。ServletConfig对象包含了特定Servlet的初始化配置信息,如Servlet的初始参数。此外,Servlet容器还会使得ServletConfig对象与当前Web应用的ServletContext对象关联。

●  Servlet容器创建Servlet对象。

●  Servlet容器调用Servlet对象的init(ServletConfig config)方法。在Servlet接口的GenericServlet实现类的init(ServletConfig config)方法中,会建立Servlet对象与ServletConfig对象的关联关系。

以上初始化步骤创建了Servlet对象和ServletConfig对象,并且Servlet对象与ServletConfig对象关联,而ServletConfig对象有与当前Web应用的ServletContext对象关联。当Servlet容器初始化完Servlet后,Servlet对象只要通过getServletContext()方法级就能得到当前Web应用的ServletContext对象。

在下列情况之一,Servlet会进入初始化阶段:

●  当前Web应用处于运行时阶段,特定Servlet被客户端首次请求访问。多数Servlet都会在这种情况下被Servlet容器初始化。

●  如果在web.xml文件中为一个Servlet设置了<load-on-startup>元素,那么当Servlet容器启动Servlet所属的Web应用是,就会初始化这个Servlet。以下代码配置了3个Servlet:Servlet1、Servlet2、Servlet3。

<servlet>

<servlet-name>servlet1</servlet-name>

<servlet-class>com.xdl.servlet.Servlet1</servlet-class>

</servlet>

<servlet>

<servlet-name>servlet2</servlet-name>

<servlet-class>com.xdl.servlet.Servlet2</servlet-class>

</servlet>

<servlet>

<servlet-name>servlet3</servlet-name>

<servlet-class>com.xdl.servlet.Servlet3</servlet-class>

</servlet>

其中Servlet1和Servlet2的<load-on-startup>的值分别为1和2,因此当Servlet容器启动当前Web应用是,Servlet1被第一个初始化,Servlet2被第二个初始化。而Servlet3没有配置<load-on-startup>元素,因此当Servlet容器启动当前Web应用时,Servlet3不会被初始化,只有当客户端首次请求访问Servlet3时,它才会被初始化。

从提高Servlet容器运行性能的角度出发,Servlet规范为Servlet规定了不同的初始化情形。如果有些Servlet专门负责在Web应用启动阶段为Web应用完成一些初始化操作,则可以让他们在Web应用启动时就被初始化。对于大多数Servlet,只需要当客户端首次请求访问时才被初始化。假设所有的Servlet都在Web应用启动时就被初始化,那么会大大增加Servlet容器启动Web应用的负担,而且Servlet容器有可能会加载一些永远不会被客户访问的Servlet,白白浪费容器的资源。

●  当Web应用被重新启动时,Web应用中的所有Servlet都会在特定的时刻被重新初始化。

运行阶段

这是Servlet的生命周期中最重要的阶段。在这个阶段,Servlet可以随时响应客户端的请求。当Servlet容器接收到要求访问特定Servlet的客户请求时,Servlet容器会创建针对这个请求的ServletRequest对象和ServletResponse对象,然后调用响应的Servlet对象的service()方法。service()方法从ServletRequest对象中获得客户请求信息并处理该请求,再通过ServletResponse对象生成响应结果。

当Servlet容器把Servlet生成的响应结果发送给了客户,Servlet容器就会销毁ServletRequest对象和ServletResponse对象。

销毁阶段

当Web应用被终止时,Servlet容器会先调用Web应用中所有Servlet对象的destory()方法,然后在销毁这个Servlet对象。在destory()方法的实现中,可以释放Servlet所占用的资源(例如关闭文件输入流和输出流,关闭与数据库的连接等)。

此外,容器还会销毁与Servlet对象关联的ServletConfig对象

在Servlet的生命周期中,Servlet的初始化和销毁只会发生一次,因此init()方法和destory()方法只会被Servlet容器调用一次,而service()方法可能会被Servlet容器调用多次,这取决于客户端请求访问Servlet的次数。

IT兄弟连 Java Web教程 Servlet的生命周期的更多相关文章

  1. IT兄弟连 Java Web教程 经典面试题2

    1.Servlet的工作流程? Servlet是运行在Servlet容器中的,由Servlet容器来负责Servlet实例的查找.创建以及整个生命周期的管理,Servlet整个生命周期可以分为四个阶段 ...

  2. java基础78 Servlet的生命周期

    1.Servlet的生命周期 简单的解析就是: 创建servlet实例(调用构造器)---->调用init()方法---->调用service()方法----->调用destroy( ...

  3. Java Web学习笔记-Servle生命周期

    Servlet会在服务器启动或第一次请求该Servlet的时候开始生命周期,在服务器停止的时候结束生命周期. 无论请求多少次Servlet,最多只有一个Servlet实例.多个客户端并发请求Servl ...

  4. IT兄弟连 Java Web教程 经典案例2

    案例需求:写一个用户登录的html页面有账号和密码,并在登录的Servlet中获取登录的账号和密码,如果账号是abc密码是123则向浏览器输出登录成功,否则向浏览器输出登录失败. 案例实现: ●  h ...

  5. IT兄弟连 Java Web教程 经典面试题

    1.什么是B/S结构?什么是C/S结构? B/S是Browser/Server的缩写客户机上只要安装—个浏览器(Browser)加Netscape Navigator或Internet Explore ...

  6. IT兄弟连 Java Web教程 Tomcat

    本文采用的Tomcat服务器版本是Tomcat8.5版本,Tomcat8.5支持Servlet3.1.JSP2.3以及EL3.0规范.并且Tomcat8.5版本对JDK8的支持比Tomcat8更加全面 ...

  7. IT兄弟连 Java Web教程 Web开发的相关知识

    Web基本概念 Web,是环球信息网的缩写,也称作“WWW.W3”,英文全称为World Wide Web,中文名成为万维网,常简称为Web.Web分为Web客户端和Web服务器程序.Web可以让We ...

  8. Java Web -- Servlet(5) 开发Servlet的三种方法、配置Servlet具体解释、Servlet的生命周期(2)

    三.Servlet的生命周期 一个Java servlet具有一个生命周期,这个生命周期定义了一个Servlet怎样被加载并被初始化,怎样接收请求并作出对请求的响应,怎样被从服务中清除.Servlet ...

  9. Java Web之Servlet技术

    1.Servlet基础 针对Servlet技术开发,Sun公司提供了一些列接口和类,其中最重要的是javax.servlet.Servlet接口,两个重要的包是javax.servlet和javax. ...

随机推荐

  1. free命令具体解释——Linux性能分析

    一.使用格式 语法格式:free [-b | -k | -m] [-o] [-s delay ] [-t] [-l] [-V] [-b | -k | -m] :选择数据的单位-b字节.-k千字节.-m ...

  2. virtual member functions(单一继承情况)

    virtual member functions的实现(就单一继承而言): 1.实现:首先会给有多态的class object身上增加两个members:一个字符串或数字便是class的类型,一个是指 ...

  3. uva 11468 - Substring(AC自己主动机+概率)

    题目链接:uva 11468 - Substring 题目大意:给出一些字符和各自字符相应的选择概率.随机选择L次后得到一个长度为L的字符串,要求该字符串不包括随意一个子串的概率. 解题思路:构造AC ...

  4. 6. IO复用:select 和 poll

    select #include <sys/select.h> #include <sys/time.h> int select(int maxfdp1, fd_set *rea ...

  5. linux led子系统(一)

    就像学编程第一个范例helloworld一样,学嵌入式,单片机.fpga之类的第一个范例就是点亮一盏灯.对于庞大的linux系统,当然可以编写一个字符设备驱动来实现我们需要的led灯,也可以直接利用g ...

  6. weblogic启动后 登陆控制台特别慢的问题

    weblogic官方文档给出的问题原因: 江湖偏方: 修改jdk:修改$JAVA_HOME/jre/lib/security/java.security文件,替换securerandom.source ...

  7. Java中的常用异常处理方法

    觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了Java的异常处理机制?在下面这段代码中,你能够迅速找出异常处理的六个问题吗? 1 OutputStreamWriter out = ... 2 ...

  8. Continuous integration: The answer to life, the universe, and everything?

    Continuous integration is not always the right answer. Here's why. https://techbeacon.com/continuous ...

  9. swing_tableModel 创建表格

    import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.Panel; import java.util.Ar ...

  10. struts2 过滤器

    Chain.doFilter的作用就是继续请求的传递,可传递给下一个filter也可传递给目标页面 如左侧传递给filter2,但fiter2使用上面或者下面的方法将倾情重定向到一个新的页面,而不再传 ...