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

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

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

    Hello Java

     

    Servlet 2.4規范閱讀筆記(2-3章)

    第2章 The servlet Interface
    所有Servlet實現同一接口:Servlet,它有兩個直接的子類:GenericServlet和HttpServlet.
    2.1 Request Handle method
    基本的Servlet使用service()方法處理請求,因為可能有多個客戶的請求在service()中工作,所以開發者必須要考慮到并發的情況。
    SRV.2.1.1 HTTP Specific Request Handling Methods

    HttpServlet定義了以下7個方法:

    • doGet for handling HTTP GET requests
    • doPost for handling HTTP POST requests
    • doPut for handling HTTP PUT requests
    • doDelete for handling HTTP DELETE requests
    • doHead for handling HTTP HEAD requests
    • doOptions for handling HTTP OPTIONS requests
    • doTrace for handling HTTP TRACE requests
    SRV.2.1.2 Additional Methods
    ???
    關于Http的幾個附加命令HEAD,DELETE,PUT,OPTIONS,TRACE。
    SRV.2.1.3 Conditional GET Support
    這個”Conditional GET“指的是這樣的請求:只有所請求的資源在一個特定時間之后被修改過,才被發送給客戶端。
    HttpServlet里的getLastModified()方法提供了這方面的支持。
    SRV.2.2 Number of Instances
    ??? 在2.4之前的版本中,Servlet有兩種方式:
    ??? 第一種方式是對于一個Servlet,只有一個實例,這個實例可以同時服務多個用戶,這是默認的。
    ??? 另一種方式是一個Servlet的實例只能服務一個客戶,這樣就需要一個Servlet的Pool,當多個用戶連接時,需要建立多個Servlet實例。這種方式需要Servlet實現SingleThreadModel接口。
    ??? 以上兩種方式的比較:第一種方式需要考慮同步問題(因為一個Servlet的實例服務多個用戶,Servlet中的數據成員需要同步),第二種方式不需要考慮同步問題。
    ???
    SRV.2.3 Servlet Life Cycle
    ??? 1.載入:???
    ??? 應用服務器可能在啟動時載入Servlet或者在第一個請求到來時延遲加載,載入的方式也是使用類裝載器,和普通的Java Object沒有什么區別。
    ??? 2.初始化:
    ??? 初始化時可能遇到錯誤,這時會拋出ServletException或者UnaviliableException異常
    ??? 3.多線程:
    ??? 需要注意的一點是,最好不要對service()方法進行synchronize修飾。這樣的話就不能使用線程池,而必須對request序列化
    ??? 4.處理請求時的錯誤處理:
    ??? 如果在這時發生異常,可以發送UnavailableException或者ServletException,如果發送了 ServletException,服務器必須要想辦法清除request。如果發送了UnavailableException,有兩種選擇,如果是永 久的的無效,需要調用destroy(),并摧毀Servlet,如果這時客戶端訪問此Servlet,它將會收到404錯誤。如果是臨時的無效,容器需 要拒絕任何到此Servlet的請求,并且返回503錯誤
    ?? 5.線程安全的話題
    ??? request和response這兩個對象不是線程安全的,所以不要在service()方法外面使用它們,它們的引用不應該傳給另一個線程中的對象,如果一定要訪問它們,必須對使用這兩個對象的代碼進行同步。
    ??? 6.服務的結束
    ?? Servlet容器并不需要一直保持一個Servlet處于運行狀態,在釋放一個servlet時,會調用destroy方法,當調用destroy方法之前,容器會一直等到所有的線程都完成了在service()方法中的工作。
    第3章 Servlet Context
    SRV.3.1 Introduction to the ServletContext Interface
    Servlet Context,從Servlet的角度來看,可以理解為它所屬Web應用程序,ServletContext是一個接口,Servlet容器的提供商必須要實現這個接口。
    ServletContext能做什么呢?它可以把事件記錄到日志中,獲得資源的URL,還可以利用ServletContext存放一些所有Servlet都能共享的數據。
    ServletContext有一個路徑,例如http://www.mycorp.com/catalog,這里的cataqlog就是ServletContext的路徑,所有的對catalog的請求都會關聯到這個ServletContext.
    SRV.3.2 Scope of a ServletContext Interface

    在Servlet容器中,每個ServletContext通常只有一個實例。當Web容器是分布式的部署在多臺機器上時,那一個ServletContext在每個JVM上都有一個實例。
    在Servlet容器中,但沒有部署的Servlet也是允許的,這種Servlet屬于一個缺省的ServletContext,這種缺省的ServletContext不能被分布到多個JVM上。
    SRV.3.3 Initialization Parameters
    在ServletContext接口中,有兩個方法可以用來獲得初始化參數:
    ? getInitParameter
    ? getInitParameterNames
    SRV.3.4 Context Attributes
    在ServletContext中,有4個方法可以用來設置和管理ServletContext的屬性:
    ? setAttribute
    ? getAttribute
    ? getAttributeNames
    ? removeAttribute
    SRV.3.4.1 Context Attributes in a Distributed Container
    ServletContext中的屬性只在本地的JVM中有效,不能被分布式環境中運行于其它JVM中的Servlet訪問,如果需要在分布式環境中共享數據,可以把數據存放在Session,數據庫或EJB中。
    SRV.3.5 Resources
    資源指的是在Web應用程序中的一些靜態的內容,如靜態HTML頁面,圖片等等。ServletContext提供了兩個方法來訪問這些資源:
    ? getResource
    ? getResourceAsStream
    這兩個方法都接受一個String型參數,它指定了一個以"/"開頭的相對于這個ServletContext的資源路徑。資源可以放在同一服務器上,或者不同服務器上,或者在一個Web應用程序的WAR包中。
    需要注意的是,這兩個方法不能用來獲取動態內容,如果我們用這兩個方法去取一個JSP頁面,返回的將是JSP頁面的源代碼。
    getResourcePaths(String path)方法可以用來獲取一個資源列表。
    SRV.3.6 Multiple Hosts and Servlet Contexts
    Web服務器可能支持多個域名分享一個IP地址,這種配置叫做“虛擬主機”。在這種情況下,每個虛擬主機必須要有自己的ServletContext,而不能共享一個ServletContext。
    SRV.3.7 Reloading Considerations
    所有的Servlet和它們引用的類必須都處于一個類裝載器范圍內。
    SRV.3.7.1 Temporary Working Directories
    每一個ServletContext都需要一個臨時目錄,并且通過 javax.servlet.context.tempdir屬性指定。Servlet容器不需要管理這個臨時路徑的內容,但是要確保一個 ServletContext的臨時目錄對其他的ServletContext是不可見的。

    posted on 2006-06-14 23:43 Hello Java 閱讀(1679) 評論(1)  編輯  收藏 所屬分類: J2EE

    評論

    # re: Servlet 2.4規范閱讀筆記(2-3章) 2007-08-11 20:41 dreamstone

    多了解一些規范還是好的,可以從根本上了解設計。  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    導航

    統計

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久香蕉国产线看观看亚洲片| 女性自慰aⅴ片高清免费| 国产亚洲一区区二区在线| 精品亚洲国产成人av| 青青青国产免费一夜七次郎| 久久精品国产亚洲AV蜜臀色欲| 91香蕉成人免费网站| 亚洲国产av美女网站| 最近2019中文字幕免费看最新| 亚洲精品女同中文字幕| 老司机永久免费网站在线观看| 亚洲国产精品成人午夜在线观看| 四虎成人免费观看在线网址| 亚洲国产乱码最新视频| 免费国内精品久久久久影院| 七次郎成人免费线路视频| 国产亚洲精品一品区99热| 桃子视频在线观看高清免费视频| 亚洲视频免费在线观看| 久久经典免费视频| 精品国产日韩亚洲一区91| 久久亚洲2019中文字幕| 84pao国产成视频免费播放| 亚洲日本国产综合高清| 免费大黄网站在线观| 18禁超污无遮挡无码免费网站| 亚洲视频免费播放| 国产大片91精品免费观看男同| 国产精品免费久久久久久久久| 亚洲精品夜夜夜妓女网| 日韩免费a级毛片无码a∨| 一道本不卡免费视频| 亚洲综合一区二区精品久久| 日本不卡在线观看免费v| a毛片久久免费观看| 亚洲日本国产精华液| 国产在线ts人妖免费视频| 午夜免费福利视频| 午夜亚洲国产精品福利| 亚洲一区二区影院| 免费一级大黄特色大片|