zoukankan      html  css  js  c++  java
  • Servlet生命周期

    大多数程序员都知道Servlet的生命周期,简单的概括这就分为四步:servlet类加载--->实例化--->服务--->销 毁。对这个过程只是肤浅了解下,对于servlet何时被销毁,还是不太情楚。下面我们描述一下Tomcat与Servlet是如何工作的,首先看下面的 顺序图.

    1、Web Client 向Servlet容器(Tomcat)发出Http请求

    2、Servlet容器接收Web Client的请求

    3、Servlet容器创建一个HttpRequest对象,将Web Client请求的信息封装到这个对象中

    4、Servlet容器创建一个HttpResponse对象

    5、Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数

         传给 HttpServlet对象

    6、HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息

    7、HttpServlet调用HttpResponse对象的有关方法,生成响应数据

    8、Servlet容器把HttpServlet的响应结果传给Web Client

    对于Servlet容器(Tomcat)与HttpServlet是怎样进行交互的呢,看下类图

    Servlet的框架是由两个Java包组成的:javax.servlet与 javax.servlet.http。在javax.servlet包中定义了所有的Servlet类都必须实现或者扩展的通用接口和类。在 javax.servlet.http包中定义了采用Http协议通信的HttpServlet类。Servlet的框架的核心是 javax.servlet.Servlet接口,所有的Servlet都必须实现这个接口。

     

    在Servlet接口中定义了5个方法,

     

    其中3个方法代表了Servlet的生命周期:

     

    1、init方法:负责初始化Servlet对象。

     

    2、service方法:负责响应客户的请求。

     

    3、destroy方法:当Servlet对象退出生命周期时,负责释放占用的资源。

     

     

     

    一、创建Servlet对象的时机

     

    1、Servlet容器启动时:读取web.xml配置文件中的信息,构造指定的Servlet对象,创建ServletConfig对象,同时将ServletConfig对象作为参数来调用Servlet对象的init方法。

     

    2、在Servlet容器启动后:客户首次向Servlet发出请求,Servlet容器会 判断内存中是否存在指定的Servlet对象,如果没有则创建它,然后根据客户的请求创建HttpRequest、       HttpResponse对象,从而调用Servlet

     

         对象的service方法。

     

    3、Servlet的类文件被更新后,重新创建Servlet

     

          Servlet容器在启动时自动创建Servlet,这是由在web.xml文件中为Servlet设置的<load-on-startup>属性决定

     

          的。从中我们也能看到同一个类型的Servlet对象在Servlet容器中以单例的形式存在。

     

    二、销毁Servlet对象的时机

     

    1、Servlet容器停止或者重新启动:Servlet容器调用Servlet对象的destroy方法来释放资源。以上所讲的就是Servlet对象的生命周期。那么Servlet容器如何知道创建哪一个Servlet对象?

     

    Servlet对象如何配置?实际上这些信息是通过读取web.xml配置文件来实现的。

     

    我们来看一下web.xml文件中的Servlet对象的配置节信息

     

    -------------------------------------------

     

    <servlet>

     

        <servlet-name>action<servlet-name>

     

        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

     

        <init-param>

     

            <param-name>config</param-name>

     

            <param-value>/WEB-INF/struts-config.xml</param-value>

     

        </init-param>

     

        <init-param>

     

            <param-name>detail</param-name>

     

            <param-value>2</param-value>

     

        </init-param>

     

        <init-param>

     

            <param-name>debug</param-name>

     

            <param-value>2</param-value>

     

        </init-param>

     

        <load-on-startup>2</load-on-startup>

     

    </servlet>

     

    <servlet-mapping>

     

        <servlet-name>action</servlet-name>

     

        <url-pattern>*.do</url-pattern>

     

    </servlet-mapping>

     

    --------------------------------------------

     

    下面对上面的配置节信息进行解析

     

    servlet-name:Servlet对象的名称

     

    servlet-class:创建Servlet对象所要调用的类

     

    param-name:参数名称

     

    param-value:参数值

     

    load-on-startup:Servlet容器启动时加载Servlet对象的顺序

     

    servlet-mapping/servlet-name:要与servlet中的servlet-name配置节内容对应

     

    url-pattern:客户访问的Servlet的相对URL路径

     

     

     

           当Servlet容器启动的时候读取<servlet>配置节信息,根据<servlet-class>配置节信息创建 Servlet对象,同时根据<init-param>配置节信息创建HttpServletConfig对象,然后执行Servlet对象 的init方法,并且根据<load-on-startup>配置节信息来决定创建Servlet对象的顺序,如果此配置节信息为负数或者没 有配置,那么在Servlet容器启动时,将不加载此Servlet对象。当客户访问Servlet容器时,Servlet容器根据客户访问的URL地 址,通过<servlet-mapping>配置节中的<url-pattern>配置节信息找到指定的Servlet对象,并 调用此Servlet对象的service方法。

     

     

     

     

  • 相关阅读:
    PTA —— 基础编程题目集 —— 函数题 —— 61 简单输出整数 (10 分)
    PTA —— 基础编程题目集 —— 函数题 —— 61 简单输出整数 (10 分)
    练习2.13 不用库函数,写一个高效计算ln N的C函数
    练习2.13 不用库函数,写一个高效计算ln N的C函数
    练习2.13 不用库函数,写一个高效计算ln N的C函数
    迷宫问题 POJ 3984
    UVA 820 Internet Bandwidth (因特网带宽)(最大流)
    UVA 1001 Say Cheese(奶酪里的老鼠)(flod)
    UVA 11105 Semiprime Hnumbers(H半素数)
    UVA 557 Burger(汉堡)(dp+概率)
  • 原文地址:https://www.cnblogs.com/lichone2010/p/3249036.html
Copyright © 2011-2022 走看看