Java Servlet API中文说明文档
Java Servlet API中文說明文檔
目 錄
1.... Servet資料
1.1????? 緒言
1.2????? 誰需要讀這份文檔
1.3????? Java Servlet API的組成
1.4????? 有關(guān)規(guī)范
1.5????? 有關(guān)Java Servlets
1.6????? Java Servlet概論
1.7????? Servlet的生命周期
1.8????? Servlet的解析和載入
1.9????? Servlet的初始化
1.10??? Servlet處理請求
1.11 ? ?多線程和映射
1.12??? Servlet的卸載
1.13??? Servlet映射技術(shù)
1.14 ? ?通過類名調(diào)用Servlet
1.15??? Servlet環(huán)境
1.16??? HTTP會話
1.17 ? ?建立Session
2.... API介紹
2.1????? Request Dispatcher接口
2.2????? Servlet接口
2.3????? ServletConfig接口
2.4????? ServletContext接口
2.5????? ServletRequest接口
2.6????? ServletResponse接口
2.7????? SingleThreadModel接口
2.8????? GenericServlet類
2.9????? ServletInputStream類
2.10??? ServletOutputStream類
2.11??? ServletException類
2.12??? UnavailableException類
2.13??? HttpServletRequest接口
2.14??? HttpServletResponse接口
2.15??? HttpSession接口
2.16??? HttpSessionBindingListener接口
2.17??? HttpSessionContext接口
2.18??? Cookie類
2.19??? HttpServlet類
2.20??? HttpSessionBindingEvent類
2.21??? HttpUtils類
?
1 ?Servet資料
1.1??? 緒言
??? 這是一份關(guān)于2.1版Java Servlet API的說明文檔,作為對這本文檔的補(bǔ)充,你可以到http://java.sun.com/products/servlet/index.html下面下載Javadoc格式的文檔。
1.2??? 誰需要讀這份文檔
??? 這份文檔描述了Java Servlet API的最新版本2.1版。所以,這本書對于Servlet的開發(fā)者及servlet引擎的開發(fā)者同樣適用。
1.3??? Java Servlet API的組成
??? Java Servlet API由兩個軟件包組成:一個是對應(yīng)HTTP的軟件包,另一個是不對應(yīng)HTTP的通用的軟件包。這兩個軟件包的同時存在使得Java Servlet API能夠適應(yīng)將來的其他請求-響應(yīng)的協(xié)議。
??? 這份文檔以及剛才提及的Javadoc格式的文檔都描述了這兩個軟件包,Javadoc格式的文檔還描述了你應(yīng)該如何使用這兩個軟件包中的所有方法。
1.4??? 有關(guān)規(guī)范
??? 你也許對下面的這些Internet規(guī)范感興趣,這些規(guī)范將直接影響到Servlet API的發(fā)展和執(zhí)行。
你可以從http: //info.internet.isi.edu/7c/in-notes/rfc/.cache 找到下面提到的所有這些RFC規(guī)范。
?????? RFC 1738 統(tǒng)一資源定位器(URL)
?????? RFC 1808 相關(guān)統(tǒng)一資源定位器
?????? RFC 1945 超文本傳輸協(xié)議--HTTP/1.0
?????? RFC 2045 多用途Internet郵件擴(kuò)展(多用途網(wǎng)際郵件擴(kuò)充協(xié)議(MIME))第一部分:Internet信息體格式
?????? RFC 2046 多用途Internet郵件擴(kuò)展(多用途網(wǎng)際郵件擴(kuò)充協(xié)議(MIME))第二部分:媒體類型
?????? RFC 2047 多用途網(wǎng)際郵件擴(kuò)充協(xié)議(MIME)(多用途Internet郵件擴(kuò)展)第三部分:信息標(biāo)題擴(kuò)展用于非ASCII文本
?????? RFC 2048 多用途Internet郵件擴(kuò)展(多用途網(wǎng)際郵件擴(kuò)充協(xié)議(MIME))第四部分: 注冊步驟
?????? RFC 2049 多用途Internet郵件擴(kuò)展(多用途網(wǎng)際郵件擴(kuò)充協(xié)議(MIME))第五部分:一致性標(biāo)準(zhǔn)和例子
?????? RFC 2068 超文本傳輸協(xié)議 -- HTTP/1.1
?????? RFC 2069 一個擴(kuò)展HTTP:摘要訪問鑒定
?????? RFC 2109 HTTP狀態(tài)管理機(jī)制
?????? RFC 2145 HTTP 版本號的使用和解釋
?????? RFC 2324 超文本Coffee Pot控制協(xié)議 (HTCPCP/1.0)
?????? 萬維網(wǎng)協(xié)會(http://www.w3.org)管理著這些協(xié)議的規(guī)范和執(zhí)行。
1.5??? 有關(guān)Java Servlets
??? JavaTM servlets 是一個不受平臺約束的Java小程序,它可以被用來通過多種方法擴(kuò)充一個Web服務(wù)器的功能。你可以把Servlet理解成Server上的 applets,它被編譯成字節(jié)碼,這樣它就可以被動態(tài)地載入并用效地擴(kuò)展主機(jī)的處理能力。
??? Servlet與applets不同的地方是,它不運(yùn)行在Web瀏覽器或其他圖形化的用戶界面上。Servlet通過servlet引擎運(yùn)行在Web服務(wù)器中,以執(zhí)行請求和響應(yīng),請求、響應(yīng)的典型范例是HTTP協(xié)議。
??? 一個客戶端程序,可以是一個Web瀏覽器,或者是非其他的可以連接上Internet的程序,它會訪問Web服務(wù)器并發(fā)出請求。這個請求被運(yùn)行在Web服 務(wù)器上的Servlet引擎處理,并返回響應(yīng)到Servlet。Servlet通過HTTP將這個響應(yīng)轉(zhuǎn)發(fā)到客戶端。
在功能上,Servlet與CGI、NSAPI有點(diǎn)類似,但是,與他們不同的是:Servlet具有平臺無關(guān)性。
1.6??? Java Servlet概論
????? ?Servlet與其他普通的server擴(kuò)展機(jī)制有以下進(jìn)步:
?????? 因?yàn)樗捎昧瞬煌倪M(jìn)程處理模式,所以它比CGI更快。
?????? 它使用了許多Web服務(wù)器都支持的標(biāo)準(zhǔn)的API。
?????? 它繼承了Java的所有優(yōu)勢,包括易升級以及平臺無關(guān)性。
?????? 它可以調(diào)用Java所提供的大量的API的功能模塊。
?????? 這份文檔說明了Java Servlet API的類和接口的方法。有關(guān)更多的信息,請參看下面的API說明。
1.7??? Servlet的生命周期
??? 一個Java servlet具有一個生命周期,這個生命周期定義了一個Servlet如何被載入并被初始化,如何接收請求并作出對請求的響應(yīng),如何被從服務(wù)中清除。Servlet的生命周期被javax.servlet.Servlet這個接口所定義。
??? 所有的Java Servlet都會直接地或間接地執(zhí)行javax.servlet.Servlet接口,這樣它才能在一個Servlet引擎中運(yùn)行。 Servlet引擎是Web 服務(wù)器按照J(rèn)ava Servlet API定制的擴(kuò)展。Servlet引擎提供網(wǎng)絡(luò)服務(wù),能夠理解MIME請求,并提供一 個運(yùn)行Servlet的容器。
??? javax.servlet.Servlet接口定義了在Servlet的生命周期中特定時間以及特定順序被調(diào)用的方法。
?
1.8??? Servlet的解析和載入
??? Servlet引擎解析并載入一個Servlet,這個過程可以發(fā)生在引擎啟動時,需要一個Servlet去響應(yīng)請求時,以及在此之間的任何時候。
??? Servlet引擎利用Java類載入工具載入一個Servlet,Servlet引擎可以從一個本地的文件系統(tǒng)、一個遠(yuǎn)程的文件系統(tǒng)以及網(wǎng)絡(luò)載入Servlet。
?
1.9??? Servlet的初始化
??? Servlet引擎載入Servlet后,Servlet引擎必須對Servlet進(jìn)行初始化,在這一過程中,你可以讀取一些固定存儲的數(shù)據(jù)、初始化JDBC的連接以及建立與其他資源的連接。
??? 在初始化過程中,javax.servlet.Servlet接口的init()方法提供了Servlet的初始化信息。這樣,Servlet可以對自己進(jìn)行配置。
?????? init()方法獲得了一個Servlet配置對象(ServletConfig)。這個對象在Servlet引擎中執(zhí)行,并允許Servlet通過它獲處相關(guān)參數(shù)。這個對象使得Servlet能夠訪問ServletContext對象。
?
1.10 ? ? ? Servlet處理請求
??? Servlet被初始化之后,它已經(jīng)可以處理來自客戶端的請求,每一個來自客戶端的請求都被描述成一個ServletRequest對象,Servlet的響應(yīng)被描述成一個ServletResponse對象。
??? 當(dāng)客戶端發(fā)出請求時,Servlet引擎?zhèn)鬟f給Servlet一個ServletRequest對象和一個ServletResponse對象,這兩個對象作為參數(shù)傳遞到service()方法中。
??? Servlet 也可以執(zhí)行ServletRequest接口和ServletResponse接口。ServletRequest接口使得Servlet有權(quán)使用客戶端發(fā)出的請求。Servlet可以通過ServletInputStream對象讀取請求信息。
??? ServletResponse接口允許Servlet建立響應(yīng)頭和狀態(tài)代碼。通過執(zhí)行這個接口,Servlet有權(quán)使用ServletOutputStream類來向客戶端返回數(shù)據(jù)。
?
1.11?????? 多線程和映射
??? 在多線程的環(huán)境下,Servlet必須能處理許多同時發(fā)生的請求。例外的情況是這個Servlet執(zhí)行了SingleThreadModel接口,如果是那樣的話,Servlet只能同時處理一個請求。
??? Servlet依照Servlet引擎的映射來響應(yīng)客戶端的請求。一個映射對包括一個Servlet實(shí)例以及一個Servlet返回數(shù)據(jù)的URL,例如:HelloServlet with /hello/index.html。
??? 然而,一個映射可能是由一個URL和許多Servlet實(shí)例組成,例如:一個分布式的Servlet引擎可能運(yùn)行在不止一個的服務(wù)器中,這樣的話,每一個服務(wù)器中都可能有一個Servlet實(shí)例,以平衡進(jìn)程的載入。作為一個Servlet的開發(fā)者,你不能假定一個Servlet只有一個實(shí)例。
?
1.12?????? Servlet的卸載
??? Servlet引擎并不必需保證一個Servlet在任何時候或在服務(wù)開啟的任何時候都被載入。Servlet引擎可以自由的在任何時候使用或清除一個Servlet。因此,我們不能依賴一個類或?qū)嵗齺泶鎯χ匾男畔ⅰ?/p>
??? 當(dāng)Servlet引擎決定卸載一個Servlet時(例如,如果這個引擎被關(guān)閉或者需要讓資源),這個引擎必須允許Servlet釋放正在使用的資源并存儲有關(guān)資料。為了完成以上工作,引擎會調(diào)用Servlet的destroy()方法。
??? 在卸載一個Servlet之前,Servlet引擎必須等待所有的service()方法完成或超時結(jié)束(Servlet引擎會對超時作出定義)。當(dāng)一個 Servlet被卸載時,引擎將不能給Servlet發(fā)送任何請求。引擎必須釋放Servlet并完成無用存儲單元的收集
?
1.13?????? Servlet映射技術(shù)
??? 作為一個Servlet引擎的開發(fā)者,你必須對于如何映射客戶端的請求到Servlet有大量的適應(yīng)性。這份說明文檔不規(guī)定映射如何發(fā)生。但是,你必須能夠自由地運(yùn)用下面的所有技術(shù):
?
?????? 映射一個Servlet到一個URL
?????? 例如,你可以指定一個特殊的Servlet它僅被來自/feedback/index.html的請求調(diào)用。
?
?????? 映射一個Servlet到以一個指定的目錄名開始的所有URL
?????? 例如,你可以映射一個Servlet到/catalog,這樣來自/catalog/、 /catalog/garden和 /catalog/housewares/index.html的請求都會被映射到這個Servlet。但是來自/catalogtwo 或 /catalog.html的請求沒被映射。
?
?????? 映射一個Servlet到所有以一個特定的字段結(jié)尾的所有URL
?????? 例如,你可以映射一個來自于所有以in.thtml結(jié)尾的請求到一個特定的Servlet。
?
?????? 映射一個Servlet到一個特殊的URL /servlet/servlet_name。
?????? 例如,如果你建立了一個名叫l(wèi)istattributes的Servlet,你可以通過使用/servlet/listattributes來訪問這個Servlet。
?
1.14?????? 通過類名調(diào)用Servlet
?????? 例如,如果Servlet引擎接收了來自/servlet/com.foo.servlet.MailServlet的請求,Servlet引擎會載入這 個com.foo.servlet.MailServlet類,建立實(shí)例,并通過這個Servlet來處理請求。
?
1.15?????? Servlet環(huán)境
??? ServletContext 接口定義了一個Servlet環(huán)境對象,這個對象定義了一個在Servlet引擎上的Servlet的視圖。通過使用這個對象,Servlet可以記錄事 件、得到資源并得到來自Servlet引擎的類(例如RequestDispatcher對象)。一個Servlet只能運(yùn)行在一個Servlet環(huán)境 中,但是不同的Servlet可以在Servlet引擎上有不同的視圖。
?????? 如果Servlet引擎支持虛擬主機(jī),每個虛擬主機(jī)有一個Servlet環(huán)境。一個Servlet環(huán)境不能在虛擬主機(jī)之間共享。
?????? Servlet引擎能夠允許一個Servlet環(huán)境有它自己的活動范圍。
??? ???例如,一個Servlet環(huán)境是屬于bank應(yīng)用的,它將被映射到/bank目錄下。在這種情況下,一個對getContext方法的調(diào)用會返回/bank的Servlet環(huán)境。
?
1.16?????? HTTP會話
??? HTTP是一個沒有狀態(tài)的協(xié)議。要建立一個有效的Web服務(wù)應(yīng)用,你必須能夠識別一個連續(xù)的來自遠(yuǎn)端的客戶機(jī)的唯一的請求。隨著時間的過去,發(fā)展了許多會話跟蹤的技術(shù),但是使用起來都比較麻煩。
?????? Java Servlet API提供了一個簡單的接口,通過這個接口,Servlet引擎可以有效地跟蹤用戶的會話。
?
1.17?????? 建立Session
??? 因?yàn)镠TTP是一個請求-響應(yīng)協(xié)議,一個會話在客戶機(jī)加入之前會被認(rèn)為是一個新的會話。加入的意思是返回會話跟蹤信息到服務(wù)器中,指出會話已被建立。在客戶端加入之前,我們不能判斷下一個客戶端請求是目前會話的一部分。
在下面的情況下,Session會被認(rèn)為是新的Session。客戶端的Session在此之前還不知道客戶端選擇不加入Session,例如,如果客戶端拒絕接收來自服務(wù)器的cookie作 為一個Servlet的開發(fā)者,你必須決定你的Web應(yīng)用是否處理客戶機(jī)不加入或不能加入Session。服務(wù)器會在Web服務(wù)器或Servlet規(guī)定的時間內(nèi)維持一個Session對象。當(dāng)Session終止時,服務(wù)器會釋放Session對象以及所有綁定在Session上的對象。
綁定對象到Session中
??? 如果有助于你處理應(yīng)用的數(shù)據(jù)需求,你也許需要綁定對象到Session中,你可以通過一個唯一的名字綁定任何的對象到Session中,這時,你需要使用 HttpSession對象。任何綁定到Session上的對象都可以被處理同一會話的Servlet調(diào)用。
??? 有些對象可能需要你知道什么時候會被放置到Session中或從Session中移開。你可以通過使用HttpSessionBindingListener接口獲得這些信息。當(dāng)你的應(yīng)用存儲數(shù)據(jù)到Session中,或從Session中清除數(shù)據(jù),Servlet都會通過HttpSessionBindingListener檢杳什么類被綁定或被取消綁定。這個接口的方法會通報被綁定或被取消綁定的對象。
?
2 ?API介紹
API對象的說明
??? 這一部分包含了對Java Servlet API的全部類和接口的詳細(xì)說明。這個說明與Javadoc API差不多,但是這份文檔提供了更多的信息。
API包含了兩個軟件包,十二個接口和九個類。
軟件包:javax.servlet
?所包含的接口:RequestDispatcher;Servlet;ServletConfig;ServletContext;ServletRequest;ServletResponse;SingleThreadModel。
?所包含的類:GenericServlet;ServletInputStream;ServletOutputStream;ServletException;UnavailableException。
軟件包:javax.servlet.http
?????? 所包含的接口:HttpServletRequest;HttpServletResponse;HttpSession;HttpSessionBindingListener;HttpSessionContext。
?????? 所包含的類:Cookie;HttpServlet;HttpSessionBindingEvent;HttpUtils。
?
軟件包:javax.servlet
所包含的接口:RequestDispatcher;Servlet;ServletConfig;ServletContext;ServletRequest;ServletResponse;SingleThreadModel。
所包含的類:GenericServlet;ServletInputStream;ServletOutputStream;ServletException;UnavailableException。
2.1??? Request Dispatcher接口
?????? 定義:
?????? public interface RequestDispatcher;
?????? 定義一個對象,從客戶端接收請求,然后將它發(fā)給服務(wù)器的可用資源(例如Servlet、CGI、HTML文件、JSP文件)。Servlet引擎創(chuàng)建request dispatcher對象,用于封裝由一個特定的URL定義的服務(wù)器資源。
?????? 這個接口是專用于封裝Servlet的,但是一個Servlet引擎可以創(chuàng)建request dispatcher對象用于封裝任何類型的資源。
?????? request dispatcher對象是由Servlet引擎建立的,而不是由Servlet開發(fā)者建立的。
?????? 方法
?????? 1、forward
?????? public void forward(ServletRequest request, ServletReponse response)
???????????? throws ServletException, IOException;
?????? 被用來從這個Servlet向其它服務(wù)器資源傳遞請求。當(dāng)一個Servlet對響應(yīng)作了初步的處理,并要求其它的對象對此作出響應(yīng)時,可以使用這個方法。
?????? 當(dāng)request對象被傳遞到目標(biāo)對象時,請求的URL路徑和其他路徑參數(shù)會被調(diào)整為反映目標(biāo)對象的目標(biāo)URL路徑。
?????? 如果已經(jīng)通過響應(yīng)返回了一個ServletOutputStream對象或PrintWriter對象,這個方法將不能使用,否則,這個方法會拋出一個IllegalStateException。
?????? 2、include
?????? public void include(ServletRequest request, ServletResponse response)
???????????? throws ServletException, IOException
?????? 用來包括發(fā)送給其他服務(wù)器資源的響應(yīng)的內(nèi)容。本質(zhì)上來說,這個方法反映了服務(wù)器端的內(nèi)容。
?????? 請求對象傳到目標(biāo)對象后會反映調(diào)用請求的請求URL路徑和路徑信息。這個響應(yīng)對象只能調(diào)用這個Servlet的ServletOutputStream對象和PrintWriter對象。
?????? 一個調(diào)用include的Servlet不能設(shè)置頭域,如果這個Servlet調(diào)用了必須設(shè)置頭域的方法(例如cookie),這個方法將不能保證正常使用。作為一個Servlet開發(fā)者,你必須妥善地解決那些可能直接存儲頭域的方法。例如,即使你使用會話跟蹤,為了保證session的正常工作,你必須在一個調(diào)用include的Servlet之外開始你的session
?
2.2??? Servlet接口
?????? 定義
?????? public interface Servlet
?????? 這個接口定義了一個Servlet:一個在Web服務(wù)器上繼承了這個功能的Java類。
?????? 方法
?????? 1、init
?????? public void init(ServletConfig config) throws ServletException;
?????? Servlet引擎會在Servlet實(shí)例化之后,置入服務(wù)之前精確地調(diào)用init方法。在調(diào)用service方法之前,init方法必須成功退出。
?????? 如果init方法拋出一個ServletException,你不能將這個Servlet置入服務(wù)中,如果init方法在超時范圍內(nèi)沒完成,我們也可以假定這個Servlet是不具備功能的,也不能置入服務(wù)中。
?????? 2、service
?????? public void service(ServletRequest request, ServletResponse response)
???????????? throws ServletException, IOException;
?????? Servlet引擎調(diào)用這個方法以允許Servlet響應(yīng)請求。這個方法在Servlet未成功初始化之前無法調(diào)用。在Servlet被初始化之前,Servlet引擎能夠封鎖未決的請求。
?????? 在一個Servlet對象被卸載后,直到一個新的Servelt被初始化,Servlet引擎不能調(diào)用這個方法
?????? 3、destroy
?????? public void destroy();
?????? 當(dāng)一個Servlet被從服務(wù)中去除時,Servlet引擎調(diào)用這個方法。在這個對象的service方法所有線程未全部退出或者沒被引擎認(rèn)為發(fā)生超時操作時,destroy方法不能被調(diào)用。
?????? 4、getServletConfig
?????? public ServletConfig getServletConfig();
?????? 返回一個ServletConfig對象,作為一個Servlet的開發(fā)者,你應(yīng)該通過init方法存儲ServletConfig對象以便這個方法能返回這個對象。為了你的便利,GenericServlet在執(zhí)行這個接口時,已經(jīng)這樣做了。
?????? 5、getServletInfo
?????? public String getServletInfo();
?????? 允許Servlet向主機(jī)的Servlet運(yùn)行者提供有關(guān)它本身的信息。返回的字符串應(yīng)該是純文本格式而不應(yīng)有任何標(biāo)志(例如HTML,XML等)。
2.3??? ServletConfig接口
?????? 定義
?????? public interface ServletConfig
?????? 這個接口定義了一個對象,通過這個對象,Servlet引擎配置一個Servlet并且允許Servlet獲得一個有關(guān)它的ServletContext接口的說明。每一個ServletConfig對象對應(yīng)著一個唯一的Servlet。
?????? 方法
?????? 1、getInitParameter
?????? public String getInitParameter(String name);
?????? 這個方法返回一個包含Servlet指定的初始化參數(shù)的String。如果這個參數(shù)不存在,返加空值。
?????? 2、getInitParameterNames
?????? public Enumeration getInitParameterNames();
?????? 這個方法返回一個列表String對象,該對象包括Servlet的所有初始化參數(shù)名。如果Servlet沒有初始化參數(shù),getInitParameterNames返回一個空的列表。
?????? 3、getServletContext
?????? public ServletContext getServletContext();
?????? 返回這個Servlet的ServletContext對象。
?
2.4??? ServletContext接口
?????? 定義
?????? public interface ServletContext
?????? 定義了一個Servlet的環(huán)境對象,通過這個對象,Servlet引擎向Servlet提供環(huán)境信息。
?????? 一個Servlet的環(huán)境對象必須至少與它所駐留的主機(jī)是一一對應(yīng)的。在一個處理多個虛擬主機(jī)的Servlet引擎中(例如,使用了HTTP1.1的主機(jī) 頭域),每一個虛擬主機(jī)必須被視為一個單獨(dú)的環(huán)境。此外,Servlet引擎還可以創(chuàng)建對應(yīng)于一組Servlet的環(huán)境對象。
?????? 方法
?????? 1、getAttribute
?????? public Object getAttribute(String name);
?????? 返回Servlet環(huán)境對象中指定的屬性對象。如果該屬性對象不存在,返回空值。這個方法允許訪問有關(guān)這個Servlet引擎的在該接口的其他方法中尚未提供的附加信息。
?????? 2、getAttributeNames
?????? public Enumeration getAttributeNames();
?????? 返回一個Servlet環(huán)境對象中可用的屬性名的列表。
?????? 3、getContext
?????? public ServletContext getContext(String uripath);
?????? 返回一個Servlet環(huán)境對象,這個對象包括了特定URI路徑的Servlets和資源,如果該路徑不存在,則返回一個空值。URI路徑格式是/dir/dir/filename.ext。
?????? 為了安全,如果通過這個方法訪問一個受限制的Servlet的環(huán)境對象,會返回一個空值。
?????? 4、getMajorVersion
?????? public int getMajorVersion();
?????? 返回Servlet引擎支持的Servlet API的主版本號。例如對于2.1版,這個方法會返回一個整數(shù)2。
?????? 5、getMinorVersion
?????? public int getMinorVersion();
?????? 返回Servlet引擎支持的Servlet API的次版本號。例如對于2.1版,這個方法會返回一個整數(shù)2。
?????? 6、getMimeType
?????? public String getMimeType(String file);
??? ???返回指定文件的MIME類型,如果這種MIME類型未知,則返回一個空值。MIME類型是由Servlet引擎的配置決定的。
?????? 7、getRealPath
?????? public String getRealPath(String path);
?????? 一個符合URL路徑格式的指定的虛擬路徑的格式是:/dir/dir/filename.ext。用這個方法,可以返回與一個符合該格式的虛擬路徑相對應(yīng)的真實(shí)路徑的String。這個真實(shí)路徑的格式應(yīng)該適合于運(yùn)行這個Servlet引擎的計(jì)算機(jī)(包括其相應(yīng)的路徑解析器)。
?????? 不管是什么原因,如果這一從虛擬路徑轉(zhuǎn)換成實(shí)際路徑的過程不能執(zhí)行,該方法將會返回一個空值。
?????? 8、getResource
?????? public URL getResource(String uripath);
?????? 返回一個URL對象,該對象反映位于給定的URL地址(格式:/dir/dir/filename.ext)的Servlet環(huán)境對象已知的資源。無論 URLStreamHandlers對于訪問給定的環(huán)境是不是必須的,Servlet引擎都必須執(zhí)行。如果給定的路徑的Servlet環(huán)境沒有已知的資源,該方法會返回一個空值。
?????? 這個方法和java.lang.Class的getResource方法不完全相同。 java.lang.Class的getResource方法通過裝載類來尋找資源。而這個方法允許服務(wù)器產(chǎn)生環(huán)境變量給任何資源的任何Servlet, 而不必依賴于裝載類、特定區(qū)域等等。
?????? 9、getResourceAsStream
?????? public InputStream getResourceAsStream(String uripath);
?????? 返回一個InputStream對象,該對象引用指定的URL的Servlet環(huán)境對象的內(nèi)容。如果沒找到Servlet環(huán)境變量,就會返回空值,URL路徑應(yīng)該具有這種格式:/dir/dir/filename.ext。
?????? 這個方法是一個通過getResource方法獲得URL對象的方便的途徑。請注意,當(dāng)你使用這個方法時,meta-information(例如內(nèi)容長度、內(nèi)容類型)會丟失。
?????? 10、getRequestDispatcher
???? ??public RequestDispatcher getRequestDispatcher(String uripath);
?????? 如果這個指定的路徑下能夠找到活動的資源(例如一個Servlet,JSP頁面,CGI等等)就返回一個特定URL的RequestDispatcher 對象,否則,就返回一個空值,Servlet引擎負(fù)責(zé)用一個request dispatcher對象封裝目標(biāo)路徑。這個 request dispatcher對象可以用來完全請求的傳送。
?????? 11、getServerInfo
?????? public String getServerInfo();
?????? 返回一個String對象,該對象至少包括Servlet引擎的名字和版本號。
?????? 12、log
?????? public void log(String msg);
?????? public void log(String msg, Throwable t);
?????? public void log(Exception exception, String msg); // 這種用法將被取消
?????? 寫指定的信息到一個Servlet環(huán)境對象的log文件中。被寫入的log文件由Servlet引擎指定,但是通常這是一個事件log。當(dāng)這個方法被一個異常調(diào)用時,log中將包括堆棧跟蹤。
?????? 13、setAttribute
?????? public void setAttribute(String name, Object o);
?????? 給予Servlet環(huán)境對象中你所指定的對象一個名稱。
?????? 14、removeAttribute
?????? public void removeAttribute(String name);
?????? 從指定的Servlet環(huán)境對象中刪除一個屬性。
?????? 注:以下幾個方法將被取消
?????? 15、getServlet
?????? public Servlet getServlet(String name) throws ServletException;
?????? 最初用來返回一個指定名稱的Servlet,如果沒找到就返回一個空值。如果這個Servlet能夠返回,這就意味著它已經(jīng)被初始化,而且已經(jīng)可以接受 service請求。這是一個危險的方法。當(dāng)調(diào)用這個方法時,可能并不知道Servlet的狀態(tài),這就可能導(dǎo)致有關(guān)服務(wù)器狀態(tài)的問題。而允許一個 Servlet訪問其他Servlet的這個方法也同樣的危險。
?????? 現(xiàn)在這個方法返回一個空值,為了保持和以前版本的兼容性,現(xiàn)在這個方法還沒有被取消。在以后的API版本中,該方法將被取消。
?????? 16、getServletNames
?????? public Enumeration getServletNames();
?????? 最初用來返回一個String對象的列表,該列表表示了在這個Servlet環(huán)境下所有已知的Servlet對象名。這個列表總是包含這個Servlet自身。
基于與上一個方法同樣的理由,這也是一個危險的方法。
?????? 現(xiàn)在這個方法返回一個空的列表。為了保持和以前版本的兼容性,現(xiàn)在這個方法還沒有被取消。在以后的API版本中,該方法將被取消。
?????? 17、getServlets
?????? public Enumeration getServlets();
?????? 最初用來返回在這個Servelet環(huán)境下所有已知的Servlet對象的列表。這個列表總是包含這個Servlet自身。
基于與getServlet方法同樣的理由,這也是一個危險的方法。
?????? 現(xiàn)在這個方法返回一個空的列表。為了保持和以前版本的兼容性,現(xiàn)在這個方法還沒有被取消。在以后的API版本中,該方法將被取消。
?
2.5??? ServletRequest接口
?????? 定義
?????? public interface ServletRequest
?????? 定義一個Servlet引擎產(chǎn)生的對象,通過這個對象,Servlet可以獲得客戶端請求的數(shù)據(jù)。這個對象通過讀取請求體的數(shù)據(jù)提供包括參數(shù)的名稱、值和屬性以及輸入流的所有數(shù)據(jù)。
?????? 方法
?????? 1、getAttribute
?????? public Object getAttribute(String name);
?????? 返回請求中指定屬性的值,如果這個屬性不存在,就返回一個空值。這個方法允許訪問一些不提供給這個接口中其他方法的請求信息以及其他Servlet放置在這個請求對象內(nèi)的數(shù)據(jù)。
?????? 2、getAttributeNames
?????? public Enumeration getAttributeNames();
?????? 返回包含在這個請求中的所有屬性名的列表。
?????? 3、getCharacterEncoding
?????? public String getCharacterEncoding();
?????? 返回請求中輸入內(nèi)容的字符編碼類型,如果沒有定義字符編碼類型就返回空值。
?????? 4、getContentLength
?????? public int getContentLength();
?????? 請求內(nèi)容的長度,如果長度未知就返回-1。
?????? 5、getContentType
?????? public String getContentType();
?????? 返回請求數(shù)據(jù)體的MIME類型,如果類型未知返回空值。
?????? 6、getInputStream
?????? public ServletInputStream getInputStream() throws IOException;
?????? 返回一個輸入流用來從請求體讀取二進(jìn)制數(shù)據(jù)。如果在此之前已經(jīng)通過getReader方法獲得了要讀取的結(jié)果,這個方法會拋出一個IllegalStateException。
?????? 7、getParameter
?????? public String getParameter(String name);
?????? 以一個String返回指定的參數(shù)的值,如果這個參數(shù)不存在返回空值。例如,在一個HTTP Servlet中,這個方法會返回一個指定的查詢語句產(chǎn)生的參數(shù)的值或一個被提交的表單中的參數(shù)值。如果一個參數(shù)名對應(yīng)著幾個參數(shù)值,這個方法只能返回通過getParameterValues方法返回的數(shù)組中的第一個值。因此,如果這個參數(shù)有(或者可能有)多個值,你只能使用getParameterValues方法。
?????? 8、getParameterNames
?????? public Enumeration getParameterNames();
?????? 返回所有參數(shù)名的String對象列表,如果沒有輸入?yún)?shù),該方法返回一個空值。
?????? 9、getParameterValues
?????? public String[] getParameterValues(String name);
? ?????通過一個String對象的數(shù)組返回指定參數(shù)的值,如果這個參數(shù)不存在,該方法返回一個空值。
?????? 10、getProtocol
?????? public String getProtocol();
?????? 返回這個請求所用的協(xié)議,其形式是協(xié)議/主版本號.次版本號。例如對于一個HTTP1.0的請求,該方法返回HTTP/1.0。
?????? 11、getReader
?????? public BufferedReader getReader() throws IOException;
?????? 這個方法返回一個buffered reader用來讀取請求體的實(shí)體,其編碼方式依照請求數(shù)據(jù)的編碼方式。如果這個請求的輸入流已經(jīng)被getInputStream調(diào)用獲得,這個方法會拋出一個IllegalStateException。
?????? 12、getRemoteAddr
?????? public String getRemoteAddr();
?????? 返回發(fā)送請求者的IP地址。
?????? 13、getRemoteHost
?????? public String getRemoteHost();
?????? 返回發(fā)送請求者的主機(jī)名稱。如果引擎不能或者選擇不解析主機(jī)名(為了改善性能),這個方法會直接返回IP地址。
?????? 14、getScheme
?????? public String getScheme();
?????? 返回請求所使用的URL的模式。例如,對于一個HTTP請求,這個模式就是http。
?????? 15、getServerName
?????? public String getServerName();
?????? 返回接收請求的服務(wù)器的主機(jī)名。
?????? 16、getServerPort
?????? public int getServerPort();
?????? 返回接收請求的端口號。
?????? 17、setAttribute
?????? public void setAttribute(String name, Object object);
?????? 這個方法在請求中添加一個屬性,這個屬性可以被其他可以訪問這個請求對象的對象(例如一個嵌套的Servlet)使用。
?????? 注:以下方法將被取消
?????? getRealPath
?????? public String getRealPath(String path);
?????? 返回與虛擬路徑相對應(yīng)的真實(shí)路徑,如果因?yàn)槟撤N原因,這一過程不能進(jìn)行,該方法將返回一個空值。
?????? 這個方法和ServletContext接口中的getRealPath方法重復(fù)。在2.1版中,ServletContext接口將闡明一個 Servlet所能用的所有的路徑的映射。該方法執(zhí)行的結(jié)果將會與ServletContext中g(shù)etRealPath方法的結(jié)果完全一樣。
?
2.6??? ServletResponse接口
?????? 定義
?????? public interface ServletResponse
?????? 定義一個Servlet引擎產(chǎn)生的對象,通過這個對象,Servlet對客戶端的請求作出響應(yīng)。這個響應(yīng)應(yīng)該是一個MIME實(shí)體,可能是一個HTML頁、圖象數(shù)據(jù)或其他MIME的格式。
?????? 方法
?????? 1、getCharacterEncoding
?????? public String getCharacterEncoding();
?????? 返回MIME實(shí)體的字符編碼。這個字符編碼可以是指定的類型,也可以是與請求頭域所反映的客戶端所能接受的字符編碼最匹配的類型。在HTTP協(xié)議中,這個信息被通過Accept-Charset傳送到Servlet引擎。
?????? 有關(guān)字符編碼和MIME的更多信息請參看RFC 2047。
?????? 2、getOutputStream
?????? public ServletOutputStream getOutputStream() throws IOException;
?????? 返回一個記錄二進(jìn)制的響應(yīng)數(shù)據(jù)的輸出流。
?????? 如果這個響應(yīng)對象已經(jīng)調(diào)用getWriter,將會拋出IllegalStateException。
?????? 3、getWriter
?????? public PrintWriter getWriter throws IOException;
?????? 這個方法返回一個PringWriter對象用來記錄格式化的響應(yīng)實(shí)體。如果要反映使用的字符編碼,必須修改響應(yīng)的MIME類型。在調(diào)用這個方法之前,必須設(shè)定響應(yīng)的content類型。
?????? 如果沒有提供這樣的編碼類型,會拋出一個UnsupportedEncodingException,如果這個響應(yīng)對象已調(diào)用getOutputStream,會拋出一個getOutputStream。
?????? 4、setContentLength
?????? public void setContentLength(int length);
?????? 設(shè)置響應(yīng)的內(nèi)容的長度,這個方法會覆蓋以前對內(nèi)容長度的設(shè)定。
?????? 為了保證成功地設(shè)定響應(yīng)頭的內(nèi)容長度,在響應(yīng)被提交到輸出流之前必須調(diào)用這個方法。
?????? 5、setContentType
?????? public void setContentType(String type);
?????? 這個方法用來設(shè)定響應(yīng)的content類型。這個類型以后可能會在另外的一些情況下被隱式地修改,這里所說的另外的情況可能當(dāng)服務(wù)器發(fā)現(xiàn)有必要的情況下對MIME的字符設(shè)置。
?????? 為了保證成功地設(shè)定響應(yīng)頭的content類型,在響應(yīng)被提交到輸出流之前必須調(diào)用這個方法。
?
2.7??? ?SingleThreadModel接口
?????? 定義
?????? public interface SingleThreadModel;
?????? 這是一個空接口,它指定了系統(tǒng)如何處理對同一個Servlet的調(diào)用。如果一個Servlet被這個接口指定,那么在這個Servlet中的service方法中將不會有兩個線程被同時執(zhí)行。
?????? Servlet可以通過維持一個各自獨(dú)立的Servlet實(shí)例池,或者通過只讓Servlet的service中只有一個線程的方法來實(shí)現(xiàn)這個保證。
?
2.8??? GenericServlet類
?????? public abstract class GenericServlet implements Servlet,
???????????? ServletConfig, Serializable;
?????? 這個類的存在使得編寫Servlet更加方便。它提供了一個簡單的方案,這個方案用來執(zhí)行有關(guān)Servlet生命周期的方法以及在初始化時對ServletConfig對象和ServletContext對象進(jìn)行說明。
?????? 方法
?????? 1、destroy
?????? public void destroy();
?????? 在這里destroy方法不做任何其他的工作。
?????? 2、getInitParameter
?????? public String getInitParameter(String name);
?????? 這是一個簡便的途徑,它將會調(diào)用ServletConfig對象的同名的方法。
?????? 3、getInitParameterNames
?????? public Enumeration getInitParameterNames();
?????? 這是一個簡便的途徑,它將會調(diào)用ServletConfig對象的同名的方法。
? ?????4、getServletConfig
?????? public ServletConfig getServletConfig();
?????? 返回一個通過這個類的init方法產(chǎn)生的ServletConfig對象的說明。
?????? 5、getServletContext
?????? public ServletContext getServletContext();
?????? 這是一個簡便的途徑,它將會調(diào)用ServletConfig對象的同名的方法。
?????? 6、getServletInfo
?????? public String getServletInfo();
?????? 返回一個反映Servlet版本的String。
?????? 7、init
?????? public void init() throws ServletException;
?????? public void init(ServletConfig config) throws ServletException;
?????? init(ServletConfig config)方法是一個對這個Servlet的生命周期進(jìn)行初始化的簡便的途徑。
?????? init()方法是用來讓你對GenericServlet類進(jìn)行擴(kuò)充的,使用這個方法時,你不需要存儲config對象,也不需要調(diào)用super.init(config)。
?????? init(ServletConfig config)方法會存儲config對象然后調(diào)用init()。如果你重載了這個方法,你必須調(diào)用super.init(config),這樣GenericServlet類的其他方法才能正常工作。
?????? 8、log
????? ?public void log(String msg);
?????? public void log(String msg, Throwable cause);
?????? 通過Servlet content對象將Servlet的類名和給定的信息寫入log文件中。
?????? 9、service
?????? public abstract void service(ServletRequest request, ServletResponse
???????????? response) throws ServletException, IOException;
?????? 這是一個抽象的方法,當(dāng)你擴(kuò)展這個類時,為了執(zhí)行網(wǎng)絡(luò)請求,你必須執(zhí)行它。
?
2.9??? ServletInputStream類
?????? 定義
?????? public abstract class ServletInputStream extends InputStream
?????? 這個類定義了一個用來讀取客戶端的請求信息的輸入流。這是一個Servlet引擎提供的抽象類。一個Servlet通過使用ServletRequest接口獲得了對一個ServletInputStream對象的說明。
?????? 這個類的子類必須提供一個從InputStream接口讀取有關(guān)信息的方法。
?????? 方法
?????? 1、readLine
?????? public int readLine(byte[] b, int off, int len) throws IOException;
?????? 從輸入流的指定的偏移量開始將指定長度的字節(jié)讀入到指定的數(shù)組中。如果該行所有請求的內(nèi)容都已被讀取,這個讀取的過程將結(jié)束。如果是遇到了新的一行,新的一行的首個字符也將被讀入到數(shù)組中。
?
2.10 ? ?ServletOutputStream類
?????? 定義
?????? public abstract class ServletOutputStream extends OutputStream
?????? 這是一個由Servlet引擎使用的抽象類。Servlet通過使用ServletResponse接口的使用獲得了對一個這種類型的對象的說明。利用這個輸出流可以將數(shù)據(jù)返回到客戶端。
?????? 這個類的子類必須提供一個向OutputStream接口寫入有關(guān)信息的方法。
?????? 在這個接口中,當(dāng)一個刷新或關(guān)閉的方法被調(diào)用時。所有數(shù)據(jù)緩沖區(qū)的信息將會被發(fā)送到客戶端,也就是說響應(yīng)被提交了。請注意,關(guān)閉這種類型的對象時不一定要關(guān)閉隱含的socket流。
?????? 方法
?????? 1、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;
?? ????輸出變量到輸出流中
?????? 2、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
?????? 當(dāng)Servlet遇到問題時拋出的一個異常。
?????? 構(gòu)造函數(shù)
?????? public ServletException();
?????? public ServletException(String message);
?????? public ServletException(String message, Throwable cause);
?????? public ServletException(Throwable cause);
?????? 構(gòu)造一個新的ServletException,如果這個構(gòu)造函數(shù)包括一個Throwable參數(shù),這個Throwable對象將被作為可能拋出這個異常的原因。
?????? 方法
?????? 1、getRootCause
?????? public Throwable getRootCause();
?????? 如果配置了拋出這個異常的原因,這個方法將返回這個原因,否則返回一個空值。
?
2.12?????? UnavailableException類
?????? 定義
?????? public class UnavailableException extends ServletException
?????? 不論一個Servlet是永久地還是臨時地?zé)o效,都會拋出這個異常。Servlet會記錄這個異常以及Servlet引擎所要采取的相應(yīng)措施。
?????? 臨時的無效是指Servlet在某一時間由于一個臨時的問題而不能處理請求。例如,在另一個不同的應(yīng)用層的服務(wù)(可能是數(shù)據(jù)庫)無法使用。這個問題可能會自行糾正或者需要采取其他的糾正措施。
?????? 永久的無效是指除非管理員采取措施,這個Servlet將不能處理客戶端的請求。例如,這個Servlet配置信息丟失或Servlet的狀態(tài)被破壞。
?????? Servlet 引擎可以安全地處理包括永久無效在內(nèi)的這兩種異常,但是對臨時無效的正常處理可以使得Servlet引擎更健壯。特別的,這時對Servlet的請求只是 被阻止(或者是被延期)一段時間,這顯然要比在service自己重新啟動前完全拒絕請求更為科學(xué)。
?????? 構(gòu)造函數(shù)
?????? public UnavailableException(Servlet servlet, String message);
?????? public UnavailableException(int seconds, Servlet servlet,
???????????? String message);
?????? 構(gòu)造一個包含指定的描述信息的新的異常。如果這個構(gòu)造函數(shù)有一個關(guān)于秒數(shù)的參數(shù),這將給出Servlet發(fā)生臨時無效后,能夠重新處理請求的估計(jì)時間。如果不包含這個參數(shù),這意味著這個Servlet永久無效。
?????? 方法
?????? 1、getServlet
?????? public Servlet getServlet();
?????? 返回報告無效的Servlet。這被Servlet引擎用來識別受到影響的Servlet。
?????? 2、getUnavailableSeconds
?????? public int getUnavailableSeconds();
?????? 返回Servlet預(yù)期的無效時間,如果這個Servlet是永久無效,返回-1。
?????? 3、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格式的請求信息。
?????? 方法
?????? 1、getAuthType
?????? public String getAuthType();
?? ????返回這個請求的身份驗(yàn)證模式。
?????? 2、getCookies
?????? public Cookie[] getCookies();
?????? 返回一個數(shù)組,該數(shù)組包含這個請求中當(dāng)前的所有cookie。如果這個請求中沒有cookie,返回一個空數(shù)組。
?????? 3、getDateHeader
?????? public long getDateHeader(String name);
?????? 返回指定的請求頭域的值,這個值被轉(zhuǎn)換成一個反映自1970-1-1日(GMT)以來的精確到毫秒的長整數(shù)。
?????? 如果頭域不能轉(zhuǎn)換,拋出一個IllegalArgumentException。如果這個請求頭域不存在,這個方法返回-1。
?????? 4、getHeader
?????? public String getHeader(String name);
?????? 返回一個請求頭域的值。(譯者注:與上一個方法不同的是,該方法返回一個字符串)
?????? 如果這個請求頭域不存在,這個方法返回-1。
?????? 5、getHeaderNames
?????? public Enumeration getHeaderNames();
?????? 該方法返回一個String對象的列表,該列表反映請求的所有頭域名。
?????? 有的引擎可能不允許通過這種方法訪問頭域,在這種情況下,這個方法返回一個空的列表。
?????? 6、getIntHeader
?????? public int getIntHeader(String name);
?????? 返回指定的請求頭域的值,這個值被轉(zhuǎn)換成一個整數(shù)。
?????? 如果頭域不能轉(zhuǎn)換,拋出一個IllegalArgumentException。如果這個請求頭域不存在,這個方法返回-1。
?????? 7、getMethod
?????? public String getMethod();
?????? 返回這個請求使用的HTTP方法(例如:GET、POST、PUT)
?????? 8、getPathInfo
?????? public String getPathInfo();
?????? 這個方法返回在這個請求的URL的Servlet路徑之后的請求URL的額外的路徑信息。如果這個請求URL包括一個查詢字符串,在返回值內(nèi)將不包括這個查詢字符串。這個路徑在返回之前必須經(jīng)過URL解碼。如果在這個請求的URL的Servlet路徑之后沒有路徑信息。這個方法返回空值。
?????? 9、getPathTranslated
?????? public String getPathTranslated();
?????? 這個方法獲得這個請求的URL的Servlet路徑之后的額外的路徑信息,并將它轉(zhuǎn)換成一個真實(shí)的路徑。在進(jìn)行轉(zhuǎn)換前,這個請求的URL必須經(jīng)過URL解碼。如果在這個URL的Servlet路徑之后沒有附加路徑信息。這個方法返回空值。
? ?????10、getQueryString
?????? public String getQueryString();
?????? 返回這個請求URL所包含的查詢字符串。一個查詢字串符在一個URL中由一個“?”引出。如果沒有查詢字符串,這個方法返回空值。
?????? 11、getRemoteUser
?????? public String getRemoteUser
?????? 返回作了請求的用戶名,這個信息用來作HTTP用戶論證。
?????? 如果在請求中沒有用戶名信息,這個方法返回空值。
?????? 12、getRequestedSessionId
?????? public String getRequestedSessionId();
?????? 返回這個請求相應(yīng)的session id。如果由于某種原因客戶端提供的session id是無效的,這個session id將與在當(dāng)前session中的session id不同,與此同時,將建立一個新的session。
?????? 如果這個請求沒與一個session關(guān)聯(lián),這個方法返回空值。
?????? 13、getRequestURI
?????? public String getRequestURI();
?????? 從HTTP請求的第一行返回請求的URL中定義被請求的資源的部分。如果有一個查詢字符串存在,這個查詢字符串將不包括在返回值當(dāng)中。例如,一個請求通過 /catalog/books?id=1這樣的URL路徑訪問,這個方法將返回/catalog/books。這個方法的返回值包括了Servlet路徑 和路徑信息。
?????? 如果這個URL路徑中的的一部分經(jīng)過了URL編碼,這個方法的返回值在返回之前必須經(jīng)過解碼。
?????? 14、getServletPath
?????? public String getServletPath();
?????? 這個方法返回請求URL反映調(diào)用Servlet的部分。例如,一個Servlet被映射到/catalog/summer這個URL路徑,而一個請求使用了/catalog/summer/casual這樣的路徑。所謂的反映調(diào)用Servlet的部分就是指/catalog/summer。
?????? 如果這個Servlet不是通過路徑匹配來調(diào)用。這個方法將返回一個空值。
?????? 15、getSession
?????? public HttpSession getSession();
?????? public HttpSession getSession(boolean create);
?????? 返回與這個請求關(guān)聯(lián)的當(dāng)前的有效的session。如果調(diào)用這個方法時沒帶參數(shù),那么在沒有session與這個請求關(guān)聯(lián)的情況下,將會新建一個session。如果調(diào)用這個方法時帶入了一個布爾型的參數(shù),只有當(dāng)這個參數(shù)為真時,session才會被建立。
?????? 為了確保session能夠被完全維持。Servlet開發(fā)者必須在響應(yīng)被提交之前調(diào)用該方法。
?????? 如果帶入的參數(shù)為假,而且沒有session與這個請求關(guān)聯(lián)。這個方法會返回空值。
?????? 16、isRequestedSessionIdValid
?????? public boolean isRequestedSessionIdValid();
?????? 這個方法檢查與此請求關(guān)聯(lián)的session當(dāng)前是不是有效。如果當(dāng)前請求中使用的session無效,它將不能通過getSession方法返回。
?????? 17、isRequestedSessionIdFromCookie
?????? public boolean isRequestedSessionIdFromCookie();
?????? 如果這個請求的session id是通過客戶端的一個cookie提供的,該方法返回真,否則返回假。
?????? 18、isRequestedSessionIdFromURL
?????? public boolean isRequestedSessionIdFromURL();
?????? 如果這個請求的session id是通過客戶端的URL的一部分提供的,該方法返回真,否則返回假。請注意此方法與isRequestedSessionIdFromUrl在URL的拼寫上不同。
?????? 以下方法將被取消
?????? 19、isRequestedSessionIdFromUrl
?????? public boolean isRequestedSessionIdFromUrl();
?????? 該方法被isRequestedSessionIdFromURL代替。
?
2.14?????? HttpServletResponse接口
?????? 定義?
?????? public interface HttpServletResponse extends ServletResponse
?????? 描述一個返回到客戶端的HTTP回應(yīng)。這個接口允許Servlet程序員利用HTTP協(xié)議規(guī)定的頭信息。
?????? 成員變量
?????? 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產(chǎn)狀態(tài)碼是由HTTP/1.1定義的。
?????? 方法
?????? 1、addCookie
??? ???public void addCookie(Cookie cookie);
?????? 在響應(yīng)中增加一個指定的cookie。可多次調(diào)用該方法以定義多個cookie。為了設(shè)置適當(dāng)?shù)念^域,該方法應(yīng)該在響應(yīng)被提交之前調(diào)用。
?????? 2、containsHeader
?????? public boolean containsHeader(String name);
?????? 檢查是否設(shè)置了指定的響應(yīng)頭。
?????? 3、encodeRedirectURL
?????? public String encodeRedirectURL(String url);
?????? 對sendRedirect方法使用的指定URL進(jìn)行編碼。如果不需要編碼,就直接返回這個URL。之所以提供這個附加的編碼方法,是因?yàn)樵?redirect的情況下,決定是否對URL進(jìn)行編碼的規(guī)則和一般情況有所不同。所給的URL必須是一個絕對URL。相對URL不能被接收,會拋出一個 IllegalArgumentException。
?????? 所有提供給sendRedirect方法的URL都應(yīng)通過這個方法運(yùn)行,這樣才能確保會話跟蹤能夠在所有瀏覽器中正常運(yùn)行。
?????? 4、encodeURL
?????? public String encodeURL(String url);
?????? 對包含session ID的URL進(jìn)行編碼。如果不需要編碼,就直接返回這個URL。Servlet引擎必須提供URL編碼方法,因?yàn)樵谟行┣闆r下,我們將不得不重寫URL,例如,在響應(yīng)對應(yīng)的請求中包含一個有效的session,但是這個session不能被非URL的(例如cookie)的手段來維 持。
?????? 所有提供給Servlet的URL都應(yīng)通過這個方法運(yùn)行,這樣才能確保會話跟蹤能夠在所有瀏覽器中正常運(yùn)行。
?????? 5、sendError
?????? public void sendError(int statusCode) throws IOException;
?????? public void sendError(int statusCode, String message) throws
????????? IOException;
?????? 用給定的狀態(tài)碼發(fā)給客戶端一個錯誤響應(yīng)。如果提供了一個message參數(shù),這將作為響應(yīng)體的一部分被發(fā)出,否則,服務(wù)器會返回錯誤代碼所對應(yīng)的標(biāo)準(zhǔn)信息。
?????? 調(diào)用這個方法后,響應(yīng)立即被提交。在調(diào)用這個方法后,Servlet不會再有更多的輸出。
?????? 6、sendRedirect
?????? public void sendRedirect(String location) throws IOException;
?????? 使用給定的路徑,給客戶端發(fā)出一個臨時轉(zhuǎn)向的響應(yīng)(SC_MOVED_TEMPORARILY)。給定的路徑必須是絕對URL。相對URL將不能被接收,會拋出一個IllegalArgumentException。
?????? 這個方法必須在響應(yīng)被提交之前調(diào)用。調(diào)用這個方法后,響應(yīng)立即被提交。在調(diào)用這個方法后,Servlet不會再有更多的輸出。
?????? 7、setDateHeader
?????? public void setDateHeader(String name, long date);
?????? 用一個給定的名稱和日期值設(shè)置響應(yīng)頭,這里的日期值應(yīng)該是反映自1970-1-1日(GMT)以來的精確到毫秒的長整數(shù)。如果響應(yīng)頭已經(jīng)被設(shè)置,新的值將覆蓋當(dāng)前的值。
?????? 8、setHeader
?????? public void setHeader(String name, String value);
?????? 用一個給定的名稱和域設(shè)置響應(yīng)頭。如果響應(yīng)頭已經(jīng)被設(shè)置,新的值將覆蓋當(dāng)前的值。
?????? 9、setIntHeader
?????? public void setIntHeader(String name, int value);
?????? 用一個給定的名稱和整形值設(shè)置響應(yīng)頭。如果響應(yīng)頭已經(jīng)被設(shè)置,新的值將覆蓋當(dāng)前的值。
?????? 10、setStatus
?????? public void setStatus(int statusCode);
?????? 這個方法設(shè)置了響應(yīng)的狀態(tài)碼,如果狀態(tài)碼已經(jīng)被設(shè)置,新的值將覆蓋當(dāng)前的值。
?????? 以下的幾個方法將被取消
?????? 11、encodeRedirectUrl
?????? public String encodeRedirectUrl(String url);
?????? 該方法被encodeRedirectURL取代。
?????? 12、encodeUrl
?????? public String encodeUrl(String url);
?????? 該方法被encodeURL取代。
?????? 13、setStatus
?????? public void setStatus(int statusCode, String message);
?????? 這個方法設(shè)置了響應(yīng)的狀態(tài)碼,如果狀態(tài)碼已經(jīng)被設(shè)置,新的值將覆蓋當(dāng)前的值。如果提供了一個message,它也將會被作為響應(yīng)體的一部分被發(fā)送。
?
2.15?????? HttpSession接口
?? ????定義
?????? public interface HttpSession
?????? 這個接口被Servlet引擎用來實(shí)現(xiàn)在HTTP客戶端和HTTP會話兩者的關(guān)聯(lián)。這種關(guān)聯(lián)可能在多外連接和請求中持續(xù)一段給定的時間。session用來在無狀態(tài)的HTTP協(xié)議下越過多個請求頁面來維持狀態(tài)和識別用戶。
?????? 一個session可以通過cookie或重寫URL來維持。
?????? 方法
?????? 1、getCreationTime
?????? public long getCreationTime();
?????? 返回建立session的時間,這個時間表示為自1970-1-1日(GMT)以來的毫秒數(shù)。
?????? 2、getId
?????? public String getId();
?????? 返回分配給這個session的標(biāo)識符。一個HTTP session的標(biāo)識符是一個由服務(wù)器來建立和維持的唯一的字符串。
?????? 3、getLastAccessedTime
?????? public long getLastAccessedTime();
?????? 返回客戶端最后一次發(fā)出與這個session有關(guān)的請求的時間,如果這個session是新建立的,返回-1。這個時間表示為自1970-1-1日(GMT)以來的毫秒數(shù)。
?????? 4、getMaxInactiveInterval
?????? public int getMaxInactiveInterval();
?????? 返加一個秒數(shù),這個秒數(shù)表示客戶端在不發(fā)出請求時,session被Servlet引擎維持的最長時間。在這個時間之后,Servlet引擎可能被Servlet引擎終止。如果這個session不會被終止,這個方法返回-1。
?????? 當(dāng)session無效后再調(diào)用這個方法會拋出一個IllegalStateException。
?????? 5、getValue
?????? public Object getValue(String name);
?????? 返回一個以給定的名字綁定到session上的對象。如果不存在這樣的綁定,返回空值。
?????? 當(dāng)session無效后再調(diào)用這個方法會拋出一個IllegalStateException。
?????? 6、getValueNames
? ?????public String[] getValueNames();
?????? 以一個數(shù)組返回綁定到session上的所有數(shù)據(jù)的名稱。
?????? 當(dāng)session無效后再調(diào)用這個方法會拋出一個IllegalStateException。
?????? 7、invalidate
?????? public void invalidate();
?????? 這個方法會終止這個session。所有綁定在這個session上的數(shù)據(jù)都會被清除。并通過HttpSessionBindingListener接口的valueUnbound方法發(fā)出通告。
?????? 8、isNew
?????? public boolean isNew();
?????? 返回一個布爾值以判斷這個session是不是新的。如果一個session已經(jīng)被服務(wù)器建立但是還沒有收到相應(yīng)的客戶端的請求,這個session將被 認(rèn)為是新的。這意味著,這個客戶端還沒有加入會話或沒有被會話公認(rèn)。在他發(fā)出下一個請求時還不能返回適當(dāng)?shù)膕ession認(rèn)證信息。
?????? 當(dāng)session無效后再調(diào)用這個方法會拋出一個IllegalStateException。
?????? 9、putValue
?????? public void putValue(String name, Object value);
?????? 以給定的名字,綁定給定的對象到session中。已存在的同名的綁定會被重置。這時會調(diào)用HttpSessionBindingListener接口的valueBound方法。
?????? 當(dāng)session無效后再調(diào)用這個方法會拋出一個IllegalStateException。
?????? 10、removeValue
???? ??public void removeValue(String name);
?????? 取消給定名字的對象在session上的綁定。如果未找到給定名字的綁定的對象,這個方法什么出不做。這時會調(diào)用HttpSessionBindingListener接口的valueUnbound方法。
?????? 當(dāng)session無效后再調(diào)用這個方法會拋出一個IllegalStateException。
?????? 11、setMaxInactiveInterval
?????? public int setMaxInactiveInterval(int interval);
?????? 設(shè)置一個秒數(shù),這個秒數(shù)表示客戶端在不發(fā)出請求時,session被Servlet引擎維持的最長時間。
?????? 以下這個方法將被取消
?????? 12、getSessionContext
?????? public HttpSessionContext getSessionContext();
?????? 返回session在其中得以保持的環(huán)境變量。這個方法和其他所有HttpSessionContext的方法一樣被取消了。
2.16?????? ?HttpSessionBindingListener接口
?????? 定義
?????? public interface HttpSessionBindingListener
?????? 這個對象被加入到HTTP的session中,執(zhí)行這個接口會通告有沒有什么對象被綁定到這個HTTP session中或被從這個HTTP session中取消綁定。
?????? 方法
?????? 1、valueBound
?????? public void valueBound(HttpSessionBindingEvent event);
?????? 當(dāng)一個對象被綁定到session中,調(diào)用此方法。HttpSession.putValue方法被調(diào)用時,Servlet引擎應(yīng)該調(diào)用此方法。
?????? 2、valueUnbound
?????? public void valueUnbound(HttpSessionBindingEvent event);
?????? 當(dāng)一個對象被從session中取消綁定,調(diào)用此方法。HttpSession.removeValue方法被調(diào)用時,Servlet引擎應(yīng)該調(diào)用此方法。
?
2.17?????? HttpSessionContext接口
?????? 定義
?????? 此接口將被取消
?????? public interface HttpSessionContext
?????? 這個對象是與一組HTTP session關(guān)聯(lián)的單一的實(shí)體。
?????? 這個接口由于安全的原因被取消,它出現(xiàn)在目前的版本中僅僅是為了兼容性的原因。這個接口的方法將模擬以前的版本的定義返回相應(yīng)的值。
?????? 方法
?????? 1、getSession
?????? public HttpSession getSession(String sessionId);
?????? 當(dāng)初用來返回與這個session id相關(guān)的session。現(xiàn)在返回空值。
?????? 2、getIds
?????? public Enumeration getIds();
?????? 當(dāng)初用來返回這個環(huán)境下所有session id的列表。現(xiàn)在返回空的列表。
?
2.18?????? Cookie類
?????? 定義
?????? public class Cookie implements Cloneable
?????? 這個類描述了一個cookie,有關(guān)cookie的定義你可以參照Netscape Communications Corporation的說明,也可以參照RFC 2109。
?????? 構(gòu)造函數(shù)
?????? public Cookie(String name, String value);
?????? 用一個name-value對定義一個cookie。這個name必須能被HTTP/1.1所接受。
?????? 以字符$開頭的name被RFC 2109保留。
?????? 給定的name如果不能被HTTP/1.1所接受,該方法拋出一個IllegalArgumentException。
?????? 方法
?????? 1、getComment
?????? public String getComment();
?????? 返回描述這個cookie目的的說明,如果未定義這個說明,返回空值。
?????? 2、getDomain
?????? public String getDomain();
?????? 返回這個cookie可以出現(xiàn)的區(qū)域,如果未定義區(qū)域,返回空值。
?????? 3、getMaxAge
????? ?public int getMaxAge();
?????? 這個方法返回這個cookie指定的最長存活時期。如果未定義這個最長存活時期,該方法返回-1。
?????? 4、getName
?????? public String getName();
?????? 該方法返回cookie名。
?????? 5、getPath
?????? public String getPath();
?????? 返回這個cookie有效的所有URL路徑的前綴,如果未定義,返回空值。
?????? 6、getSecure
?????? public boolean getSecure();
?????? 如果這個cookie只通過安全通道傳輸返回真,否則返回假。
?????? 7、getValue
?????? public String getValue();
?????? 該方法返回cookie的值。
?????? 8、getVersion
?????? public int getVersion();
?????? 返回cookie的版本。版本1由RFC 2109解釋。版本0由Netscape Communications Corporation的說明解釋。新構(gòu)造的cookie默認(rèn)使用版本0。
?????? 9、setComment
?????? public void setComment(String purpose);
?????? 如果一個用戶將這個cookie提交給另一個用戶,必須通過這個說明描述這個cookie的目的。版本0不支持這個屬性。
?????? 10、setDomain
?????? public void setDomain(String pattern);
?????? 這個方法設(shè)置cookie的有效域的屬性。這個屬性指定了cookie可以出現(xiàn)的區(qū)域。一個有效域以一個點(diǎn)開頭(.foo.com),這意味著在指定的域名解析系統(tǒng)的區(qū)域中(可能是www.foo.com但不是a.b.foo.com)的主機(jī)可以看到這個cookie。默認(rèn)情況是,cookie只能返回保 存它的主機(jī)。
?????? 11、setMaxAge
?????? public void setMaxAge(int expiry);
?????? 這個方法設(shè)定這個cookie的最長存活時期。在該存活時期之后,cookie會被終目。負(fù)數(shù)表示這個cookie不會生效,0將從客戶端刪除這個cookie。
? ? ? ?12、setPath
?????? public void setPath(String uri);
?????? 這個方法設(shè)置cookie的路徑屬性。客戶端只能向以這個給定的路徑String開頭的路徑返回cookie。
?????? 13、setSecure
?????? public void setSecure(boolean flag);
?????? 指出這個cookie只能通過安全通道(例如HTTPS)發(fā)送。只有當(dāng)產(chǎn)生這個cookie的服務(wù)器使用安全協(xié)議發(fā)送這個cookie值時才能這樣設(shè)置。
?????? 14、setValue
?????? public void setValue(String newValue);
?????? 設(shè)置這個cookie的值,對于二進(jìn)制數(shù)據(jù)采用BASE64編碼。
?????? 版本0不能使用空格、{}、()、=、,、“”、/、?、@、:以及;。
?????? 15、setVersion
?????? public void setVersion(int v);
?????? 設(shè)置cookie的版本號
?
2.19?????? HttpServlet類
?????? 定義
?????? public class HttpServlet extends GenericServlet implements
????????? Serializable
?????? 這是一個抽象類,用來簡化HTTP Servlet寫作的過程。它是GenericServlet類的擴(kuò)充,提供了一個處理HTTP協(xié)議的框架。
?????? 在這個類中的service方法支持例如GET、POST這樣的標(biāo)準(zhǔn)的HTTP方法。這一支持過程是通過分配他們到適當(dāng)?shù)姆椒?#xff08;例如doGet、doPost)來實(shí)現(xiàn)的。
?????? 方法
?????? 1、doDelete
?????? protected void doDelete(HttpServletRequest request,
???????????? HttpServletResponse response) throws ServletException,
???????????? IOException;
?????? 被這個類的service方法調(diào)用,用來處理一個HTTP DELETE操作。這個操作允許客戶端請求從服務(wù)器上刪除URL。這一操作可能有負(fù)面影響,對此用戶就負(fù)起責(zé)任。
?????? 這一方法的默認(rèn)執(zhí)行結(jié)果是返回一個HTTP BAD_REQUEST錯誤。當(dāng)你要處理DELETE請求時,你必須重載這一方法。
?????? 2、doGet
?????? protected void doGet(HttpServletRequest request,
???????????? HttpServletResponse response) throws ServletException,
???????????? IOException;
?????? 被這個類的service方法調(diào)用,用來處理一個HTTP GET操作。這個操作允許客戶端簡單地從一個HTTP服務(wù)器“獲得”資源。對這個方法的重載將自動地支持HEAD方法。
?????? GET操作應(yīng)該是安全而且沒有負(fù)面影響的。這個操作也應(yīng)該可以安全地重復(fù)。
?????? 這一方法的默認(rèn)執(zhí)行結(jié)果是返回一個HTTP BAD_REQUEST錯誤。
?????? 3、doHead
?????? protected void doHead(HttpServletRequest request,
???????????? HttpServletResponse response) throws ServletException,
???????????? IOException;
?????? 被這個類的service方法調(diào)用,用來處理一個HTTP HEAD操作。默認(rèn)的情況是,這個操作會按照一個無條件的GET方法來執(zhí)行,該操作不向客戶端返回任何數(shù)據(jù),而僅僅是返回包含內(nèi)容長度的頭信息。
?????? 與GET操作一樣,這個操作應(yīng)該是安全而且沒有負(fù)面影響的。這個操作也應(yīng)該可以安全地重復(fù)。
?????? 這個方法的默認(rèn)執(zhí)行結(jié)果是自動處理HTTP HEAD操作,這個方法不需要被一個子類執(zhí)行。
?????? 4、doOptions
?????? protected void doOptions(HttpServletRequest request,
???????????? HttpServletResponse response) throws ServletException,
???????????? IOException;
?????? 被這個類的service方法調(diào)用,用來處理一個HTTP OPTION操作。這個操作自動地決定支持哪一種HTTP方法。例如,一個Servlet寫了一個HttpServlet的子類并重載了doGet方法,doOption會返回下面的頭:
?????? Allow: GET,HEAD,TRACE,OPTIONS
?????? 你一般不需要重載這個方法。
?????? 5、doPost
?????? protected void doPost(HttpServletRequest request,
???????????? HttpServletResponse response) throws ServletException,
???????????? IOException;
?????? 被這個類的service方法調(diào)用,用來處理一個HTTP POST操作。這個操作包含請求體的數(shù)據(jù),Servlet應(yīng)該按照他行事。
?????? 這個操作可能有負(fù)面影響。例如更新存儲的數(shù)據(jù)或在線購物。
?????? 這一方法的默認(rèn)執(zhí)行結(jié)果是返回一個HTTP BAD_REQUEST錯誤。當(dāng)你要處理POST操作時,你必須在HttpServlet的子類中重載這一方法。
?????? 6、doPut
?????? protected void doPut(HttpServletRequest request,
???????????? HttpServletResponse response) throws ServletException,
???????????? IOException;
?????? 被這個類的service方法調(diào)用,用來處理一個HTTP PUT操作。這個操作類似于通過FTP發(fā)送文件。
?????? 這個操作可能有負(fù)面影響。例如更新存儲的數(shù)據(jù)或在線購物。
?????? 這一方法的默認(rèn)執(zhí)行結(jié)果是返回一個HTTP BAD_REQUEST錯誤。當(dāng)你要處理PUT操作時,你必須在HttpServlet的子類中重載這一方法。
?????? 7、doTrace
?????? protected void doTrace(HttpServletRequest request,
???????????? HttpServletResponse response) throws ServletException,
???????????? IOException;
?????? 被這個類的service方法調(diào)用,用來處理一個HTTP TRACE操作。這個操作的默認(rèn)執(zhí)行結(jié)果是產(chǎn)生一個響應(yīng),這個響應(yīng)包含一個反映trace請求中發(fā)送的所有頭域的信息。
?????? 當(dāng)你開發(fā)Servlet時,在多數(shù)情況下你需要重載這個方法。
?????? 8、getLastModified
?????? protected long getLastModified(HttpServletRequest request);
?????? 返回這個請求實(shí)體的最后修改時間。為了支持GET操作,你必須重載這一方法,以精確地反映最后修改的時間。這將有助于瀏覽器和代理服務(wù)器減少裝載服務(wù)器和網(wǎng)絡(luò)資源,從而更加有效地工作。返回的數(shù)值是自1970-1-1日(GMT)以來的毫秒數(shù)。
默認(rèn)的執(zhí)行結(jié)果是返回一個負(fù)數(shù),這標(biāo)志著最后修改時間未知,它也不能被一個有條件的GET操作使用。
?????? 9、service
?????? protected void service(HttpServletRequest request,
???????????? HttpServletResponse response) throws ServletException,
???????????? IOException;
?????? public void service(ServletRequest request, ServletResponse response)
???????????? throws ServletException, IOException;
?????? 這是一個Servlet的HTTP-specific方案,它分配請求到這個類的支持這個請求的其他方法。
?????? 當(dāng)你開發(fā)Servlet時,在多數(shù)情況下你不必重載這個方法。
?
2.20?????? HttpSessionBindingEvent類
?????? 定義
?????? public class HttpSessionBindingEvent extends EventObject
?????? 這個事件是在監(jiān)聽到HttpSession發(fā)生綁定和取消綁定的情況時連通HttpSessionBindingListener的。這可能是一個session被終止或被認(rèn)定無效的結(jié)果。
?????? 事件源是HttpSession.putValue或HttpSession.removeValue。
?????? 構(gòu)造函數(shù)
?????? public HttpSessionBindingEvent(HttpSession session, String name);
?????? 通過引起這個事件的Session和發(fā)生綁定或取消綁定的對象名構(gòu)造一個新的HttpSessionBindingEvent。
?????? 方法
?????? 1、getName
?????? public String getName();
?????? 返回發(fā)生綁定和取消綁定的對象的名字。
?????? 2、getSession
?????? public HttpSession getSession();
?????? 返回發(fā)生綁定和取消綁定的session的名字。
?
2.21?????? HttpUtils類
?????? 定義
?????? public class HttpUtils
?????? 收集HTTP Servlet使用的靜態(tài)的有效的方法。
?????? 方法
?????? 1、getRequestURL
?????? public static StringBuffer getRequestURL(HttpServletRequest
???????????? request);
?????? 在服務(wù)器上重建客戶端用來建立請求的URL。這個方法反映了不同的協(xié)議(例如http和https)和端口,但不包含查詢字符串。
?????? 這個方法返回一個StringBuffer而不是一個String,這樣URL可以被Servlet開發(fā)者有效地修改。
?????? 2、parsePostData
?????? public static Hashtable parsePostData(int len,
???????????? ServletInputstream in);
?????? 解析一個包含MIME類型application/x-www-form-urlencoded的數(shù)據(jù)的流,并創(chuàng)建一個具有關(guān)鍵值-數(shù)據(jù)對的 hash table。這里的關(guān)鍵值是字符串,數(shù)據(jù)是該字符串所對應(yīng)的值的列表。一個關(guān)鍵值可以在POST的數(shù)據(jù)中出現(xiàn)一次或多次。這個關(guān)鍵值每出現(xiàn)一次,它的相應(yīng)的值就被加入到hash table中的字符串所對應(yīng)的值的列表中。
?????? 從POST數(shù)據(jù)讀出的數(shù)據(jù)將經(jīng)過URL解碼,+將被轉(zhuǎn)換為空格以十六進(jìn)制傳送的數(shù)據(jù)(例如%xx)將被轉(zhuǎn)換成字符。
?????? 當(dāng)POST數(shù)據(jù)無效時,該方法拋出一個IllegalArgumentException。
?????? 3、parseQueryString
?????? public static Hashtable parseQueryString(String s);
?????? 解析一個查詢字符串,并創(chuàng)建一個具有關(guān)鍵值-數(shù)據(jù)對的hash table。這里的數(shù)據(jù)是該字符串所對應(yīng)的值的列表。一個關(guān)鍵值可以出現(xiàn)一次或多次。這個關(guān)鍵值每出現(xiàn)一次,它的相應(yīng)的值就被加入到hash table中的字符串所對應(yīng)的值的列表中。
?????? 從查詢字符串讀出的數(shù)據(jù)將經(jīng)過URL解碼,+將被轉(zhuǎn)換為空格以十六進(jìn)制傳送的數(shù)據(jù)(例如%xx)將被轉(zhuǎn)換成字符。
?????? 當(dāng)查詢字符串無效時,該方法拋出一個IllegalArgumentException。
?
術(shù)語表
bytecode
?????? 字節(jié)碼:由Java編譯器和Java解釋程序生成的機(jī)器代碼。
cookie
?????? 由Web服務(wù)器建立的數(shù)據(jù),該數(shù)據(jù)存儲在用戶的計(jì)算機(jī)上,提供了一個Web站點(diǎn)跟蹤用戶的參數(shù)并存儲在用戶自己硬盤上的方法。
HTTP
?????? 超文本傳輸協(xié)議。一個請求響應(yīng)協(xié)議用來連接WWW服務(wù)器向客戶端瀏覽器傳輸HTML頁面。
輸入流對象
? ? ? ?一個對象,由ServletInputStream類定義,被Servlet用來從客戶端讀取請求。
映射
?????? 由Servlet實(shí)例和Servlet返回數(shù)據(jù)的URL組成的一對,例如,HelloServlet和/hello/index.html。
輸出流對象
? ? ? ?一個對象,由ServletOutputStream class類定義,被Servlet用來向客戶端返回數(shù)據(jù)。
request dispatcher object
?????? 由RequestDispatcher接口定義的一個對象,用來從客戶端接收請求,并將其發(fā)送到Web服務(wù)器上可用的其他資源(例如Servlet、CGI、HTML文件或JSP文件)。
sandboxed servlet
?????? 在一個安全性約束下運(yùn)行的Servlet。
servlet
? ? ? ?一個小的,具有平臺無關(guān)性的,沒有圖形用戶界面的Java程序。它可以在許多方面擴(kuò)充Web服務(wù)的功能。
servlet configuration object
?????? ServletConfig接口定義的一個對象,用來配置一個Servlet。
servlet context object
?????? ServletContext接口定義的一個對象。給予Servlet有關(guān)Servlet引擎的信息。
servlet引擎
?????? 由Web服務(wù)器提供商制作的一個環(huán)境,可以允許Servlet在具體的Web服務(wù)器上運(yùn)行。
servlet請求對象
?????? 由ServletRequest接口定義的一個對象,允許Servlet獲得用關(guān)客戶端請求的數(shù)據(jù)。
servlet response object
?????? 由ServletResponse接口定義的一個對象,允許Servlet作出響應(yīng)。
servlet runner
? ? ? ?Java Servlet Developer’s Kit (JSDK)中的sun.servlet.http.HttpServer過程,它使得Servlet得以運(yùn)行。
會話跟蹤
?????? 在一個Web應(yīng)用程序中,識別一個從同一個客戶端發(fā)出的連續(xù)的唯一的請求的能力。
SSL
?????? 加密套接字協(xié)議層。一個安全協(xié)議,用來在Iternet上的客戶端瀏覽器和服務(wù)器交換密鑰和加密數(shù)據(jù)。
URI
?????? 統(tǒng)一資源標(biāo)識。定義一個Internet地址,它是一個URL的超集。
URL
?????? 統(tǒng)一資源路徑。這個地址定義了到達(dá)一個WWW上的文件的路線,通常由協(xié)議前綴、域名、目錄名和文件名組成。
?
轉(zhuǎn)載于:https://www.cnblogs.com/haimishasha/p/5609261.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的Java Servlet API中文说明文档的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Altera 速度等级
- 下一篇: 有关Java 锁原理