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

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

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

    隨筆 - 251  文章 - 504  trackbacks - 0
    <2006年12月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    本博客系個人收集材料及學習記錄之用,各類“大俠”勿擾!

    留言簿(14)

    隨筆分類

    收藏夾

    My Favorite Web Sites

    名Bloger

    非著名Bloger

    搜索

    •  

    積分與排名

    • 積分 - 202381
    • 排名 - 285

    最新評論

    本文介紹一個簡單?servlet?容器的基本原理。
    Servlet容器工作原理講解本文介紹一個簡單?servlet?容器的基本原理。現有兩個servlet容器,第一個很簡單,第二個則是根據第一個寫出。為了使第一個容器盡量簡單,所以沒有做得很完整。復雜一些的?servlet容器(包括TOMCAT4和5)在TOMCAT運行內幕的其他章節有介紹。?

    兩個servlet容器都處理簡單的?servlet及staticResource。您可以使用?webroot/?目錄下的?PrimitiveServlet?來測試它。復雜一些的?servlet會超出這些容器的容量,您可以從?TOMCAT?運行內幕?一書學習創建復雜的?servlet?容器。?

    兩個應用程序的類都封裝在ex02.pyrmont?包下。在理解應用程序如何運作之前,您必須熟悉?javax.servlet.Servlet?接口。首先就來介紹這個接口。隨后,就介紹servlet容器服務servlet的具體內容。?

    javax.servlet.Servlet?接口?

    servlet?編程,需要引用以下兩個類和接口:javax.servlet?和?javax.servlet.http,在這些類和接口中,javax.servlet.Servlet接口尤為重要。所有的?servlet?必須實現這個接口或繼承已實現這個接口的類。?

    Servlet?接口有五個方法,如下?

    public?void?init(ServletConfig?config)?throws?ServletException
    public?void?service(ServletRequest?request,?ServletResponse?response)throws?ServletException,?java.io.IOException??
    public?void?destroy()??
    public?ServletConfig?getServletConfig()??
    public?java.lang.String?getServletInfo()


    init、?service和?destroy?方法是?Servlet?生命周期的方法。當?Servlet?類實例化后,容器加載?init,以通知?servlet?它已進入服務行列。init?方法必須被加載,Servelt?才能接收和請求。如果要載入數據庫驅動程序、初始化一些值等等,程序員可以重寫這個方法。在其他情況下,這個方法一般為空。?

    service?方法由?Servlet?容器調用,以允許?Servlet?響應一個請求。Servlet?容器傳遞?javax.servlet.ServletRequest?對象和?javax.servlet.ServletResponse?對象。ServletRequest?對象包含客戶端?HTTP?請求信息,ServletResponse?則封裝servlet?響應。這兩個對象,您可以寫一些需要?servlet?怎樣服務和客戶怎樣請求的代碼。?

    從service中刪除Servlet實例之前,容器調用destroy方法。在servlet容器關閉或servlet容器需要更多的內存時,就調用它。這個方法只有在servlet的?service方法內的所有線程都退出的時候,或在超時的時候才會被調用。在?servlet?容器調用?destroy方法之后,它將不再調用servlet的service方法。destroy?方法給了?servlet?機會,來清除所有候住的資源(比如:內存,文件處理和線程),以確保在內存中所有的持續狀態和?servlet的當前狀態是同步的。Listing?2.1?包含了PrimitiveServlet?的代碼,此servlet非常簡單,您?可以用它來測試本文中的servlet容器應用程序。?

    PrimitiveServlet?類實現了javax.servlet.Servlet?并提供了五個servlet方法的接口?。它做的事情也很簡單:每次調用?init,service?或?destroy方法的時候,servlet就向控制口寫入方法名。service?方法也從ServletResponsec對象中獲得java.io.PrintWriter?對象,并發送字符串到瀏覽器。?

    Listing?2.1.PrimitiveServlet.java
    import?javax.servlet.*;
    import?java.io.IOException;
    import?java.io.PrintWriter;
    public?class?PrimitiveServlet?implements?Servlet?{?
    public?void?init(ServletConfig?config)?throws?ServletException?{
    ???System.out.println("init");
    ????}?
    public?void?service(ServletRequest?request,?ServletResponse??response)?throws?ServletException,?IOException?{
    ??????System.out.println("from?service");
    ??????PrintWriter?out?=?response.getWriter();
    ??????out.println("Hello.Roses?are?red.");
    ??????out.print("Violets?are?blue.");
    ????}?
    public?void?destroy()?{
    ????System.out.println("destroy");
    ????}
    public?String?getServletInfo()?{
    ???return?null;????
    ????}?
    public?ServletConfig?getServletConfig()?{
    ????return?null;
    ????}
    }

    ?
    Application?1?

    現在,我們從?servlet容器的角度來看看?servlet?編程。一個功能健全的?servlet容器對于每個?servlet?的HTTP請求會完成以下事情:?
    當servlet?第一次被調用的時候,加載了?servlet類并調用它的init方法(僅調用一次)?
    響應每次請求的時候?,構建一個javax.servlet.ServletRequest?和?javax.servlet.ServletResponse實例。?
    激活servlet的service方法,傳遞?ServletRequest?和?ServletResponse?對象。?
    當servlet類關閉的時候,調用servlet的destroy方法,并卸載servlet類。?
    發生在?servlet?容器內部的事就復雜多了。只是這個簡單的servlet容器的功能不很健全,所以,這它只能運行非常簡單的servelt?,并不能調用servlet的init和destroy方法。然而,它也執行了以下動作:?
    等待HTTP請求。?
    構建ServletRequest和ServletResponse對象?
    如果請求的是一個staticResource,就會激活StaticResourceProcessor實例的?process方法,傳遞ServletRequest?和?ServletResponse?對象。?

    如果請求的是一個servlet?,載入該類,并激活它的service方法,傳遞ServletRequest和ServletResponse?對象。注意:在這個servlet?容器,每當?servlet被請求的時候該類就被載入。?

    在第一個應用程序中,servlet容器由六個類組成?。?

    HttpServer1?
    Request?
    Response?
    StaticResourceProcessor?
    ServletProcessor1?
    Constants?


    證如前文中的應用程序一樣,這個程序的進入口(靜態?main?方法)是HttpServer?類。這個方法創建了HttpServer實例,并調用它的await方法。這個方法等待?HTTP?請示,然后創建一個?request?對象和?response對象,根據請求是否是staticResource還是?servlet?來分派它們到?StaticResourceProcessor實例或ServletProcessor實例。?

    Constants?類包含?static?find?WEB_ROOT,它是從其他類引用的。?WEB_ROOT?指明?PrimitiveServlet?位置?和容器服務的staticResource。?
    HttpServer1?實例等待?HTTP?請求,直到它收到一個?shutdown?命令。發布?shutdown命令和前文是一樣的。
    posted on 2006-12-06 12:36 matthew 閱讀(382) 評論(0)  編輯  收藏 所屬分類: JavaEE
    主站蜘蛛池模板: 亚洲AV成人片无码网站| 亚洲欧美日韩一区二区三区| 亚洲第一永久AV网站久久精品男人的天堂AV | 成人免费无码大片A毛片抽搐色欲| 免费可以在线看A∨网站| gogo全球高清大胆亚洲| 久久精品亚洲日本佐佐木明希| 亚洲国产中文在线视频| 污视频网站在线观看免费| 久久九九免费高清视频| 无码专区AAAAAA免费视频| 国产美女在线精品免费观看| 亚洲国产成人超福利久久精品| 在线看片韩国免费人成视频| 亚洲人成国产精品无码| 亚洲国产精品线观看不卡| 成人午夜免费视频| 我们的2018在线观看免费高清| 中文字幕精品无码亚洲字| 亚洲a视频在线观看| 一级做性色a爰片久久毛片免费| 国产成人精品免费午夜app| 免费成人午夜视频| 亚洲影院在线观看| 精品亚洲成A人在线观看青青| 一级毛片免费观看不卡的| 亚洲精品亚洲人成在线麻豆| 免费播放在线日本感人片| 亚洲?v无码国产在丝袜线观看| 一二三四在线观看免费中文在线观看 | 亚洲国产天堂久久久久久| 中文字幕免费播放| 免费a级毛片大学生免费观看| 久久九九久精品国产免费直播| 99人中文字幕亚洲区| 成人永久免费福利视频网站| 亚洲影院在线观看| 永久久久免费浮力影院| 亚洲综合色一区二区三区| 亚州免费一级毛片| 看Aⅴ免费毛片手机播放|