**1 Servet資料 1.1 緒言 這是一份關於2.1版Java Servlet API的說明文檔,做爲對這本文檔的補充,你能夠到http://java.sun.com/products/servlet/index.html下面下載Javadoc格式的文檔。html
1.2 誰須要讀這份文檔 這份文檔描述了Java Servlet API的最新版本2.1版。因此,這本書對於Servlet的開發者及servlet引擎的開發者一樣適用。java
1.3 Java Servlet API的組成 Java Servlet API由兩個軟件包組成:一個是對應HTTP的軟件包,另外一個是不對應HTTP的通用的軟件包。這兩個軟件包的同時存在使得Java Servlet API可以適應未來的其餘請求-響應的協議。程序員
這份文檔以及剛纔說起的Javadoc格式的文檔都描述了這兩個軟件包,Javadoc格式的文檔還描述了你應該如何使用這兩個軟件包中的全部方法。
1.4 有關規範 你也許對下面的這些Internet規範感興趣,這些規範將直接影響到Servlet API的發展和執行。數據庫
你能夠從http: //info.internet.isi.edu/7c/in-notes/rfc/.cache 找到下面提到的全部這些RFC規範。小程序
RFC 1738 統一資源定位器(URL) RFC 1808 相關統一資源定位器 RFC 1945 超文本傳輸協議--HTTP/1.0 RFC 2045 多用途Internet郵件擴展(多用途網際郵件擴充協議(MIME))第一部分:Internet信息體格式 RFC 2046 多用途Internet郵件擴展(多用途網際郵件擴充協議(MIME))第二部分:媒體類型 RFC 2047 多用途網際郵件擴充協議(MIME)(多用途Internet郵件擴展)第三部分:信息標題擴展用於非ASCII文本 RFC 2048 多用途Internet郵件擴展(多用途網際郵件擴充協議(MIME))第四部分: 註冊步驟 RFC 2049 多用途Internet郵件擴展(多用途網際郵件擴充協議(MIME))第五部分:一致性標準和例子 RFC 2068 超文本傳輸協議 -- HTTP/1.1 RFC 2069 一個擴展HTTP:摘要訪問鑑定 RFC 2109 HTTP狀態管理機制 RFC 2145 HTTP 版本號的使用和解釋 RFC 2324 超文本Coffee Pot控制協議 (HTCPCP/1.0) 萬維網協會(http://www.w3.org)管理着這些協議的規範和執行。
1.5 有關Java Servlets JavaTM servlets 是一個不受平臺約束的Java小程序,它能夠被用來經過多種方法擴充一個Web服務器的功能。你能夠把Servlet理解成Server上的 applets,它被編譯成字節碼,這樣它就能夠被動態地載入並用效地擴展主機的處理能力。數組
Servlet與applets不一樣的地方是,它不運行在Web瀏覽器或其餘圖形化的用戶界面上。Servlet經過servlet引擎運行在Web服務器中,以執行請求和響應,請求、響應的典型範例是HTTP協議。 一個客戶端程序,能夠是一個Web瀏覽器,或者是非其餘的能夠鏈接上Internet的程序,它會訪問Web服務器併發出請求。這個請求被運行在Web服 務器上的Servlet引擎處理,並返回響應到Servlet。Servlet經過HTTP將這個響應轉發到客戶端。
在功能上,Servlet與CGI、NSAPI有點相似,可是,與他們不一樣的是:Servlet具備平臺無關性。瀏覽器
1.6 Java Servlet概論 Servlet與其餘普通的server擴展機制有如下進步:安全
由於它採用了不一樣的進程處理模式,因此它比CGI更快。 它使用了許多Web服務器都支持的標準的API。 它繼承了Java的全部優點,包括易升級以及平臺無關性。 它能夠調用Java所提供的大量的API的功能模塊。 這份文檔說明了Java Servlet API的類和接口的方法。有關更多的信息,請參看下面的API說明。
1.7 Servlet的生命週期 一個Java servlet具備一個生命週期,這個生命週期定義了一個Servlet如何被載入並被初始化,如何接收請求並做出對請求的響應,如何被從服務中清除。Servlet的生命週期被javax.servlet.Servlet這個接口所定義。服務器
全部的Java Servlet都會直接地或間接地執行javax.servlet.Servlet接口,這樣它才能在一個Servlet引擎中運行。 Servlet引擎是Web 服務器按照Java Servlet API定製的擴展。Servlet引擎提供網絡服務,可以理解MIME請求,並提供一 個運行Servlet的容器。 javax.servlet.Servlet接口定義了在Servlet的生命週期中特定時間以及特定順序被調用的方法。
1.8 Servlet的解析和載入 Servlet引擎解析並載入一個Servlet,這個過程能夠發生在引擎啓動時,須要一個Servlet去響應請求時,以及在此之間的任什麼時候候。cookie
Servlet引擎利用Java類載入工具載入一個Servlet,Servlet引擎能夠從一個本地的文件系統、一個遠程的文件系統以及網絡載入Servlet。
1.9 Servlet的初始化 Servlet引擎載入Servlet後,Servlet引擎必須對Servlet進行初始化,在這一過程當中,你能夠讀取一些固定存儲的數據、初始化JDBC的鏈接以及創建與其餘資源的鏈接。
在初始化過程當中,javax.servlet.Servlet接口的init()方法提供了Servlet的初始化信息。這樣,Servlet能夠對本身進行配置。 init()方法得到了一個Servlet配置對象(ServletConfig)。這個對象在Servlet引擎中執行,並容許Servlet經過它獲處相關參數。這個對象使得Servlet可以訪問ServletContext對象。
1.10 Servlet處理請求 Servlet被初始化以後,它已經能夠處理來自客戶端的請求,每個來自客戶端的請求都被描述成一個ServletRequest對象,Servlet的響應被描述成一個ServletResponse對象。
當客戶端發出請求時,Servlet引擎傳遞給Servlet一個ServletRequest對象和一個ServletResponse對象,這兩個對象做爲參數傳遞到service()方法中。 Servlet 也能夠執行ServletRequest接口和ServletResponse接口。ServletRequest接口使得Servlet有權使用客戶端發出的請求。Servlet能夠經過ServletInputStream對象讀取請求信息。 ServletResponse接口容許Servlet創建響應頭和狀態代碼。經過執行這個接口,Servlet有權使用ServletOutputStream類來向客戶端返回數據。
1.11 多線程和映射 在多線程的環境下,Servlet必須能處理許多同時發生的請求。例外的狀況是這個Servlet執行了SingleThreadModel接口,若是是那樣的話,Servlet只能同時處理一個請求。
Servlet依照Servlet引擎的映射來響應客戶端的請求。一個映射對包括一個Servlet實例以及一個Servlet返回數據的URL,例如:HelloServlet with /hello/index.html。 然而,一個映射多是由一個URL和許多Servlet實例組成,例如:一個分佈式的Servlet引擎可能運行在不止一個的服務器中,這樣的話,每個服務器中均可能有一個Servlet實例,以平衡進程的載入。做爲一個Servlet的開發者,你不能假定一個Servlet只有一個實例。
1.12 Servlet的卸載 Servlet引擎並沒必要需保證一個Servlet在任什麼時候候或在服務開啓的任什麼時候候都被載入。Servlet引擎能夠自由的在任什麼時候候使用或清除一個Servlet。所以,咱們不能依賴一個類或實例來存儲重要的信息。
當Servlet引擎決定卸載一個Servlet時(例如,若是這個引擎被關閉或者須要讓資源),這個引擎必須容許Servlet釋放正在使用的資源並存儲有關資料。爲了完成以上工做,引擎會調用Servlet的destroy()方法。 在卸載一個Servlet以前,Servlet引擎必須等待全部的service()方法完成或超時結束(Servlet引擎會對超時做出定義)。當一個 Servlet被卸載時,引擎將不能給Servlet發送任何請求。引擎必須釋放Servlet並完成無用存儲單元的收集
1.13 Servlet映射技術 做爲一個Servlet引擎的開發者,你必須對於如何映射客戶端的請求到Servlet有大量的適應性。這份說明文檔不規定映射如何發生。可是,你必須可以自由地運用下面的全部技術:
映射一個Servlet到一個URL 例如,你能夠指定一個特殊的Servlet它僅被來自/feedback/index.html的請求調用。 映射一個Servlet到以一個指定的目錄名開始的全部URL 例如,你能夠映射一個Servlet到/catalog,這樣來自/catalog/、 /catalog/garden和 /catalog/housewares/index.html的請求都會被映射到這個Servlet。可是來自/catalogtwo 或 /catalog.html的請求沒被映射。 映射一個Servlet到全部以一個特定的字段結尾的全部URL 例如,你能夠映射一個來自於全部以in.thtml結尾的請求到一個特定的Servlet。 映射一個Servlet到一個特殊的URL /servlet/servlet_name。 例如,若是你創建了一個名叫listattributes的Servlet,你能夠經過使用/servlet/listattributes來訪問這個Servlet。
1.14 經過類名調用Servlet 例如,若是Servlet引擎接收了來自/servlet/com.foo.servlet.MailServlet的請求,Servlet引擎會載入這 個com.foo.servlet.MailServlet類,創建實例,並經過這個Servlet來處理請求。
1.15 Servlet環境 ServletContext 接口定義了一個Servlet環境對象,這個對象定義了一個在Servlet引擎上的Servlet的視圖。經過使用這個對象,Servlet能夠記錄事 件、獲得資源並獲得來自Servlet引擎的類(例如RequestDispatcher對象)。一個Servlet只能運行在一個Servlet環境 中,可是不一樣的Servlet能夠在Servlet引擎上有不一樣的視圖。
若是Servlet引擎支持虛擬主機,每一個虛擬主機有一個Servlet環境。一個Servlet環境不能在虛擬主機之間共享。 Servlet引擎可以容許一個Servlet環境有它本身的活動範圍。 例如,一個Servlet環境是屬於bank應用的,它將被映射到/bank目錄下。在這種狀況下,一個對getContext方法的調用會返回/bank的Servlet環境。
1.16 HTTP會話 HTTP是一個沒有狀態的協議。要創建一個有效的Web服務應用,你必須可以識別一個連續的來自遠端的客戶機的惟一的請求。隨着時間的過去,發展了許多會話跟蹤的技術,可是使用起來都比較麻煩。
Java Servlet API提供了一個簡單的接口,經過這個接口,Servlet引擎能夠有效地跟蹤用戶的會話。
1.17 創建Session 由於HTTP是一個請求-響應協議,一個會話在客戶機加入以前會被認爲是一個新的會話。加入的意思是返回會話跟蹤信息到服務器中,指出會話已被創建。在客戶端加入以前,咱們不能判斷下一個客戶端請求是目前會話的一部分。
在下面的狀況下,Session會被認爲是新的Session。客戶端的Session在此以前還不知道客戶端選擇不加入Session,例如,若是客戶端拒絕接收來自服務器的cookie做 爲一個Servlet的開發者,你必須決定你的Web應用是否處理客戶機不加入或不能加入Session。服務器會在Web服務器或Servlet規定的時間內維持一個Session對象。當Session終止時,服務器會釋放Session對象以及全部綁定在Session上的對象。
綁定對象到Session中
若是有助於你處理應用的數據需求,你也許須要綁定對象到Session中,你能夠經過一個惟一的名字綁定任何的對象到Session中,這時,你須要使用 HttpSession對象。任何綁定到Session上的對象均可以被處理同一會話的Servlet調用。 有些對象可能須要你知道何時會被放置到Session中或從Session中移開。你能夠經過使用HttpSessionBindingListener接口得到這些信息。當你的應用存儲數據到Session中,或從Session中清除數據,Servlet都會經過HttpSessionBindingListener檢杳什麼類被綁定或被取消綁定。這個接口的方法會通報被綁定或被取消綁定的對象。
API對象的說明
這一部分包含了對Java Servlet API的所有類和接口的詳細說明。這個說明與Javadoc API差很少,可是這份文檔提供了更多的信息。
API包含了兩個軟件包,十二個接口和九個類。
軟件包:javax.servlet
所包含的接口:RequestDispatcher;Servlet;ServletConfig;ServletContext;ServletRequest;ServletResponse;SingleThreadModel。
所包含的類:GenericServlet;ServletInputStream;ServletOutputStream;ServletException;UnavailableException。
2 API介紹 2.1 Request Dispatcher接口 定義:
public interface RequestDispatcher; 定義一個對象,從客戶端接收請求,而後將它發給服務器的可用資源(例如Servlet、CGI、HTML文件、JSP文件)。Servlet引擎建立request dispatcher對象,用於封裝由一個特定的URL定義的服務器資源。 這個接口是專用於封裝Servlet的,可是一個Servlet引擎能夠建立request dispatcher對象用於封裝任何類型的資源。 request dispatcher對象是由Servlet引擎創建的,而不是由Servlet開發者創建的。 方法 一、forward public void forward(ServletRequest request, ServletReponse response) throws ServletException, IOException; 被用來從這個Servlet向其它服務器資源傳遞請求。當一個Servlet對響應做了初步的處理,並要求其它的對象對此做出響應時,可使用這個方法。 當request對象被傳遞到目標對象時,請求的URL路徑和其餘路徑參數會被調整爲反映目標對象的目標URL路徑。 若是已經經過響應返回了一個ServletOutputStream對象或PrintWriter對象,這個方法將不能使用,不然,這個方法會拋出一個IllegalStateException。 二、include public void include(ServletRequest request, ServletResponse response) throws ServletException, IOException 用來包括髮送給其餘服務器資源的響應的內容。本質上來講,這個方法反映了服務器端的內容。 請求對象傳到目標對象後會反映調用請求的請求URL路徑和路徑信息。這個響應對象只能調用這個Servlet的ServletOutputStream對象和PrintWriter對象。 一個調用include的Servlet不能設置頭域,若是這個Servlet調用了必須設置頭域的方法(例如cookie),這個方法將不能保證正常使用。做爲一個Servlet開發者,你必須妥善地解決那些可能直接存儲頭域的方法。例如,即便你使用會話跟蹤,爲了保證session的正常工做,你必須在一個調用include的Servlet以外開始你的session
2.2 Servlet接口。 定義
public interface Servlet 這個接口定義了一個Servlet:一個在Web服務器上繼承了這個功能的Java類。 方法 一、init public void init(ServletConfig config) throws ServletException; Servlet引擎會在Servlet實例化以後,置入服務以前精確地調用init方法。在調用service方法以前,init方法必須成功退出。 若是init方法拋出一個ServletException,你不能將這個Servlet置入服務中,若是init方法在超時範圍內沒完成,咱們也能夠假定這個Servlet是不具有功能的,也不能置入服務中。 二、service public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException; Servlet引擎調用這個方法以容許Servlet響應請求。這個方法在Servlet未成功初始化以前沒法調用。在Servlet被初始化以前,Servlet引擎可以封鎖未決的請求。 在一個Servlet對象被卸載後,直到一個新的Servelt被初始化,Servlet引擎不能調用這個方法 三、destroy public void destroy(); 當一個Servlet被從服務中去除時,Servlet引擎調用這個方法。在這個對象的service方法全部線程未所有退出或者沒被引擎認爲發生超時操做時,destroy方法不能被調用。 四、getServletConfig public ServletConfig getServletConfig(); 返回一個ServletConfig對象,做爲一個Servlet的開發者,你應該經過init方法存儲ServletConfig對象以便這個方法能返回這個對象。爲了你的便利,GenericServlet在執行這個接口時,已經這樣作了。 五、getServletInfo public String getServletInfo(); 容許Servlet向主機的Servlet運行者提供有關它自己的信息。返回的字符串應該是純文本格式而不該有任何標誌(例如HTML,XML等)。
2.3 ServletConfig接口 定義
public interface ServletConfig 這個接口定義了一個對象,經過這個對象,Servlet引擎配置一個Servlet而且容許Servlet得到一個有關它的ServletContext接口的說明。每個ServletConfig對象對應着一個惟一的Servlet。 方法 一、getInitParameter public String getInitParameter(String name); 這個方法返回一個包含Servlet指定的初始化參數的String。若是這個參數不存在,返加空值。 二、getInitParameterNames public Enumeration getInitParameterNames(); 這個方法返回一個列表String對象,該對象包括Servlet的全部初始化參數名。若是Servlet沒有初始化參數,getInitParameterNames返回一個空的列表。 三、getServletContext public ServletContext getServletContext(); 返回這個Servlet的ServletContext對象。
2.4 ServletContext接口 定義
public interface ServletContext 定義了一個Servlet的環境對象,經過這個對象,Servlet引擎向Servlet提供環境信息。 一個Servlet的環境對象必須至少與它所駐留的主機是一一對應的。在一個處理多個虛擬主機的Servlet引擎中(例如,使用了HTTP1.1的主機 頭域),每個虛擬主機必須被視爲一個單獨的環境。此外,Servlet引擎還能夠建立對應於一組Servlet的環境對象。 方法 一、getAttribute public Object getAttribute(String name); 返回Servlet環境對象中指定的屬性對象。若是該屬性對象不存在,返回空值。這個方法容許訪問有關這個Servlet引擎的在該接口的其餘方法中還沒有提供的附加信息。 二、getAttributeNames public Enumeration getAttributeNames(); 返回一個Servlet環境對象中可用的屬性名的列表。 三、getContext public ServletContext getContext(String uripath); 返回一個Servlet環境對象,這個對象包括了特定URI路徑的Servlets和資源,若是該路徑不存在,則返回一個空值。URI路徑格式是/dir/dir/filename.ext。 爲了安全,若是經過這個方法訪問一個受限制的Servlet的環境對象,會返回一個空值。 四、getMajorVersion public int getMajorVersion(); 返回Servlet引擎支持的Servlet API的主版本號。例如對於2.1版,這個方法會返回一個整數2。 五、getMinorVersion public int getMinorVersion(); 返回Servlet引擎支持的Servlet API的次版本號。例如對於2.1版,這個方法會返回一個整數2。 六、getMimeType public String getMimeType(String file); 返回指定文件的MIME類型,若是這種MIME類型未知,則返回一個空值。MIME類型是由Servlet引擎的配置決定的。 七、getRealPath public String getRealPath(String path); 一個符合URL路徑格式的指定的虛擬路徑的格式是:/dir/dir/filename.ext。用這個方法,能夠返回與一個符合該格式的虛擬路徑相對應的真實路徑的String。這個真實路徑的格式應該適合於運行這個Servlet引擎的計算機(包括其相應的路徑解析器)。 無論是什麼緣由,若是這一從虛擬路徑轉換成實際路徑的過程不能執行,該方法將會返回一個空值。 八、getResource public URL getResource(String uripath); 返回一個URL對象,該對象反映位於給定的URL地址(格式:/dir/dir/filename.ext)的Servlet環境對象已知的資源。不管 URLStreamHandlers對於訪問給定的環境是否是必須的,Servlet引擎都必須執行。若是給定的路徑的Servlet環境沒有已知的資源,該方法會返回一個空值。 這個方法和java.lang.Class的getResource方法不徹底相同。 java.lang.Class的getResource方法經過裝載類來尋找資源。而這個方法容許服務器產生環境變量給任何資源的任何Servlet, 而沒必要依賴於裝載類、特定區域等等。 九、getResourceAsStream public InputStream getResourceAsStream(String uripath); 返回一個InputStream對象,該對象引用指定的URL的Servlet環境對象的內容。若是沒找到Servlet環境變量,就會返回空值,URL路徑應該具備這種格式:/dir/dir/filename.ext。 這個方法是一個經過getResource方法得到URL對象的方便的途徑。請注意,當你使用這個方法時,meta-information(例如內容長度、內容類型)會丟失。 十、getRequestDispatcher public RequestDispatcher getRequestDispatcher(String uripath); 若是這個指定的路徑下可以找到活動的資源(例如一個Servlet,JSP頁面,CGI等等)就返回一個特定URL的RequestDispatcher 對象,不然,就返回一個空值,Servlet引擎負責用一個request dispatcher對象封裝目標路徑。這個 request dispatcher對象能夠用來徹底請求的傳送。 十一、getServerInfo public String getServerInfo(); 返回一個String對象,該對象至少包括Servlet引擎的名字和版本號。 十二、log public void log(String msg); public void log(String msg, Throwable t); public void log(Exception exception, String msg); // 這種用法將被取消 寫指定的信息到一個Servlet環境對象的log文件中。被寫入的log文件由Servlet引擎指定,可是一般這是一個事件log。當這個方法被一個異常調用時,log中將包括堆棧跟蹤。 1三、setAttribute public void setAttribute(String name, Object o); 給予Servlet環境對象中你所指定的對象一個名稱。 1四、removeAttribute public void removeAttribute(String name); 從指定的Servlet環境對象中刪除一個屬性。 注:如下幾個方法將被取消 1五、getServlet public Servlet getServlet(String name) throws ServletException; 最初用來返回一個指定名稱的Servlet,若是沒找到就返回一個空值。若是這個Servlet可以返回,這就意味着它已經被初始化,並且已經能夠接受 service請求。這是一個危險的方法。當調用這個方法時,可能並不知道Servlet的狀態,這就可能致使有關服務器狀態的問題。而容許一個 Servlet訪問其餘Servlet的這個方法也一樣的危險。 如今這個方法返回一個空值,爲了保持和之前版本的兼容性,如今這個方法尚未被取消。在之後的API版本中,該方法將被取消。 1六、getServletNames public Enumeration getServletNames(); 最初用來返回一個String對象的列表,該列表表示了在這個Servlet環境下全部已知的Servlet對象名。這個列表老是包含這個Servlet自身。
基於與上一個方法一樣的理由,這也是一個危險的方法。
如今這個方法返回一個空的列表。爲了保持和之前版本的兼容性,如今這個方法尚未被取消。在之後的API版本中,該方法將被取消。 1七、getServlets public Enumeration getServlets(); 最初用來返回在這個Servelet環境下全部已知的Servlet對象的列表。這個列表老是包含這個Servlet自身。
基於與getServlet方法一樣的理由,這也是一個危險的方法。
如今這個方法返回一個空的列表。爲了保持和之前版本的兼容性,如今這個方法尚未被取消。在之後的API版本中,該方法將被取消。
2.5 ServletRequest接口 定義
public interface ServletRequest 定義一個Servlet引擎產生的對象,經過這個對象,Servlet能夠得到客戶端請求的數據。這個對象經過讀取請求體的數據提供包括參數的名稱、值和屬性以及輸入流的全部數據。 方法 一、getAttribute public Object getAttribute(String name); 返回請求中指定屬性的值,若是這個屬性不存在,就返回一個空值。這個方法容許訪問一些不提供給這個接口中其餘方法的請求信息以及其餘Servlet放置在這個請求對象內的數據。 二、getAttributeNames public Enumeration getAttributeNames(); 返回包含在這個請求中的全部屬性名的列表。 三、getCharacterEncoding public String getCharacterEncoding(); 返回請求中輸入內容的字符編碼類型,若是沒有定義字符編碼類型就返回空值。 四、getContentLength public int getContentLength(); 請求內容的長度,若是長度未知就返回-1。 五、getContentType public String getContentType(); 返回請求數據體的MIME類型,若是類型未知返回空值。 六、getInputStream public ServletInputStream getInputStream() throws IOException; 返回一個輸入流用來從請求體讀取二進制數據。若是在此以前已經經過getReader方法得到了要讀取的結果,這個方法會拋出一個IllegalStateException。 七、getParameter public String getParameter(String name); 以一個String返回指定的參數的值,若是這個參數不存在返回空值。例如,在一個HTTP Servlet中,這個方法會返回一個指定的查詢語句產生的參數的值或一個被提交的表單中的參數值。若是一個參數名對應着幾個參數值,這個方法只能返回經過getParameterValues方法返回的數組中的第一個值。所以,若是這個參數有(或者可能有)多個值,你只能使用getParameterValues方法。 八、getParameterNames public Enumeration getParameterNames(); 返回全部參數名的String對象列表,若是沒有輸入參數,該方法返回一個空值。 九、getParameterValues public String[] getParameterValues(String name); 經過一個String對象的數組返回指定參數的值,若是這個參數不存在,該方法返回一個空值。 十、getProtocol public String getProtocol(); 返回這個請求所用的協議,其形式是協議/主版本號.次版本號。例如對於一個HTTP1.0的請求,該方法返回HTTP/1.0。 十一、getReader public BufferedReader getReader() throws IOException; 這個方法返回一個buffered reader用來讀取請求體的實體,其編碼方式依照請求數據的編碼方式。若是這個請求的輸入流已經被getInputStream調用得到,這個方法會拋出一個IllegalStateException。 十二、getRemoteAddr public String getRemoteAddr(); 返回發送請求者的IP地址。 1三、getRemoteHost public String getRemoteHost(); 返回發送請求者的主機名稱。若是引擎不能或者選擇不解析主機名(爲了改善性能),這個方法會直接返回IP地址。 1四、getScheme public String getScheme(); 返回請求所使用的URL的模式。例如,對於一個HTTP請求,這個模式就是http。 1五、getServerName public String getServerName(); 返回接收請求的服務器的主機名。 1六、getServerPort public int getServerPort(); 返回接收請求的端口號。 1七、setAttribute public void setAttribute(String name, Object object); 這個方法在請求中添加一個屬性,這個屬性能夠被其餘能夠訪問這個請求對象的對象(例如一個嵌套的Servlet)使用。 注:如下方法將被取消 getRealPath public String getRealPath(String path); 返回與虛擬路徑相對應的真實路徑,若是由於某種緣由,這一過程不能進行,該方法將返回一個空值。 這個方法和ServletContext接口中的getRealPath方法重複。在2.1版中,ServletContext接口將闡明一個 Servlet所能用的全部的路徑的映射。該方法執行的結果將會與ServletContext中getRealPath方法的結果徹底同樣。
2.6 ServletResponse接口 定義
public interface ServletResponse 定義一個Servlet引擎產生的對象,經過這個對象,Servlet對客戶端的請求做出響應。這個響應應該是一個MIME實體,多是一個HTML頁、圖象數據或其餘MIME的格式。 方法 一、getCharacterEncoding public String getCharacterEncoding(); 返回MIME實體的字符編碼。這個字符編碼能夠是指定的類型,也能夠是與請求頭域所反映的客戶端所能接受的字符編碼最匹配的類型。在HTTP協議中,這個信息被經過Accept-Charset傳送到Servlet引擎。 有關字符編碼和MIME的更多信息請參看RFC 2047。 二、getOutputStream public ServletOutputStream getOutputStream() throws IOException; 返回一個記錄二進制的響應數據的輸出流。 若是這個響應對象已經調用getWriter,將會拋出IllegalStateException。 三、getWriter public PrintWriter getWriter throws IOException; 這個方法返回一個PringWriter對象用來記錄格式化的響應實體。若是要反映使用的字符編碼,必須修改響應的MIME類型。在調用這個方法以前,必須設定響應的content類型。 若是沒有提供這樣的編碼類型,會拋出一個UnsupportedEncodingException,若是這個響應對象已調用getOutputStream,會拋出一個getOutputStream。 四、setContentLength public void setContentLength(int length); 設置響應的內容的長度,這個方法會覆蓋之前對內容長度的設定。 爲了保證成功地設定響應頭的內容長度,在響應被提交到輸出流以前必須調用這個方法。 五、setContentType public void setContentType(String type); 這個方法用來設定響應的content類型。這個類型之後可能會在另外的一些狀況下被隱式地修改,這裏所說的另外的狀況可能當服務器發現有必要的狀況下對MIME的字符設置。 爲了保證成功地設定響應頭的content類型,在響應被提交到輸出流以前必須調用這個方法。
2.7 SingleThreadModel接口 定義
public interface SingleThreadModel; 這是一個空接口,它指定了系統如何處理對同一個Servlet的調用。若是一個Servlet被這個接口指定,那麼在這個Servlet中的service方法中將不會有兩個線程被同時執行。 Servlet能夠經過維持一個各自獨立的Servlet實例池,或者經過只讓Servlet的service中只有一個線程的方法來實現這個保證。
2.8 GenericServlet類 public abstract class GenericServlet implements Servlet,
ServletConfig, Serializable; 這個類的存在使得編寫Servlet更加方便。它提供了一個簡單的方案,這個方案用來執行有關Servlet生命週期的方法以及在初始化時對ServletConfig對象和ServletContext對象進行說明。 方法 一、destroy public void destroy(); 在這裏destroy方法不作任何其餘的工做。 二、getInitParameter public String getInitParameter(String name); 這是一個簡便的途徑,它將會調用ServletConfig對象的同名的方法。 三、getInitParameterNames public Enumeration getInitParameterNames(); 這是一個簡便的途徑,它將會調用ServletConfig對象的同名的方法。 四、getServletConfig public ServletConfig getServletConfig(); 返回一個經過這個類的init方法產生的ServletConfig對象的說明。 五、getServletContext public ServletContext getServletContext(); 這是一個簡便的途徑,它將會調用ServletConfig對象的同名的方法。 六、getServletInfo public String getServletInfo(); 返回一個反映Servlet版本的String。 七、init public void init() throws ServletException; public void init(ServletConfig config) throws ServletException; init(ServletConfig config)方法是一個對這個Servlet的生命週期進行初始化的簡便的途徑。 init()方法是用來讓你對GenericServlet類進行擴充的,使用這個方法時,你不須要存儲config對象,也不須要調用super.init(config)。 init(ServletConfig config)方法會存儲config對象而後調用init()。若是你重載了這個方法,你必須調用super.init(config),這樣GenericServlet類的其餘方法才能正常工做。 八、log public void log(String msg); public void log(String msg, Throwable cause); 經過Servlet content對象將Servlet的類名和給定的信息寫入log文件中。 九、service public abstract void service(ServletRequest request, ServletResponse response) throws ServletException, IOException; 這是一個抽象的方法,當你擴展這個類時,爲了執行網絡請求,你必須執行它。
2.9 ServletInputStream類 定義
public abstract class ServletInputStream extends InputStream 這個類定義了一個用來讀取客戶端的請求信息的輸入流。這是一個Servlet引擎提供的抽象類。一個Servlet經過使用ServletRequest接口得到了對一個ServletInputStream對象的說明。 這個類的子類必須提供一個從InputStream接口讀取有關信息的方法。 方法 一、readLine public int readLine(byte[] b, int off, int len) throws IOException; 從輸入流的指定的偏移量開始將指定長度的字節讀入到指定的數組中。若是該行全部請求的內容都已被讀取,這個讀取的過程將結束。若是是遇到了新的一行,新的一行的首個字符也將被讀入到數組中。
2.10 ServletOutputStream類 定義
public abstract class ServletOutputStream extends OutputStream 這是一個由Servlet引擎使用的抽象類。Servlet經過使用ServletResponse接口的使用得到了對一個這種類型的對象的說明。利用這個輸出流能夠將數據返回到客戶端。 這個類的子類必須提供一個向OutputStream接口寫入有關信息的方法。 在這個接口中,當一個刷新或關閉的方法被調用時。全部數據緩衝區的信息將會被髮送到客戶端,也就是說響應被提交了。請注意,關閉這種類型的對象時不必定要關閉隱含的socket流。 方法 一、print public void print(String s) throws IOException; public void print(boolean b) throws IOException; public void print(char c) throws IOException; public void print(int i) throws IOException; public void print(long l) throws IOException; public void print(float f) throws IOException; public void print(double d) throws IOException; 輸出變量到輸出流中 二、println public void println() throws IOException; public void println(String s) throws IOException; public void println(boolean b) throws IOException; public void println(char c) throws IOException; public void println(int i) throws IOException; public void println(long l) throws IOException; public void println(float f) throws IOException; public void println(double d) throws IOException; 輸出變量到輸出流中,並增長一個回車換行符
2.11 ServletException類 定義
public class ServletException extends Exception 當Servlet遇到問題時拋出的一個異常。 構造函數 public ServletException(); public ServletException(String message); public ServletException(String message, Throwable cause); public ServletException(Throwable cause); 構造一個新的ServletException,若是這個構造函數包括一個Throwable參數,這個Throwable對象將被做爲可能拋出這個異常的緣由。 方法 一、getRootCause public Throwable getRootCause(); 若是配置了拋出這個異常的緣由,這個方法將返回這個緣由,不然返回一個空值。
2.12 UnavailableException類 定義
public class UnavailableException extends ServletException 不論一個Servlet是永久地仍是臨時地無效,都會拋出這個異常。Servlet會記錄這個異常以及Servlet引擎所要採起的相應措施。 臨時的無效是指Servlet在某一時間因爲一個臨時的問題而不能處理請求。例如,在另外一個不一樣的應用層的服務(多是數據庫)沒法使用。這個問題可能會自行糾正或者須要採起其餘的糾正措施。 永久的無效是指除非管理員採起措施,這個Servlet將不能處理客戶端的請求。例如,這個Servlet配置信息丟失或Servlet的狀態被破壞。 Servlet 引擎能夠安全地處理包括永久無效在內的這兩種異常,可是對臨時無效的正常處理可使得Servlet引擎更健壯。特別的,這時對Servlet的請求只是 被阻止(或者是被延期)一段時間,這顯然要比在service本身從新啓動前徹底拒絕請求更爲科學。 構造函數 public UnavailableException(Servlet servlet, String message); public UnavailableException(int seconds, Servlet servlet, String message); 構造一個包含指定的描述信息的新的異常。若是這個構造函數有一個關於秒數的參數,這將給出Servlet發生臨時無效後,可以從新處理請求的估計時間。若是不包含這個參數,這意味着這個Servlet永久無效。 方法 一、getServlet public Servlet getServlet(); 返回報告無效的Servlet。這被Servlet引擎用來識別受到影響的Servlet。 二、getUnavailableSeconds public int getUnavailableSeconds(); 返回Servlet預期的無效時間,若是這個Servlet是永久無效,返回-1。 三、isPermanent public boolean isPermanent(); 若是這個Servlet永久無效,返回布爾值true,指示必須採起一些管理行動以使得這個Servlet可用。
軟件包:javax.servlet.http
所包含的接口:HttpServletRequest;HttpServletResponse;HttpSession;HttpSessionBindingListener;HttpSessionContext。 所包含的類:Cookie;HttpServlet;HttpSessionBindingEvent;HttpUtils。
2.13 HttpServletRequest接口 定義\
public interface HttpServletRequest extends ServletRequest; 用來處理一個對Servlet的HTTP格式的請求信息。 方法 一、getAuthType public String getAuthType(); 返回這個請求的身份驗證模式。 二、getCookies public Cookie[] getCookies(); 返回一個數組,該數組包含這個請求中當前的全部cookie。若是這個請求中沒有cookie,返回一個空數組。 三、getDateHeader public long getDateHeader(String name); 返回指定的請求頭域的值,這個值被轉換成一個反映自1970-1-1日(GMT)以來的精確到毫秒的長整數。 若是頭域不能轉換,拋出一個IllegalArgumentException。若是這個請求頭域不存在,這個方法返回-1。 四、getHeader public String getHeader(String name); 返回一個請求頭域的值。(譯者注:與上一個方法不一樣的是,該方法返回一個字符串) 若是這個請求頭域不存在,這個方法返回-1。 五、getHeaderNames public Enumeration getHeaderNames(); 該方法返回一個String對象的列表,該列表反映請求的全部頭域名。 有的引擎可能不容許經過這種方法訪問頭域,在這種狀況下,這個方法返回一個空的列表。 六、getIntHeader public int getIntHeader(String name); 返回指定的請求頭域的值,這個值被轉換成一個整數。 若是頭域不能轉換,拋出一個IllegalArgumentException。若是這個請求頭域不存在,這個方法返回-1。 七、getMethod public String getMethod(); 返回這個請求使用的HTTP方法(例如:GET、POST、PUT) 八、getPathInfo public String getPathInfo(); 這個方法返回在這個請求的URL的Servlet路徑以後的請求URL的額外的路徑信息。若是這個請求URL包括一個查詢字符串,在返回值內將不包括這個查詢字符串。這個路徑在返回以前必須通過URL解碼。若是在這個請求的URL的Servlet路徑以後沒有路徑信息。這個方法返回空值。 九、getPathTranslated public String getPathTranslated(); 這個方法得到這個請求的URL的Servlet路徑以後的額外的路徑信息,並將它轉換成一個真實的路徑。在進行轉換前,這個請求的URL必須通過URL解碼。若是在這個URL的Servlet路徑以後沒有附加路徑信息。這個方法返回空值。 十、getQueryString public String getQueryString(); 返回這個請求URL所包含的查詢字符串。一個查詢字串符在一個URL中由一個「?」引出。若是沒有查詢字符串,這個方法返回空值。 十一、getRemoteUser public String getRemoteUser 返回做了請求的用戶名,這個信息用來做HTTP用戶論證。 若是在請求中沒有用戶名信息,這個方法返回空值。 十二、getRequestedSessionId public String getRequestedSessionId(); 返回這個請求相應的session id。若是因爲某種緣由客戶端提供的session id是無效的,這個session id將與在當前session中的session id不一樣,與此同時,將創建一個新的session。 若是這個請求沒與一個session關聯,這個方法返回空值。 1三、getRequestURI public String getRequestURI(); 從HTTP請求的第一行返回請求的URL中定義被請求的資源的部分。若是有一個查詢字符串存在,這個查詢字符串將不包括在返回值當中。例如,一個請求經過 /catalog/books?id=1這樣的URL路徑訪問,這個方法將返回/catalog/books。這個方法的返回值包括了Servlet路徑 和路徑信息。 若是這個URL路徑中的的一部分通過了URL編碼,這個方法的返回值在返回以前必須通過解碼。 1四、getServletPath public String getServletPath(); 這個方法返回請求URL反映調用Servlet的部分。例如,一個Servlet被映射到/catalog/summer這個URL路徑,而一個請求使用了/catalog/summer/casual這樣的路徑。所謂的反映調用Servlet的部分就是指/catalog/summer。 若是這個Servlet不是經過路徑匹配來調用。這個方法將返回一個空值。 1五、getSession public HttpSession getSession(); public HttpSession getSession(boolean create); 返回與這個請求關聯的當前的有效的session。若是調用這個方法時沒帶參數,那麼在沒有session與這個請求關聯的狀況下,將會新建一個session。若是調用這個方法時帶入了一個布爾型的參數,只有當這個參數爲真時,session纔會被創建。 爲了確保session可以被徹底維持。Servlet開發者必須在響應被提交以前調用該方法。 若是帶入的參數爲假,並且沒有session與這個請求關聯。這個方法會返回空值。 1六、isRequestedSessionIdValid public boolean isRequestedSessionIdValid(); 這個方法檢查與此請求關聯的session當前是否是有效。若是當前請求中使用的session無效,它將不能經過getSession方法返回。 1七、isRequestedSessionIdFromCookie public boolean isRequestedSessionIdFromCookie(); 若是這個請求的session id是經過客戶端的一個cookie提供的,該方法返回真,不然返回假。 1八、isRequestedSessionIdFromURL public boolean isRequestedSessionIdFromURL(); 若是這個請求的session id是經過客戶端的URL的一部分提供的,該方法返回真,不然返回假。請注意此方法與isRequestedSessionIdFromUrl在URL的拼寫上不一樣。 如下方法將被取消\ 1九、isRequestedSessionIdFromUrl public boolean isRequestedSessionIdFromUrl(); 該方法被isRequestedSessionIdFromURL代替。
2.14 HttpServletResponse接口 定義\
public interface HttpServletResponse extends ServletResponse 描述一個返回到客戶端的HTTP迴應。這個接口容許Servlet程序員利用HTTP協議規定的頭信息。 成員變量 public static final int SC_CONTINUE = 100; public static final int SC_SWITCHING_PROTOCOLS = 101; public static final int SC_OK = 200; public static final int SC_CREATED = 201; public static final int SC_ACCEPTED = 202; public static final int SC_NON_AUTHORITATIVE_INFORMATION = 203; public static final int SC_NO_CONTENT = 204; public static final int SC_RESET_CONTENT = 205; public static final int SC_PARTIAL_CONTENT = 206; public static final int SC_MULTIPLE_CHOICES = 300; public static final int SC_MOVED_PERMANENTLY = 301; public static final int SC_MOVED_TEMPORARILY = 302; public static final int SC_SEE_OTHER = 303; public static final int SC_NOT_MODIFIED = 304; public static final int SC_USE_PROXY = 305; public static final int SC_BAD_REQUEST = 400; public static final int SC_UNAUTHORIZED = 401; public static final int SC_PAYMENT_REQUIRED = 402; public static final int SC_FORBIDDEN = 403; public static final int SC_NOT_FOUND = 404; public static final int SC_METHOD_NOT_ALLOWED = 405; public static final int SC_NOT_ACCEPTABLE = 406; public static final int SC_PROXY_AUTHENTICATION_REQUIRED = 407; public static final int SC_REQUEST_TIMEOUT = 408; public static final int SC_CONFLICT = 409; public static final int SC_GONE = 410; public static final int SC_LENGTH_REQUIRED = 411; public static final int SC_PRECONDITION_FAILED = 412; public static final int SC_REQUEST_ENTITY_TOO_LARGE = 413; public static final int SC_REQUEST_URI_TOO_LONG = 414; public static final int SC_UNSUPPORTED_MEDIA_TYPE = 415; public static final int SC_INTERNAL_SERVER_ERROR = 500; public static final int SC_NOT_IMPLEMENTED = 501; public static final int SC_BAD_GATEWAY = 502; public static final int SC_SERVICE_UNAVAILABLE = 503; public static final int SC_GATEWAY_TIMEOUT = 504; public static final int SC_HTTP_VERSION_NOT_SUPPORTED = 505; 以上HTTP產狀態碼是由HTTP/1.1定義的。 方法 一、addCookie public void addCookie(Cookie cookie); 在響應中增長一個指定的cookie。可屢次調用該方法以定義多個cookie。爲了設置適當的頭域,該方法應該在響應被提交以前調用。 二、containsHeader public boolean containsHeader(String name); 檢查是否設置了指定的響應頭。 三、encodeRedirectURL public String encodeRedirectURL(String url); 對sendRedirect方法使用的指定URL進行編碼。若是不須要編碼,就直接返回這個URL。之因此提供這個附加的編碼方法,是由於在 redirect的狀況下,決定是否對URL進行編碼的規則和通常狀況有所不一樣。所給的URL必須是一個絕對URL。相對URL不能被接收,會拋出一個 IllegalArgumentException。 全部提供給sendRedirect方法的URL都應經過這個方法運行,這樣才能確保會話跟蹤可以在全部瀏覽器中正常運行。 四、encodeURL public String encodeURL(String url); 對包含session ID的URL進行編碼。若是不須要編碼,就直接返回這個URL。Servlet引擎必須提供URL編碼方法,由於在有些狀況下,咱們將不得不重寫URL,例如,在響應對應的請求中包含一個有效的session,可是這個session不能被非URL的(例如cookie)的手段來維 持。 全部提供給Servlet的URL都應經過這個方法運行,這樣才能確保會話跟蹤可以在全部瀏覽器中正常運行。 五、sendError public void sendError(int statusCode) throws IOException; public void sendError(int statusCode, String message) throws IOException; 用給定的狀態碼發給客戶端一個錯誤響應。若是提供了一個message參數,這將做爲響應體的一部分被髮出,不然,服務器會返回錯誤代碼所對應的標準信息。 調用這個方法後,響應當即被提交。在調用這個方法後,Servlet不會再有更多的輸出。 六、sendRedirect public void sendRedirect(String location) throws IOException; 使用給定的路徑,給客戶端發出一個臨時轉向的響應(SC_MOVED_TEMPORARILY)。給定的路徑必須是絕對URL。相對URL將不能被接收,會拋出一個IllegalArgumentException。 這個方法必須在響應被提交以前調用。調用這個方法後,響應當即被提交。在調用這個方法後,Servlet不會再有更多的輸出。 七、setDateHeader public void setDateHeader(String name, long date); 用一個給定的名稱和日期值設置響應頭,這裏的日期值應該是反映自1970-1-1日(GMT)以來的精確到毫秒的長整數。若是響應頭已經被設置,新的值將覆蓋當前的值。 八、setHeader public void setHeader(String name, String value); 用一個給定的名稱和域設置響應頭。若是響應頭已經被設置,新的值將覆蓋當前的值。 九、setIntHeader public void setIntHeader(String name, int value); 用一個給定的名稱和整形值設置響應頭。若是響應頭已經被設置,新的值將覆蓋當前的值。 十、setStatus public void setStatus(int statusCode); 這個方法設置了響應的狀態碼,若是狀態碼已經被設置,新的值將覆蓋當前的值。 如下的幾個方法將被取消\ 十一、encodeRedirectUrl public String encodeRedirectUrl(String url); 該方法被encodeRedirectURL取代。 十二、encodeUrl public String encodeUrl(String url); 該方法被encodeURL取代。 1三、setStatus public void setStatus(int statusCode, String message); 這個方法設置了響應的狀態碼,若是狀態碼已經被設置,新的值將覆蓋當前的值。若是提供了一個message,它也將會被做爲響應體的一部分被髮送。
2.15 HttpSession接口 定義\
public interface HttpSession 這個接口被Servlet引擎用來實如今HTTP客戶端和HTTP會話二者的關聯。這種關聯可能在多外鏈接和請求中持續一段給定的時間。session用來在無狀態的HTTP協議下越過多個請求頁面來維持狀態和識別用戶。 一個session能夠經過cookie或重寫URL來維持。 方法 一、getCreationTime public long getCreationTime(); 返回創建session的時間,這個時間表示爲自1970-1-1日(GMT)以來的毫秒數。 二、getId public String getId(); 返回分配給這個session的標識符。一個HTTP session的標識符是一個由服務器來創建和維持的惟一的字符串。 三、getLastAccessedTime public long getLastAccessedTime(); 返回客戶端最後一次發出與這個session有關的請求的時間,若是這個session是新創建的,返回-1。這個時間表示爲自1970-1-1日(GMT)以來的毫秒數。 四、getMaxInactiveInterval public int getMaxInactiveInterval(); 返加一個秒數,這個秒數表示客戶端在不發出請求時,session被Servlet引擎維持的最長時間。在這個時間以後,Servlet引擎可能被Servlet引擎終止。若是這個session不會被終止,這個方法返回-1。 當session無效後再調用這個方法會拋出一個IllegalStateException。 五、getValue public Object getValue(String name); 返回一個以給定的名字綁定到session上的對象。若是不存在這樣的綁定,返回空值。 當session無效後再調用這個方法會拋出一個IllegalStateException。 六、getValueNames public String[] getValueNames(); 以一個數組返回綁定到session上的全部數據的名稱。 當session無效後再調用這個方法會拋出一個IllegalStateException。 七、invalidate public void invalidate(); 這個方法會終止這個session。全部綁定在這個session上的數據都會被清除。並經過HttpSessionBindingListener接口的valueUnbound方法發出通告。 八、isNew public boolean isNew(); 返回一個布爾值以判斷這個session是否是新的。若是一個session已經被服務器創建可是尚未收到相應的客戶端的請求,這個session將被 認爲是新的。這意味着,這個客戶端尚未加入會話或沒有被會話公認。在他發出下一個請求時還不能返回適當的session認證信息。 當session無效後再調用這個方法會拋出一個IllegalStateException。 九、putValue public void putValue(String name, Object value); 以給定的名字,綁定給定的對象到session中。已存在的同名的綁定會被重置。這時會調用HttpSessionBindingListener接口的valueBound方法。 當session無效後再調用這個方法會拋出一個IllegalStateException。 十、removeValue public void removeValue(String name); 取消給定名字的對象在session上的綁定。若是未找到給定名字的綁定的對象,這個方法什麼出不作。這時會調用HttpSessionBindingListener接口的valueUnbound方法。 當session無效後再調用這個方法會拋出一個IllegalStateException。 十一、setMaxInactiveInterval public int setMaxInactiveInterval(int interval); 設置一個秒數,這個秒數表示客戶端在不發出請求時,session被Servlet引擎維持的最長時間。 如下這個方法將被取消\ 十二、getSessionContext public HttpSessionContext getSessionContext(); 返回session在其中得以保持的環境變量。這個方法和其餘全部HttpSessionContext的方法同樣被取消了。
2.16 HttpSessionBindingListener接口 定義\
public interface HttpSessionBindingListener 這個對象被加入到HTTP的session中,執行這個接口會通告有沒有什麼對象被綁定到這個HTTP session中或被從這個HTTP session中取消綁定。 方法 一、valueBound public void valueBound(HttpSessionBindingEvent event); 當一個對象被綁定到session中,調用此方法。HttpSession.putValue方法被調用時,Servlet引擎應該調用此方法。 二、valueUnbound public void valueUnbound(HttpSessionBindingEvent event); 當一個對象被從session中取消綁定,調用此方法。HttpSession.removeValue方法被調用時,Servlet引擎應該調用此方法。
2.17 HttpSessionContext接口 定義\
此接口將被取消\ public interface HttpSessionContext 這個對象是與一組HTTP session關聯的單一的實體。 這個接口因爲安全的緣由被取消,它出如今目前的版本中僅僅是爲了兼容性的緣由。這個接口的方法將模擬之前的版本的定義返回相應的值。 方法 一、getSession public HttpSession getSession(String sessionId); 當初用來返回與這個session id相關的session。如今返回空值。 二、getIds public Enumeration getIds(); 當初用來返回這個環境下全部session id的列表。如今返回空的列表。
2.18 Cookie類 定義\
public class Cookie implements Cloneable 這個類描述了一個cookie,有關cookie的定義你能夠參照Netscape Communications Corporation的說明,也能夠參照RFC 2109。 構造函數 public Cookie(String name, String value); 用一個name-value對定義一個cookie。這個name必須能被HTTP/1.1所接受。 以字符$開頭的name被RFC 2109保留。 給定的name若是不能被HTTP/1.1所接受,該方法拋出一個IllegalArgumentException。 方法 一、getComment public String getComment(); 返回描述這個cookie目的的說明,若是未定義這個說明,返回空值。 二、getDomain public String getDomain(); 返回這個cookie能夠出現的區域,若是未定義區域,返回空值。 三、getMaxAge public int getMaxAge(); 這個方法返回這個cookie指定的最長存活時期。若是未定義這個最長存活時期,該方法返回-1。 四、getName public String getName(); 該方法返回cookie名。 五、getPath public String getPath(); 返回這個cookie有效的全部URL路徑的前綴,若是未定義,返回空值。 六、getSecure public boolean getSecure(); 若是這個cookie只經過安全通道傳輸返回真,不然返回假。 七、getValue public String getValue(); 該方法返回cookie的值。 八、getVersion public int getVersion(); 返回cookie的版本。版本1由RFC 2109解釋。版本0由Netscape Communications Corporation的說明解釋。新構造的cookie默認使用版本0。 九、setComment public void setComment(String purpose); 若是一個用戶將這個cookie提交給另外一個用戶,必須經過這個說明描述這個cookie的目的。版本0不支持這個屬性。 十、setDomain public void setDomain(String pattern); 這個方法設置cookie的有效域的屬性。這個屬性指定了cookie能夠出現的區域。一個有效域以一個點開頭(.foo.com),這意味着在指定的域名解析系統的區域中(多是www.foo.com但不是a.b.foo.com)的主機能夠看到這個cookie。默認狀況是,cookie只能返回保 存它的主機。 十一、setMaxAge public void setMaxAge(int expiry); 這個方法設定這個cookie的最長存活時期。在該存活時期以後,cookie會被終目。負數表示這個cookie不會生效,0將從客戶端刪除這個cookie。 十二、setPath public void setPath(String uri); 這個方法設置cookie的路徑屬性。客戶端只能向以這個給定的路徑String開頭的路徑返回cookie。 1三、setSecure public void setSecure(boolean flag); 指出這個cookie只能經過安全通道(例如HTTPS)發送。只有當產生這個cookie的服務器使用安全協議發送這個cookie值時才能這樣設置。 1四、setValue public void setValue(String newValue); 設置這個cookie的值,對於二進制數據採用BASE64編碼。 版本0不能使用空格、{}、()、=、,、「」、/、?、@、:以及;。 1五、setVersion public void setVersion(int v); 設置cookie的版本號
2.19 HttpServlet類
定義\
public class HttpServlet extends GenericServlet implements Serializable 這是一個抽象類,用來簡化HTTP Servlet寫做的過程。它是GenericServlet類的擴充,提供了一個處理HTTP協議的框架。 在這個類中的service方法支持例如GET、POST這樣的標準的HTTP方法。這一支持過程是經過分配他們到適當的方法(例如doGet、doPost)來實現的。 方法 一、doDelete protected void doDelete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException; 被這個類的service方法調用,用來處理一個HTTP DELETE操做。這個操做容許客戶端請求從服務器上刪除URL。這一操做可能有負面影響,對此用戶就負起責任。 這一方法的默認執行結果是返回一個HTTP BAD_REQUEST錯誤。當你要處理DELETE請求時,你必須重載這一方法。 二、doGet protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException; 被這個類的service方法調用,用來處理一個HTTP GET操做。這個操做容許客戶端簡單地從一個HTTP服務器「得到」資源。對這個方法的重載將自動地支持HEAD方法。 GET操做應該是安全並且沒有負面影響的。這個操做也應該能夠安全地重複。 這一方法的默認執行結果是返回一個HTTP BAD_REQUEST錯誤。 三、doHead protected void doHead(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException; 被這個類的service方法調用,用來處理一個HTTP HEAD操做。默認的狀況是,這個操做會按照一個無條件的GET方法來執行,該操做不向客戶端返回任何數據,而僅僅是返回包含內容長度的頭信息。 與GET操做同樣,這個操做應該是安全並且沒有負面影響的。這個操做也應該能夠安全地重複。 這個方法的默認執行結果是自動處理HTTP HEAD操做,這個方法不須要被一個子類執行。 四、doOptions protected void doOptions(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException; 被這個類的service方法調用,用來處理一個HTTP OPTION操做。這個操做自動地決定支持哪種HTTP方法。例如,一個Servlet寫了一個HttpServlet的子類並重載了doGet方法,doOption會返回下面的頭: Allow: GET,HEAD,TRACE,OPTIONS 你通常不須要重載這個方法。 五、doPost protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException; 被這個類的service方法調用,用來處理一個HTTP POST操做。這個操做包含請求體的數據,Servlet應該按照他行事。 這個操做可能有負面影響。例如更新存儲的數據或在線購物。 這一方法的默認執行結果是返回一個HTTP BAD_REQUEST錯誤。當你要處理POST操做時,你必須在HttpServlet的子類中重載這一方法。 六、doPut protected void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException; 被這個類的service方法調用,用來處理一個HTTP PUT操做。這個操做相似於經過FTP發送文件。 這個操做可能有負面影響。例如更新存儲的數據或在線購物。 這一方法的默認執行結果是返回一個HTTP BAD_REQUEST錯誤。當你要處理PUT操做時,你必須在HttpServlet的子類中重載這一方法。 七、doTrace protected void doTrace(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException; 被這個類的service方法調用,用來處理一個HTTP TRACE操做。這個操做的默認執行結果是產生一個響應,這個響應包含一個反映trace請求中發送的全部頭域的信息。 當你開發Servlet時,在多數狀況下你須要重載這個方法。 八、getLastModified protected long getLastModified(HttpServletRequest request); 返回這個請求實體的最後修改時間。爲了支持GET操做,你必須重載這一方法,以精確地反映最後修改的時間。這將有助於瀏覽器和代理服務器減小裝載服務器和網絡資源,從而更加有效地工做。返回的數值是自1970-1-1日(GMT)以來的毫秒數。
默認的執行結果是返回一個負數,這標誌着最後修改時間未知,它也不能被一個有條件的GET操做使用。
九、service protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException; public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException; 這是一個Servlet的HTTP-specific方案,它分配請求到這個類的支持這個請求的其餘方法。 當你開發Servlet時,在多數狀況下你沒必要重載這個方法。
2.20 HttpSessionBindingEvent類 定義\
public class HttpSessionBindingEvent extends EventObject 這個事件是在監聽到HttpSession發生綁定和取消綁定的狀況時連通HttpSessionBindingListener的。這多是一個session被終止或被認定無效的結果。 事件源是HttpSession.putValue或HttpSession.removeValue。 構造函數 public HttpSessionBindingEvent(HttpSession session, String name); 經過引發這個事件的Session和發生綁定或取消綁定的對象名構造一個新的HttpSessionBindingEvent。 方法 一、getName public String getName(); 返回發生綁定和取消綁定的對象的名字。 二、getSession public HttpSession getSession(); 返回發生綁定和取消綁定的session的名字。
2.21 HttpUtils類 定義\
public class HttpUtils 收集HTTP Servlet使用的靜態的有效的方法。 方法 一、getRequestURL public static StringBuffer getRequestURL(HttpServletRequest request); 在服務器上重建客戶端用來創建請求的URL。這個方法反映了不一樣的協議(例如http和https)和端口,但不包含查詢字符串。 這個方法返回一個StringBuffer而不是一個String,這樣URL能夠被Servlet開發者有效地修改。 二、parsePostData public static Hashtable parsePostData(int len, ServletInputstream in); 解析一個包含MIME類型application/x-www-form-urlencoded的數據的流,並建立一個具備關鍵值-數據對的 hash table。這裏的關鍵值是字符串,數據是該字符串所對應的值的列表。一個關鍵值能夠在POST的數據中出現一次或屢次。這個關鍵值每出現一次,它的相應的值就被加入到hash table中的字符串所對應的值的列表中。 從POST數據讀出的數據將通過URL解碼,+將被轉換爲空格以十六進制傳送的數據(例如%xx)將被轉換成字符。 當POST數據無效時,該方法拋出一個IllegalArgumentException。 三、parseQueryString public static Hashtable parseQueryString(String s); 解析一個查詢字符串,並建立一個具備關鍵值-數據對的hash table。這裏的數據是該字符串所對應的值的列表。一個關鍵值能夠出現一次或屢次。這個關鍵值每出現一次,它的相應的值就被加入到hash table中的字符串所對應的值的列表中。 從查詢字符串讀出的數據將通過URL解碼,+將被轉換爲空格以十六進制傳送的數據(例如%xx)將被轉換成字符。 當查詢字符串無效時,該方法拋出一個IllegalArgumentException。
術語表
bytecode
字節碼:由Java編譯器和Java解釋程序生成的機器代碼。
cookie
由Web服務器創建的數據,該數據存儲在用戶的計算機上,提供了一個Web站點跟蹤用戶的參數並存儲在用戶本身硬盤上的方法。
HTTP
超文本傳輸協議。一個請求響應協議用來鏈接WWW服務器向客戶端瀏覽器傳輸HTML頁面。
輸入流對象
一個對象,由ServletInputStream類定義,被Servlet用來從客戶端讀取請求。
映射
由Servlet實例和Servlet返回數據的URL組成的一對,例如,HelloServlet和/hello/index.html。
輸出流對象
一個對象,由ServletOutputStream class類定義,被Servlet用來向客戶端返回數據。
request dispatcher object
由RequestDispatcher接口定義的一個對象,用來從客戶端接收請求,並將其發送到Web服務器上可用的其餘資源(例如Servlet、CGI、HTML文件或JSP文件)。
sandboxed servlet
在一個安全性約束下運行的Servlet。
servlet
一個小的,具備平臺無關性的,沒有圖形用戶界面的Java程序。它能夠在許多方面擴充Web服務的功能。
servlet configuration object
ServletConfig接口定義的一個對象,用來配置一個Servlet。
servlet context object
ServletContext接口定義的一個對象。給予Servlet有關Servlet引擎的信息。
servlet引擎
由Web服務器提供商製做的一個環境,能夠容許Servlet在具體的Web服務器上運行。
servlet請求對象
由ServletRequest接口定義的一個對象,容許Servlet得到用關客戶端請求的數據。
servlet response object
由ServletResponse接口定義的一個對象,容許Servlet做出響應。
servlet runner
Java Servlet Developer’s Kit (JSDK)中的sun.servlet.http.HttpServer過程,它使得Servlet得以運行。
會話跟蹤
在一個Web應用程序中,識別一個從同一個客戶端發出的連續的惟一的請求的能力。
SSL
加密套接字協議層。一個安全協議,用來在Iternet上的客戶端瀏覽器和服務器交換密鑰和加密數據。
URI
統一資源標識。定義一個Internet地址,它是一個URL的超集。
URL
統一資源路徑。這個地址定義了到達一個WWW上的文件的路線,一般由協議前綴、域名、目錄名和文件名組成。
**