一、基本的servlet API
JavaEE關於Servlet的API主要有兩個包:javax.servlet和javax.servlet.http。前者主要提供了Web容器能夠使用的servlet基本類和介面,後者主要包括和HTTP協議相關的servlet類和介面。對servlet的編程,主要是根據需要,繼承這些類實現需要的功能。
javax.servlet包和javax.servlet.http包的類和介面主要分以下幾類:
1.servlet基本類
javax.servlet.Servlet
javax.servlet.http.HttpServlet
javax.servlet.SingleThreadModel
javax.servlet.GenericServlet
這些是servlet程式需要直接或間接繼承的抽象類別和介面。SingleThreadModel介面可以保證servlet在同一時間只處理一個客戶請求。
2.Web請求和響應類
javax.servlet.ServletRequest
javax.servlet.ServletResponse
javax.servlet.ServletInputStream
javax.servlet.ServletOutputStream
javax.servlet.HttpServletRequest
javax.servlet.HttpServletResponse
3.和Web容器聯絡
javax.servlet.ServletConfig
ServletConfig介面使Web容器在servlet初始化時(一般是web伺服器啟動並載入Web應用時)能夠和servlet進行聯絡。Servlet可以通過該介面取得初始變數和servlet名稱等。
4.和Web應用聯絡
javax.servlet.ServletContext
這個介面是Servlet和Web應用進行串連,使用servlet和Web程式在運行時能夠傳遞資料。Servlet之間也可以通過這個介面共用資料。ServletContext是包含在ServletConfig中的,它和ServletConfig的主要不同是:ServletContext有更多方法,主要是在servlet運行時使用,而ServletConfig主要是在servlet啟動時從Web容器中得到。
5.和其他Web資源的共同作用
javax.servlet.http.RequestDispatcher
RequestDispather支援servlet和JSP,其他servlet或Web資源之間的調用。這樣當servlet需要引入其他servlet、JSP或HTML內容時,可以更靈活地控制它們之間的邏輯關係。
6.錯誤異常類
javax.servlet.ServletException
javax.servlet.UnavailableException
7.其他附屬類
javax.servlet.http.HttpUtils
javax.servlet.http.Cookie
前者提供servlet的一些協助功能,後者是對應HTTP的Cookie。
二、主要servlet類和介面的使用方法
1.javax.servlet.Servlet介面
這個介面定義了servlet初始化、進行服務和終止服務的基本方法,這個些方法都和servlet的生命週期有關。javax.servlet.Servlet將被HttpServlet和GenericServlet所實現。一般編程者在其中通過繼承HttpServlet間接使用了javax.servlet.Servlet的方法,比如init(),service(),destroy()。
2.javax.servlet.GenericServlet類
該類定義了一個通用的servlet類。它的用法和HTTP協議無關,主要用來方便編程者自己開發其他Web協議的servlet程式。GenericServlet實現了上面的Servlet和ServletConfig介面,它提供了包括Servlet生命週期方法的一些常用方法。繼承這個類的servlet需要填定其service()方法。它的init()、destroy()方法和javax.servlet.Servlet的同名方法基本一樣。另外,它加入了getInitParameter()等方法。
3.javax.servlet.http.HttpServlet類
HttpServlet是最常用的Servlet類,編程者需要繼承這個抽象類別並填充其有關doXXX方法。另外在編程時注意各個方法的線程關係,避免當多個Web請求到來時,servlet會產生錯誤。它的service()方法一般不需要被替代,它會調用和使用者請求對應的doXXX等方法。在一般servlet中,使用最多的是doGet和doPost方法,沒有必要重寫doOptions和doTrace方法。
4.javax.servlet.SingleThreadModel介面
Web容器保證實現SingleTheadModel介面的servlet運行在單線程模式下,也就是保證其service()方法不會使用多線程。Web容器有兩種方法可以實現這一功能。一種是建立並管理多個servlet執行個體,每個執行個體在同一時間單獨處理一個請求;另一種是讓請求依照順序被一個servlet處理。
5.javax.servet.ServletConfig介面
ServletConfig介面能夠使Web容器在servlet初始化時向servlet傳遞一些設定資訊。設定資訊是在servlet之外定義的,如在Web容器中配置描述檔案web.xml內指定的初始設定變數。在servet進行配置可以帶來很大的靈活性。
6.javax.servlet.ServletRequest介面和javax.servlet.ServletResponse介面
這兩個介面定義了來自用戶端的請求和向用戶端發送的響應。Web容器根據客戶請求建立ServetRequest對象和ServletResponse對象並作為參數傳遞給servlet的service()方法。
可以從ServletRequest中獲得請求參數(即url後的&var1=value1...)、請求屬性(attributes)、和輸入資料流。另外,它還可以得到Web協議資訊(如getRemoteAddr(),getRemoteHost(),GetServetName()等)。
當Web容器通過ServletResponse介面向客戶傳遞響應資料時,資料的格式主要可以有二進帛類型和文本類型。如果在servlet中需要發送位元據,servlet要用getOutputStream()取得的ServletOutputStream對象;如果需要發送文本資料,要用getWriter()取得PrinterWriter對象。Servlet可以通過setContentType()設定響應資料的字元集(註:此設定應在getWriter方法獲得PrinterWriter對象前取得)。
7.javax.servlet.ServletInputStream介面和javax.servlet.ServletOutputStream介面
SetvletInputStream用於從ServletRequest中擷取資料輸入流;ServletOutputStream用於向ServletResponse中寫資料流。
8.javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletReponse介面
這兩個介面分別繼承自ServletRequest,ServletResponse,它們提供了處理HTTP請求和響應的多種方法。在servlet編程中這兩個介面作為參數傳遞給doGet,doPost等方法。可以從這兩個方法中獲得和設定HTTP頭資訊。
9.javax.servlet.http.HttpSession介面
HttpSession提供了會話的管理機制。它可以用來識別一個使用者和一系列Web請求的關聯關係。同時HttpSession可以用來記載使用者的一些特定資訊。在Web容器中,常用的實現會話的方式有通過cookie或重寫URL等。HttpSession編程介面代表在HTTP客戶和Web伺服器之間建立的會話。使用這個介面的方法可以查詢和管理關於會話的資訊。