<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Servlet生命周期

    Posted on 2012-10-20 13:01 志成中國(guó) 閱讀(256) 評(píng)論(0)  編輯  收藏

     大多數(shù)程序員都知道Servlet的生命周期,簡(jiǎn)單的概括這就分為四步:servlet類加載--->實(shí)例化--->服務(wù)--->銷 毀。對(duì)這個(gè)過(guò)程只是膚淺了解下,對(duì)于servlet何時(shí)被銷毀,還是不太情楚。下面我們描述一下Tomcat與Servlet是如何工作的,首先看下面的 時(shí)序圖.

    1、Web Client 向Servlet容器(Tomcat)發(fā)出Http請(qǐng)求

    2、Servlet容器接收Web Client的請(qǐng)求

    3、Servlet容器創(chuàng)建一個(gè)HttpRequest對(duì)象,將Web Client請(qǐng)求的信息封裝到這個(gè)對(duì)象中

    4、Servlet容器創(chuàng)建一個(gè)HttpResponse對(duì)象

    5、Servlet容器調(diào)用HttpServlet對(duì)象的service方法,把HttpRequest對(duì)象與HttpResponse對(duì)象作為參數(shù)

         傳給 HttpServlet對(duì)象

    6、HttpServlet調(diào)用HttpRequest對(duì)象的有關(guān)方法,獲取Http請(qǐng)求信息

    7、HttpServlet調(diào)用HttpResponse對(duì)象的有關(guān)方法,生成響應(yīng)數(shù)據(jù)

    8、Servlet容器把HttpServlet的響應(yīng)結(jié)果傳給Web Client

     

    對(duì)于Servlet容器(Tomcat)與HttpServlet是怎樣進(jìn)行交互的呢,看下類圖

    Servlet的框架是由兩個(gè)Java包組成的:javax.servlet與javax.servlet.http。在javax.servlet包中 定義了所有的Servlet類都必須實(shí)現(xiàn)或者擴(kuò)展的通用接口和類。在javax.servlet.http包中定義了采用Http協(xié)議通信的 HttpServlet類。Servlet的框架的核心是javax.servlet.Servlet接口,所有的Servlet都必須實(shí)現(xiàn)這個(gè)接口。

    在Servlet接口中定義了5個(gè)方法,

    其中3個(gè)方法代表了Servlet的生命周期:

    1、init方法:負(fù)責(zé)初始化Servlet對(duì)象。

    2、service方法:負(fù)責(zé)響應(yīng)客戶的請(qǐng)求。

    3、destroy方法:當(dāng)Servlet對(duì)象退出生命周期時(shí),負(fù)責(zé)釋放占用的資源。

     

    一、創(chuàng)建Servlet對(duì)象的時(shí)機(jī)

    1、Servlet容器啟動(dòng)時(shí):讀取web.xml配置文件中的信息,構(gòu)造指定的Servlet對(duì)象,創(chuàng)建ServletConfig對(duì)象,同時(shí)將ServletConfig對(duì)象作為參數(shù)來(lái)調(diào)用Servlet對(duì)象的init方法。

    2、在Servlet容器啟動(dòng)后:客戶首次向Servlet發(fā)出請(qǐng)求,Servlet容器會(huì)判斷內(nèi)存中是否存在指定的Servlet對(duì)象,如果沒(méi)有則創(chuàng)建 它,然后根據(jù)客戶的請(qǐng)求創(chuàng)建HttpRequest、       HttpResponse對(duì)象,從而調(diào)用Servlet

         對(duì)象的service方法。

    3、Servlet的類文件被更新后,重新創(chuàng)建Servlet

          Servlet容器在啟動(dòng)時(shí)自動(dòng)創(chuàng)建Servlet,這是由在web.xml文件中為Servlet設(shè)置的<load-on-startup>屬性決定

          的。從中我們也能看到同一個(gè)類型的Servlet對(duì)象在Servlet容器中以單例的形式存在。

    二、銷毀Servlet對(duì)象的時(shí)機(jī)

    1、Servlet容器停止或者重新啟動(dòng):Servlet容器調(diào)用Servlet對(duì)象的destroy方法來(lái)釋放資源。以上所講的就是Servlet對(duì)象的生命周期。那么Servlet容器如何知道創(chuàng)建哪一個(gè)Servlet對(duì)象?

    Servlet對(duì)象如何配置?實(shí)際上這些信息是通過(guò)讀取web.xml配置文件來(lái)實(shí)現(xiàn)的。

    我們來(lái)看一下web.xml文件中的Servlet對(duì)象的配置節(jié)信息

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

    <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>

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

    下面對(duì)上面的配置節(jié)信息進(jìn)行解析

    servlet-name:Servlet對(duì)象的名稱

    servlet-class:創(chuàng)建Servlet對(duì)象所要調(diào)用的類

    param-name:參數(shù)名稱

    param-value:參數(shù)值

    load-on-startup:Servlet容器啟動(dòng)時(shí)加載Servlet對(duì)象的順序

    servlet-mapping/servlet-name:要與servlet中的servlet-name配置節(jié)內(nèi)容對(duì)應(yīng)

    url-pattern:客戶訪問(wèn)的Servlet的相對(duì)URL路徑

     

           當(dāng)Servlet容器啟動(dòng)的時(shí)候讀取<servlet>配置節(jié)信息,根據(jù)<servlet-class>配置節(jié)信息創(chuàng)建 Servlet對(duì)象,同時(shí)根據(jù)<init-param>配置節(jié)信息創(chuàng)建HttpServletConfig對(duì)象,然后執(zhí)行Servlet對(duì)象 的init方法,并且根據(jù)<load-on-startup>配置節(jié)信息來(lái)決定創(chuàng)建Servlet對(duì)象的順序,如果此配置節(jié)信息為負(fù)數(shù)或者沒(méi) 有配置,那么在Servlet容器啟動(dòng)時(shí),將不加載此Servlet對(duì)象。當(dāng)客戶訪問(wèn)Servlet容器時(shí),Servlet容器根據(jù)客戶訪問(wèn)的URL地 址,通過(guò)<servlet-mapping>配置節(jié)中的<url-pattern>配置節(jié)信息找到指定的Servlet對(duì)象,并 調(diào)用此Servlet對(duì)象的service方法。

     

    為了驗(yàn)證下,我新建了一個(gè)web app工程,新建一個(gè)Servlet,如下:

    Java代碼  收藏代碼
    1. package com.tdt.servlet;  
    2.   
    3. import java.io.IOException;  
    4. import java.io.PrintWriter;  
    5. import javax.servlet.ServletException;  
    6. import javax.servlet.http.HttpServlet;  
    7. import javax.servlet.http.HttpServletRequest;  
    8. import javax.servlet.http.HttpServletResponse;  
    9.   
    10. public class TestServlet extends HttpServlet {  
    11.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
    12.             throws ServletException, IOException {  
    13.         this.doPost(request, response);  
    14.     }  
    15.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
    16.             throws ServletException, IOException {  
    17.   
    18.         response.setContentType("text/html");  
    19.         PrintWriter out = response.getWriter();  
    20.         out.println("Hello,this is a test");  
    21.       
    22.         out.flush();  
    23.         out.close();  
    24.     }  
    25.   
    26.     public void destroy() {  
    27.         System.err.println(getServletName()+"生命周期結(jié)束");;  
    28.     }  
    29.       
    30.     public void init() throws ServletException {  
    31.         System.out.println(getServletName()+"執(zhí)行初始化");  
    32.     }  
    33. }  

     當(dāng)servlet被銷毀時(shí)會(huì)在控制臺(tái)上打印提示語(yǔ)句,不過(guò)我發(fā)現(xiàn)在tomcat中,只要不停止web容器,servlet是不會(huì)被銷毀的。有沒(méi)有什么方 法,當(dāng)service方法執(zhí)行完畢就銷毀這個(gè)servlet呢,我問(wèn)了下老師,他說(shuō)寫(xiě)一個(gè)監(jiān)聽(tīng)器,不過(guò)我不知道怎么去實(shí)現(xiàn)它,如果有朋友知道實(shí)現(xiàn)的過(guò)程, 還請(qǐng)賜教。


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    posts - 9, comments - 5, trackbacks - 0, articles - 0

    Copyright © 志成中國(guó)

    主站蜘蛛池模板: 精品乱子伦一区二区三区高清免费播放 | 亚洲欧美日韩国产精品一区| 亚洲美女aⅴ久久久91| 亚洲人成亚洲精品| 久久国产精品亚洲一区二区| 亚洲中文字幕无码日韩| 亚洲日韩乱码中文无码蜜桃臀网站| 亚洲熟妇无码乱子AV电影| 久久影院亚洲一区| 亚洲精品国产精品乱码不99| 国产亚洲综合成人91精品| 国产亚洲欧洲精品| 久久久久亚洲AV成人片| 亚洲综合网美国十次| 亚洲人成网站在线观看播放动漫| 亚洲国产中文在线二区三区免| 亚洲国产精品美女| 亚洲xxxx视频| 老妇激情毛片免费| fc2免费人成为视频| 国产麻豆一精品一AV一免费| 久久久久免费看成人影片| 国产免费一区二区三区| 成人免费网站在线观看| 亚洲av午夜成人片精品电影| 亚洲永久无码3D动漫一区| 久久精品国产亚洲av麻豆| 亚洲大香伊人蕉在人依线| 亚洲国产精品18久久久久久| 色婷婷综合缴情综免费观看| 最近2019中文免费字幕在线观看| 69免费视频大片| 精品久久久久久久免费人妻| 亚洲欧洲精品成人久久曰影片| 亚洲国产精品va在线播放| 亚洲日本在线免费观看| 亚洲狠狠婷婷综合久久蜜芽| 毛片基地看看成人免费| 成人免费在线看片| 夜色阁亚洲一区二区三区| 亚洲综合视频在线|