日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java Servlet API中文说明文档

發(fā)布時(shí)間:2023/12/9 java 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java Servlet API中文说明文档 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Java Servlet API中文說(shuō)明文檔

目 錄

1.... Servet資料

1.1????? 緒言

1.2????? 誰(shuí)需要讀這份文檔

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處理請(qǐng)求

1.11 ? ?多線程和映射

1.12??? Servlet的卸載

1.13??? Servlet映射技術(shù)

1.14 ? ?通過(guò)類名調(diào)用Servlet

1.15??? Servlet環(huán)境

1.16??? HTTP會(huì)話

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的說(shuō)明文檔,作為對(duì)這本文檔的補(bǔ)充,你可以到http://java.sun.com/products/servlet/index.html下面下載Javadoc格式的文檔。

1.2??? 誰(shuí)需要讀這份文檔

??? 這份文檔描述了Java Servlet API的最新版本2.1版。所以,這本書對(duì)于Servlet的開(kāi)發(fā)者及servlet引擎的開(kāi)發(fā)者同樣適用。

1.3??? Java Servlet API的組成

??? Java Servlet API由兩個(gè)軟件包組成:一個(gè)是對(duì)應(yīng)HTTP的軟件包,另一個(gè)是不對(duì)應(yīng)HTTP的通用的軟件包。這兩個(gè)軟件包的同時(shí)存在使得Java Servlet API能夠適應(yīng)將來(lái)的其他請(qǐng)求-響應(yīng)的協(xié)議。

??? 這份文檔以及剛才提及的Javadoc格式的文檔都描述了這兩個(gè)軟件包,Javadoc格式的文檔還描述了你應(yīng)該如何使用這兩個(gè)軟件包中的所有方法。

1.4??? 有關(guān)規(guī)范

??? 你也許對(duì)下面的這些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))第四部分: 注冊(cè)步驟

?????? RFC 2049 多用途Internet郵件擴(kuò)展(多用途網(wǎng)際郵件擴(kuò)充協(xié)議(MIME))第五部分:一致性標(biāo)準(zhǔn)和例子

?????? RFC 2068 超文本傳輸協(xié)議 -- HTTP/1.1

?????? RFC 2069 一個(gè)擴(kuò)展HTTP:摘要訪問(wèn)鑒定

?????? RFC 2109 HTTP狀態(tài)管理機(jī)制

?????? RFC 2145 HTTP 版本號(hào)的使用和解釋

?????? RFC 2324 超文本Coffee Pot控制協(xié)議 (HTCPCP/1.0)

?????? 萬(wàn)維網(wǎng)協(xié)會(huì)(http://www.w3.org)管理著這些協(xié)議的規(guī)范和執(zhí)行。

1.5??? 有關(guān)Java Servlets

??? JavaTM servlets 是一個(gè)不受平臺(tái)約束的Java小程序,它可以被用來(lái)通過(guò)多種方法擴(kuò)充一個(gè)Web服務(wù)器的功能。你可以把Servlet理解成Server上的 applets,它被編譯成字節(jié)碼,這樣它就可以被動(dòng)態(tài)地載入并用效地?cái)U(kuò)展主機(jī)的處理能力。

??? Servlet與applets不同的地方是,它不運(yùn)行在Web瀏覽器或其他圖形化的用戶界面上。Servlet通過(guò)servlet引擎運(yùn)行在Web服務(wù)器中,以執(zhí)行請(qǐng)求和響應(yīng),請(qǐng)求、響應(yīng)的典型范例是HTTP協(xié)議。

??? 一個(gè)客戶端程序,可以是一個(gè)Web瀏覽器,或者是非其他的可以連接上Internet的程序,它會(huì)訪問(wèn)Web服務(wù)器并發(fā)出請(qǐng)求。這個(gè)請(qǐng)求被運(yùn)行在Web服 務(wù)器上的Servlet引擎處理,并返回響應(yīng)到Servlet。Servlet通過(guò)HTTP將這個(gè)響應(yīng)轉(zhuǎn)發(fā)到客戶端。

在功能上,Servlet與CGI、NSAPI有點(diǎn)類似,但是,與他們不同的是:Servlet具有平臺(tái)無(wú)關(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)勢(shì),包括易升級(jí)以及平臺(tái)無(wú)關(guān)性。

?????? 它可以調(diào)用Java所提供的大量的API的功能模塊。

?????? 這份文檔說(shuō)明了Java Servlet API的類和接口的方法。有關(guān)更多的信息,請(qǐng)參看下面的API說(shuō)明。

1.7??? Servlet的生命周期

??? 一個(gè)Java servlet具有一個(gè)生命周期,這個(gè)生命周期定義了一個(gè)Servlet如何被載入并被初始化,如何接收請(qǐng)求并作出對(duì)請(qǐng)求的響應(yīng),如何被從服務(wù)中清除。Servlet的生命周期被javax.servlet.Servlet這個(gè)接口所定義。

??? 所有的Java Servlet都會(huì)直接地或間接地執(zhí)行javax.servlet.Servlet接口,這樣它才能在一個(gè)Servlet引擎中運(yùn)行。 Servlet引擎是Web 服務(wù)器按照J(rèn)ava Servlet API定制的擴(kuò)展。Servlet引擎提供網(wǎng)絡(luò)服務(wù),能夠理解MIME請(qǐng)求,并提供一 個(gè)運(yùn)行Servlet的容器。

??? javax.servlet.Servlet接口定義了在Servlet的生命周期中特定時(shí)間以及特定順序被調(diào)用的方法。

?

1.8??? Servlet的解析和載入

??? Servlet引擎解析并載入一個(gè)Servlet,這個(gè)過(guò)程可以發(fā)生在引擎啟動(dòng)時(shí),需要一個(gè)Servlet去響應(yīng)請(qǐng)求時(shí),以及在此之間的任何時(shí)候。

??? Servlet引擎利用Java類載入工具載入一個(gè)Servlet,Servlet引擎可以從一個(gè)本地的文件系統(tǒng)、一個(gè)遠(yuǎn)程的文件系統(tǒng)以及網(wǎng)絡(luò)載入Servlet。

?

1.9??? Servlet的初始化

??? Servlet引擎載入Servlet后,Servlet引擎必須對(duì)Servlet進(jìn)行初始化,在這一過(guò)程中,你可以讀取一些固定存儲(chǔ)的數(shù)據(jù)、初始化JDBC的連接以及建立與其他資源的連接。

??? 在初始化過(guò)程中,javax.servlet.Servlet接口的init()方法提供了Servlet的初始化信息。這樣,Servlet可以對(duì)自己進(jìn)行配置。

?????? init()方法獲得了一個(gè)Servlet配置對(duì)象(ServletConfig)。這個(gè)對(duì)象在Servlet引擎中執(zhí)行,并允許Servlet通過(guò)它獲處相關(guān)參數(shù)。這個(gè)對(duì)象使得Servlet能夠訪問(wèn)ServletContext對(duì)象。

?

1.10 ? ? ? Servlet處理請(qǐng)求

??? Servlet被初始化之后,它已經(jīng)可以處理來(lái)自客戶端的請(qǐng)求,每一個(gè)來(lái)自客戶端的請(qǐng)求都被描述成一個(gè)ServletRequest對(duì)象,Servlet的響應(yīng)被描述成一個(gè)ServletResponse對(duì)象。

??? 當(dāng)客戶端發(fā)出請(qǐng)求時(shí),Servlet引擎?zhèn)鬟f給Servlet一個(gè)ServletRequest對(duì)象和一個(gè)ServletResponse對(duì)象,這兩個(gè)對(duì)象作為參數(shù)傳遞到service()方法中。

??? Servlet 也可以執(zhí)行ServletRequest接口和ServletResponse接口。ServletRequest接口使得Servlet有權(quán)使用客戶端發(fā)出的請(qǐng)求。Servlet可以通過(guò)ServletInputStream對(duì)象讀取請(qǐng)求信息。

??? ServletResponse接口允許Servlet建立響應(yīng)頭和狀態(tài)代碼。通過(guò)執(zhí)行這個(gè)接口,Servlet有權(quán)使用ServletOutputStream類來(lái)向客戶端返回?cái)?shù)據(jù)。

?

1.11?????? 多線程和映射

??? 在多線程的環(huán)境下,Servlet必須能處理許多同時(shí)發(fā)生的請(qǐng)求。例外的情況是這個(gè)Servlet執(zhí)行了SingleThreadModel接口,如果是那樣的話,Servlet只能同時(shí)處理一個(gè)請(qǐng)求。

??? Servlet依照Servlet引擎的映射來(lái)響應(yīng)客戶端的請(qǐng)求。一個(gè)映射對(duì)包括一個(gè)Servlet實(shí)例以及一個(gè)Servlet返回?cái)?shù)據(jù)的URL,例如:HelloServlet with /hello/index.html。

??? 然而,一個(gè)映射可能是由一個(gè)URL和許多Servlet實(shí)例組成,例如:一個(gè)分布式的Servlet引擎可能運(yùn)行在不止一個(gè)的服務(wù)器中,這樣的話,每一個(gè)服務(wù)器中都可能有一個(gè)Servlet實(shí)例,以平衡進(jìn)程的載入。作為一個(gè)Servlet的開(kāi)發(fā)者,你不能假定一個(gè)Servlet只有一個(gè)實(shí)例。

?

1.12?????? Servlet的卸載

??? Servlet引擎并不必需保證一個(gè)Servlet在任何時(shí)候或在服務(wù)開(kāi)啟的任何時(shí)候都被載入。Servlet引擎可以自由的在任何時(shí)候使用或清除一個(gè)Servlet。因此,我們不能依賴一個(gè)類或?qū)嵗齺?lái)存儲(chǔ)重要的信息。

??? 當(dāng)Servlet引擎決定卸載一個(gè)Servlet時(shí)(例如,如果這個(gè)引擎被關(guān)閉或者需要讓資源),這個(gè)引擎必須允許Servlet釋放正在使用的資源并存儲(chǔ)有關(guān)資料。為了完成以上工作,引擎會(huì)調(diào)用Servlet的destroy()方法。

??? 在卸載一個(gè)Servlet之前,Servlet引擎必須等待所有的service()方法完成或超時(shí)結(jié)束(Servlet引擎會(huì)對(duì)超時(shí)作出定義)。當(dāng)一個(gè) Servlet被卸載時(shí),引擎將不能給Servlet發(fā)送任何請(qǐng)求。引擎必須釋放Servlet并完成無(wú)用存儲(chǔ)單元的收集

?

1.13?????? Servlet映射技術(shù)

??? 作為一個(gè)Servlet引擎的開(kāi)發(fā)者,你必須對(duì)于如何映射客戶端的請(qǐng)求到Servlet有大量的適應(yīng)性。這份說(shuō)明文檔不規(guī)定映射如何發(fā)生。但是,你必須能夠自由地運(yùn)用下面的所有技術(shù):

?

?????? 映射一個(gè)Servlet到一個(gè)URL

?????? 例如,你可以指定一個(gè)特殊的Servlet它僅被來(lái)自/feedback/index.html的請(qǐng)求調(diào)用。

?

?????? 映射一個(gè)Servlet到以一個(gè)指定的目錄名開(kāi)始的所有URL

?????? 例如,你可以映射一個(gè)Servlet到/catalog,這樣來(lái)自/catalog/、 /catalog/garden和 /catalog/housewares/index.html的請(qǐng)求都會(huì)被映射到這個(gè)Servlet。但是來(lái)自/catalogtwo 或 /catalog.html的請(qǐng)求沒(méi)被映射。

?

?????? 映射一個(gè)Servlet到所有以一個(gè)特定的字段結(jié)尾的所有URL

?????? 例如,你可以映射一個(gè)來(lái)自于所有以in.thtml結(jié)尾的請(qǐng)求到一個(gè)特定的Servlet。

?

?????? 映射一個(gè)Servlet到一個(gè)特殊的URL /servlet/servlet_name。

?????? 例如,如果你建立了一個(gè)名叫l(wèi)istattributes的Servlet,你可以通過(guò)使用/servlet/listattributes來(lái)訪問(wèn)這個(gè)Servlet。

?

1.14?????? 通過(guò)類名調(diào)用Servlet

?????? 例如,如果Servlet引擎接收了來(lái)自/servlet/com.foo.servlet.MailServlet的請(qǐng)求,Servlet引擎會(huì)載入這 個(gè)com.foo.servlet.MailServlet類,建立實(shí)例,并通過(guò)這個(gè)Servlet來(lái)處理請(qǐng)求。

?

1.15?????? Servlet環(huán)境

??? ServletContext 接口定義了一個(gè)Servlet環(huán)境對(duì)象,這個(gè)對(duì)象定義了一個(gè)在Servlet引擎上的Servlet的視圖。通過(guò)使用這個(gè)對(duì)象,Servlet可以記錄事 件、得到資源并得到來(lái)自Servlet引擎的類(例如RequestDispatcher對(duì)象)。一個(gè)Servlet只能運(yùn)行在一個(gè)Servlet環(huán)境 中,但是不同的Servlet可以在Servlet引擎上有不同的視圖。

?????? 如果Servlet引擎支持虛擬主機(jī),每個(gè)虛擬主機(jī)有一個(gè)Servlet環(huán)境。一個(gè)Servlet環(huán)境不能在虛擬主機(jī)之間共享。

?????? Servlet引擎能夠允許一個(gè)Servlet環(huán)境有它自己的活動(dòng)范圍。

??? ???例如,一個(gè)Servlet環(huán)境是屬于bank應(yīng)用的,它將被映射到/bank目錄下。在這種情況下,一個(gè)對(duì)getContext方法的調(diào)用會(huì)返回/bank的Servlet環(huán)境。

?

1.16?????? HTTP會(huì)話

??? HTTP是一個(gè)沒(méi)有狀態(tài)的協(xié)議。要建立一個(gè)有效的Web服務(wù)應(yīng)用,你必須能夠識(shí)別一個(gè)連續(xù)的來(lái)自遠(yuǎn)端的客戶機(jī)的唯一的請(qǐng)求。隨著時(shí)間的過(guò)去,發(fā)展了許多會(huì)話跟蹤的技術(shù),但是使用起來(lái)都比較麻煩。

?????? Java Servlet API提供了一個(gè)簡(jiǎn)單的接口,通過(guò)這個(gè)接口,Servlet引擎可以有效地跟蹤用戶的會(huì)話。

?

1.17?????? 建立Session

??? 因?yàn)镠TTP是一個(gè)請(qǐng)求-響應(yīng)協(xié)議,一個(gè)會(huì)話在客戶機(jī)加入之前會(huì)被認(rèn)為是一個(gè)新的會(huì)話。加入的意思是返回會(huì)話跟蹤信息到服務(wù)器中,指出會(huì)話已被建立。在客戶端加入之前,我們不能判斷下一個(gè)客戶端請(qǐng)求是目前會(huì)話的一部分。

在下面的情況下,Session會(huì)被認(rèn)為是新的Session。客戶端的Session在此之前還不知道客戶端選擇不加入Session,例如,如果客戶端拒絕接收來(lái)自服務(wù)器的cookie作 為一個(gè)Servlet的開(kāi)發(fā)者,你必須決定你的Web應(yīng)用是否處理客戶機(jī)不加入或不能加入Session。服務(wù)器會(huì)在Web服務(wù)器或Servlet規(guī)定的時(shí)間內(nèi)維持一個(gè)Session對(duì)象。當(dāng)Session終止時(shí),服務(wù)器會(huì)釋放Session對(duì)象以及所有綁定在Session上的對(duì)象。

綁定對(duì)象到Session中

??? 如果有助于你處理應(yīng)用的數(shù)據(jù)需求,你也許需要綁定對(duì)象到Session中,你可以通過(guò)一個(gè)唯一的名字綁定任何的對(duì)象到Session中,這時(shí),你需要使用 HttpSession對(duì)象。任何綁定到Session上的對(duì)象都可以被處理同一會(huì)話的Servlet調(diào)用。

??? 有些對(duì)象可能需要你知道什么時(shí)候會(huì)被放置到Session中或從Session中移開(kāi)。你可以通過(guò)使用HttpSessionBindingListener接口獲得這些信息。當(dāng)你的應(yīng)用存儲(chǔ)數(shù)據(jù)到Session中,或從Session中清除數(shù)據(jù),Servlet都會(huì)通過(guò)HttpSessionBindingListener檢杳什么類被綁定或被取消綁定。這個(gè)接口的方法會(huì)通報(bào)被綁定或被取消綁定的對(duì)象。

?

2 ?API介紹

API對(duì)象的說(shuō)明

??? 這一部分包含了對(duì)Java Servlet API的全部類和接口的詳細(xì)說(shuō)明。這個(gè)說(shuō)明與Javadoc API差不多,但是這份文檔提供了更多的信息。

API包含了兩個(gè)軟件包,十二個(gè)接口和九個(gè)類。

軟件包: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;

?????? 定義一個(gè)對(duì)象,從客戶端接收請(qǐng)求,然后將它發(fā)給服務(wù)器的可用資源(例如Servlet、CGI、HTML文件、JSP文件)。Servlet引擎創(chuàng)建request dispatcher對(duì)象,用于封裝由一個(gè)特定的URL定義的服務(wù)器資源。

?????? 這個(gè)接口是專用于封裝Servlet的,但是一個(gè)Servlet引擎可以創(chuàng)建request dispatcher對(duì)象用于封裝任何類型的資源。

?????? request dispatcher對(duì)象是由Servlet引擎建立的,而不是由Servlet開(kāi)發(fā)者建立的。

?????? 方法

?????? 1、forward

?????? public void forward(ServletRequest request, ServletReponse response)

???????????? throws ServletException, IOException;

?????? 被用來(lái)從這個(gè)Servlet向其它服務(wù)器資源傳遞請(qǐng)求。當(dāng)一個(gè)Servlet對(duì)響應(yīng)作了初步的處理,并要求其它的對(duì)象對(duì)此作出響應(yīng)時(shí),可以使用這個(gè)方法。

?????? 當(dāng)request對(duì)象被傳遞到目標(biāo)對(duì)象時(shí),請(qǐng)求的URL路徑和其他路徑參數(shù)會(huì)被調(diào)整為反映目標(biāo)對(duì)象的目標(biāo)URL路徑。

?????? 如果已經(jīng)通過(guò)響應(yīng)返回了一個(gè)ServletOutputStream對(duì)象或PrintWriter對(duì)象,這個(gè)方法將不能使用,否則,這個(gè)方法會(huì)拋出一個(gè)IllegalStateException。

?????? 2、include

?????? public void include(ServletRequest request, ServletResponse response)

???????????? throws ServletException, IOException

?????? 用來(lái)包括發(fā)送給其他服務(wù)器資源的響應(yīng)的內(nèi)容。本質(zhì)上來(lái)說(shuō),這個(gè)方法反映了服務(wù)器端的內(nèi)容。

?????? 請(qǐng)求對(duì)象傳到目標(biāo)對(duì)象后會(huì)反映調(diào)用請(qǐng)求的請(qǐng)求URL路徑和路徑信息。這個(gè)響應(yīng)對(duì)象只能調(diào)用這個(gè)Servlet的ServletOutputStream對(duì)象和PrintWriter對(duì)象。

?????? 一個(gè)調(diào)用include的Servlet不能設(shè)置頭域,如果這個(gè)Servlet調(diào)用了必須設(shè)置頭域的方法(例如cookie),這個(gè)方法將不能保證正常使用。作為一個(gè)Servlet開(kāi)發(fā)者,你必須妥善地解決那些可能直接存儲(chǔ)頭域的方法。例如,即使你使用會(huì)話跟蹤,為了保證session的正常工作,你必須在一個(gè)調(diào)用include的Servlet之外開(kāi)始你的session

?

2.2??? Servlet接口

?????? 定義

?????? public interface Servlet

?????? 這個(gè)接口定義了一個(gè)Servlet:一個(gè)在Web服務(wù)器上繼承了這個(gè)功能的Java類。

?????? 方法

?????? 1、init

?????? public void init(ServletConfig config) throws ServletException;

?????? Servlet引擎會(huì)在Servlet實(shí)例化之后,置入服務(wù)之前精確地調(diào)用init方法。在調(diào)用service方法之前,init方法必須成功退出。

?????? 如果init方法拋出一個(gè)ServletException,你不能將這個(gè)Servlet置入服務(wù)中,如果init方法在超時(shí)范圍內(nèi)沒(méi)完成,我們也可以假定這個(gè)Servlet是不具備功能的,也不能置入服務(wù)中。

?????? 2、service

?????? public void service(ServletRequest request, ServletResponse response)

???????????? throws ServletException, IOException;

?????? Servlet引擎調(diào)用這個(gè)方法以允許Servlet響應(yīng)請(qǐng)求。這個(gè)方法在Servlet未成功初始化之前無(wú)法調(diào)用。在Servlet被初始化之前,Servlet引擎能夠封鎖未決的請(qǐng)求。

?????? 在一個(gè)Servlet對(duì)象被卸載后,直到一個(gè)新的Servelt被初始化,Servlet引擎不能調(diào)用這個(gè)方法

?????? 3、destroy

?????? public void destroy();

?????? 當(dāng)一個(gè)Servlet被從服務(wù)中去除時(shí),Servlet引擎調(diào)用這個(gè)方法。在這個(gè)對(duì)象的service方法所有線程未全部退出或者沒(méi)被引擎認(rèn)為發(fā)生超時(shí)操作時(shí),destroy方法不能被調(diào)用。

?????? 4、getServletConfig

?????? public ServletConfig getServletConfig();

?????? 返回一個(gè)ServletConfig對(duì)象,作為一個(gè)Servlet的開(kāi)發(fā)者,你應(yīng)該通過(guò)init方法存儲(chǔ)ServletConfig對(duì)象以便這個(gè)方法能返回這個(gè)對(duì)象。為了你的便利,GenericServlet在執(zhí)行這個(gè)接口時(shí),已經(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

?????? 這個(gè)接口定義了一個(gè)對(duì)象,通過(guò)這個(gè)對(duì)象,Servlet引擎配置一個(gè)Servlet并且允許Servlet獲得一個(gè)有關(guān)它的ServletContext接口的說(shuō)明。每一個(gè)ServletConfig對(duì)象對(duì)應(yīng)著一個(gè)唯一的Servlet。

?????? 方法

?????? 1、getInitParameter

?????? public String getInitParameter(String name);

?????? 這個(gè)方法返回一個(gè)包含Servlet指定的初始化參數(shù)的String。如果這個(gè)參數(shù)不存在,返加空值。

?????? 2、getInitParameterNames

?????? public Enumeration getInitParameterNames();

?????? 這個(gè)方法返回一個(gè)列表String對(duì)象,該對(duì)象包括Servlet的所有初始化參數(shù)名。如果Servlet沒(méi)有初始化參數(shù),getInitParameterNames返回一個(gè)空的列表。

?????? 3、getServletContext

?????? public ServletContext getServletContext();

?????? 返回這個(gè)Servlet的ServletContext對(duì)象。

?

2.4??? ServletContext接口

?????? 定義

?????? public interface ServletContext

?????? 定義了一個(gè)Servlet的環(huán)境對(duì)象,通過(guò)這個(gè)對(duì)象,Servlet引擎向Servlet提供環(huán)境信息。

?????? 一個(gè)Servlet的環(huán)境對(duì)象必須至少與它所駐留的主機(jī)是一一對(duì)應(yīng)的。在一個(gè)處理多個(gè)虛擬主機(jī)的Servlet引擎中(例如,使用了HTTP1.1的主機(jī) 頭域),每一個(gè)虛擬主機(jī)必須被視為一個(gè)單獨(dú)的環(huán)境。此外,Servlet引擎還可以創(chuàng)建對(duì)應(yīng)于一組Servlet的環(huán)境對(duì)象。

?????? 方法

?????? 1、getAttribute

?????? public Object getAttribute(String name);

?????? 返回Servlet環(huán)境對(duì)象中指定的屬性對(duì)象。如果該屬性對(duì)象不存在,返回空值。這個(gè)方法允許訪問(wèn)有關(guān)這個(gè)Servlet引擎的在該接口的其他方法中尚未提供的附加信息。

?????? 2、getAttributeNames

?????? public Enumeration getAttributeNames();

?????? 返回一個(gè)Servlet環(huán)境對(duì)象中可用的屬性名的列表。

?????? 3、getContext

?????? public ServletContext getContext(String uripath);

?????? 返回一個(gè)Servlet環(huán)境對(duì)象,這個(gè)對(duì)象包括了特定URI路徑的Servlets和資源,如果該路徑不存在,則返回一個(gè)空值。URI路徑格式是/dir/dir/filename.ext。

?????? 為了安全,如果通過(guò)這個(gè)方法訪問(wèn)一個(gè)受限制的Servlet的環(huán)境對(duì)象,會(huì)返回一個(gè)空值。

?????? 4、getMajorVersion

?????? public int getMajorVersion();

?????? 返回Servlet引擎支持的Servlet API的主版本號(hào)。例如對(duì)于2.1版,這個(gè)方法會(huì)返回一個(gè)整數(shù)2。

?????? 5、getMinorVersion

?????? public int getMinorVersion();

?????? 返回Servlet引擎支持的Servlet API的次版本號(hào)。例如對(duì)于2.1版,這個(gè)方法會(huì)返回一個(gè)整數(shù)2。

?????? 6、getMimeType

?????? public String getMimeType(String file);

??? ???返回指定文件的MIME類型,如果這種MIME類型未知,則返回一個(gè)空值。MIME類型是由Servlet引擎的配置決定的。

?????? 7、getRealPath

?????? public String getRealPath(String path);

?????? 一個(gè)符合URL路徑格式的指定的虛擬路徑的格式是:/dir/dir/filename.ext。用這個(gè)方法,可以返回與一個(gè)符合該格式的虛擬路徑相對(duì)應(yīng)的真實(shí)路徑的String。這個(gè)真實(shí)路徑的格式應(yīng)該適合于運(yùn)行這個(gè)Servlet引擎的計(jì)算機(jī)(包括其相應(yīng)的路徑解析器)。

?????? 不管是什么原因,如果這一從虛擬路徑轉(zhuǎn)換成實(shí)際路徑的過(guò)程不能執(zhí)行,該方法將會(huì)返回一個(gè)空值。

?????? 8、getResource

?????? public URL getResource(String uripath);

?????? 返回一個(gè)URL對(duì)象,該對(duì)象反映位于給定的URL地址(格式:/dir/dir/filename.ext)的Servlet環(huán)境對(duì)象已知的資源。無(wú)論 URLStreamHandlers對(duì)于訪問(wèn)給定的環(huán)境是不是必須的,Servlet引擎都必須執(zhí)行。如果給定的路徑的Servlet環(huán)境沒(méi)有已知的資源,該方法會(huì)返回一個(gè)空值。

?????? 這個(gè)方法和java.lang.Class的getResource方法不完全相同。 java.lang.Class的getResource方法通過(guò)裝載類來(lái)尋找資源。而這個(gè)方法允許服務(wù)器產(chǎn)生環(huán)境變量給任何資源的任何Servlet, 而不必依賴于裝載類、特定區(qū)域等等。

?????? 9、getResourceAsStream

?????? public InputStream getResourceAsStream(String uripath);

?????? 返回一個(gè)InputStream對(duì)象,該對(duì)象引用指定的URL的Servlet環(huán)境對(duì)象的內(nèi)容。如果沒(méi)找到Servlet環(huán)境變量,就會(huì)返回空值,URL路徑應(yīng)該具有這種格式:/dir/dir/filename.ext。

?????? 這個(gè)方法是一個(gè)通過(guò)getResource方法獲得URL對(duì)象的方便的途徑。請(qǐng)注意,當(dāng)你使用這個(gè)方法時(shí),meta-information(例如內(nèi)容長(zhǎng)度、內(nèi)容類型)會(huì)丟失。

?????? 10、getRequestDispatcher

???? ??public RequestDispatcher getRequestDispatcher(String uripath);

?????? 如果這個(gè)指定的路徑下能夠找到活動(dòng)的資源(例如一個(gè)Servlet,JSP頁(yè)面,CGI等等)就返回一個(gè)特定URL的RequestDispatcher 對(duì)象,否則,就返回一個(gè)空值,Servlet引擎負(fù)責(zé)用一個(gè)request dispatcher對(duì)象封裝目標(biāo)路徑。這個(gè) request dispatcher對(duì)象可以用來(lái)完全請(qǐng)求的傳送。

?????? 11、getServerInfo

?????? public String getServerInfo();

?????? 返回一個(gè)String對(duì)象,該對(duì)象至少包括Servlet引擎的名字和版本號(hào)。

?????? 12、log

?????? public void log(String msg);

?????? public void log(String msg, Throwable t);

?????? public void log(Exception exception, String msg); // 這種用法將被取消

?????? 寫指定的信息到一個(gè)Servlet環(huán)境對(duì)象的log文件中。被寫入的log文件由Servlet引擎指定,但是通常這是一個(gè)事件log。當(dāng)這個(gè)方法被一個(gè)異常調(diào)用時(shí),log中將包括堆棧跟蹤。

?????? 13、setAttribute

?????? public void setAttribute(String name, Object o);

?????? 給予Servlet環(huán)境對(duì)象中你所指定的對(duì)象一個(gè)名稱。

?????? 14、removeAttribute

?????? public void removeAttribute(String name);

?????? 從指定的Servlet環(huán)境對(duì)象中刪除一個(gè)屬性。

?????? 注:以下幾個(gè)方法將被取消

?????? 15、getServlet

?????? public Servlet getServlet(String name) throws ServletException;

?????? 最初用來(lái)返回一個(gè)指定名稱的Servlet,如果沒(méi)找到就返回一個(gè)空值。如果這個(gè)Servlet能夠返回,這就意味著它已經(jīng)被初始化,而且已經(jīng)可以接受 service請(qǐng)求。這是一個(gè)危險(xiǎn)的方法。當(dāng)調(diào)用這個(gè)方法時(shí),可能并不知道Servlet的狀態(tài),這就可能導(dǎo)致有關(guān)服務(wù)器狀態(tài)的問(wèn)題。而允許一個(gè) Servlet訪問(wèn)其他Servlet的這個(gè)方法也同樣的危險(xiǎn)。

?????? 現(xiàn)在這個(gè)方法返回一個(gè)空值,為了保持和以前版本的兼容性,現(xiàn)在這個(gè)方法還沒(méi)有被取消。在以后的API版本中,該方法將被取消。

?????? 16、getServletNames

?????? public Enumeration getServletNames();

?????? 最初用來(lái)返回一個(gè)String對(duì)象的列表,該列表表示了在這個(gè)Servlet環(huán)境下所有已知的Servlet對(duì)象名。這個(gè)列表總是包含這個(gè)Servlet自身。

基于與上一個(gè)方法同樣的理由,這也是一個(gè)危險(xiǎn)的方法。

?????? 現(xiàn)在這個(gè)方法返回一個(gè)空的列表。為了保持和以前版本的兼容性,現(xiàn)在這個(gè)方法還沒(méi)有被取消。在以后的API版本中,該方法將被取消。

?????? 17、getServlets

?????? public Enumeration getServlets();

?????? 最初用來(lái)返回在這個(gè)Servelet環(huán)境下所有已知的Servlet對(duì)象的列表。這個(gè)列表總是包含這個(gè)Servlet自身。

基于與getServlet方法同樣的理由,這也是一個(gè)危險(xiǎn)的方法。

?????? 現(xiàn)在這個(gè)方法返回一個(gè)空的列表。為了保持和以前版本的兼容性,現(xiàn)在這個(gè)方法還沒(méi)有被取消。在以后的API版本中,該方法將被取消。

?

2.5??? ServletRequest接口

?????? 定義

?????? public interface ServletRequest

?????? 定義一個(gè)Servlet引擎產(chǎn)生的對(duì)象,通過(guò)這個(gè)對(duì)象,Servlet可以獲得客戶端請(qǐng)求的數(shù)據(jù)。這個(gè)對(duì)象通過(guò)讀取請(qǐng)求體的數(shù)據(jù)提供包括參數(shù)的名稱、值和屬性以及輸入流的所有數(shù)據(jù)。

?????? 方法

?????? 1、getAttribute

?????? public Object getAttribute(String name);

?????? 返回請(qǐng)求中指定屬性的值,如果這個(gè)屬性不存在,就返回一個(gè)空值。這個(gè)方法允許訪問(wèn)一些不提供給這個(gè)接口中其他方法的請(qǐng)求信息以及其他Servlet放置在這個(gè)請(qǐng)求對(duì)象內(nèi)的數(shù)據(jù)。

?????? 2、getAttributeNames

?????? public Enumeration getAttributeNames();

?????? 返回包含在這個(gè)請(qǐng)求中的所有屬性名的列表。

?????? 3、getCharacterEncoding

?????? public String getCharacterEncoding();

?????? 返回請(qǐng)求中輸入內(nèi)容的字符編碼類型,如果沒(méi)有定義字符編碼類型就返回空值。

?????? 4、getContentLength

?????? public int getContentLength();

?????? 請(qǐng)求內(nèi)容的長(zhǎng)度,如果長(zhǎng)度未知就返回-1。

?????? 5、getContentType

?????? public String getContentType();

?????? 返回請(qǐng)求數(shù)據(jù)體的MIME類型,如果類型未知返回空值。

?????? 6、getInputStream

?????? public ServletInputStream getInputStream() throws IOException;

?????? 返回一個(gè)輸入流用來(lái)從請(qǐng)求體讀取二進(jìn)制數(shù)據(jù)。如果在此之前已經(jīng)通過(guò)getReader方法獲得了要讀取的結(jié)果,這個(gè)方法會(huì)拋出一個(gè)IllegalStateException。

?????? 7、getParameter

?????? public String getParameter(String name);

?????? 以一個(gè)String返回指定的參數(shù)的值,如果這個(gè)參數(shù)不存在返回空值。例如,在一個(gè)HTTP Servlet中,這個(gè)方法會(huì)返回一個(gè)指定的查詢語(yǔ)句產(chǎn)生的參數(shù)的值或一個(gè)被提交的表單中的參數(shù)值。如果一個(gè)參數(shù)名對(duì)應(yīng)著幾個(gè)參數(shù)值,這個(gè)方法只能返回通過(guò)getParameterValues方法返回的數(shù)組中的第一個(gè)值。因此,如果這個(gè)參數(shù)有(或者可能有)多個(gè)值,你只能使用getParameterValues方法。

?????? 8、getParameterNames

?????? public Enumeration getParameterNames();

?????? 返回所有參數(shù)名的String對(duì)象列表,如果沒(méi)有輸入?yún)?shù),該方法返回一個(gè)空值。

?????? 9、getParameterValues

?????? public String[] getParameterValues(String name);

? ?????通過(guò)一個(gè)String對(duì)象的數(shù)組返回指定參數(shù)的值,如果這個(gè)參數(shù)不存在,該方法返回一個(gè)空值。

?????? 10、getProtocol

?????? public String getProtocol();

?????? 返回這個(gè)請(qǐng)求所用的協(xié)議,其形式是協(xié)議/主版本號(hào).次版本號(hào)。例如對(duì)于一個(gè)HTTP1.0的請(qǐng)求,該方法返回HTTP/1.0。

?????? 11、getReader

?????? public BufferedReader getReader() throws IOException;

?????? 這個(gè)方法返回一個(gè)buffered reader用來(lái)讀取請(qǐng)求體的實(shí)體,其編碼方式依照請(qǐng)求數(shù)據(jù)的編碼方式。如果這個(gè)請(qǐng)求的輸入流已經(jīng)被getInputStream調(diào)用獲得,這個(gè)方法會(huì)拋出一個(gè)IllegalStateException。

?????? 12、getRemoteAddr

?????? public String getRemoteAddr();

?????? 返回發(fā)送請(qǐng)求者的IP地址。

?????? 13、getRemoteHost

?????? public String getRemoteHost();

?????? 返回發(fā)送請(qǐng)求者的主機(jī)名稱。如果引擎不能或者選擇不解析主機(jī)名(為了改善性能),這個(gè)方法會(huì)直接返回IP地址。

?????? 14、getScheme

?????? public String getScheme();

?????? 返回請(qǐng)求所使用的URL的模式。例如,對(duì)于一個(gè)HTTP請(qǐng)求,這個(gè)模式就是http。

?????? 15、getServerName

?????? public String getServerName();

?????? 返回接收請(qǐng)求的服務(wù)器的主機(jī)名。

?????? 16、getServerPort

?????? public int getServerPort();

?????? 返回接收請(qǐng)求的端口號(hào)。

?????? 17、setAttribute

?????? public void setAttribute(String name, Object object);

?????? 這個(gè)方法在請(qǐng)求中添加一個(gè)屬性,這個(gè)屬性可以被其他可以訪問(wèn)這個(gè)請(qǐng)求對(duì)象的對(duì)象(例如一個(gè)嵌套的Servlet)使用。

?????? 注:以下方法將被取消

?????? getRealPath

?????? public String getRealPath(String path);

?????? 返回與虛擬路徑相對(duì)應(yīng)的真實(shí)路徑,如果因?yàn)槟撤N原因,這一過(guò)程不能進(jìn)行,該方法將返回一個(gè)空值。

?????? 這個(gè)方法和ServletContext接口中的getRealPath方法重復(fù)。在2.1版中,ServletContext接口將闡明一個(gè) Servlet所能用的所有的路徑的映射。該方法執(zhí)行的結(jié)果將會(huì)與ServletContext中g(shù)etRealPath方法的結(jié)果完全一樣。

?

2.6??? ServletResponse接口

?????? 定義

?????? public interface ServletResponse

?????? 定義一個(gè)Servlet引擎產(chǎn)生的對(duì)象,通過(guò)這個(gè)對(duì)象,Servlet對(duì)客戶端的請(qǐng)求作出響應(yīng)。這個(gè)響應(yīng)應(yīng)該是一個(gè)MIME實(shí)體,可能是一個(gè)HTML頁(yè)、圖象數(shù)據(jù)或其他MIME的格式。

?????? 方法

?????? 1、getCharacterEncoding

?????? public String getCharacterEncoding();

?????? 返回MIME實(shí)體的字符編碼。這個(gè)字符編碼可以是指定的類型,也可以是與請(qǐng)求頭域所反映的客戶端所能接受的字符編碼最匹配的類型。在HTTP協(xié)議中,這個(gè)信息被通過(guò)Accept-Charset傳送到Servlet引擎。

?????? 有關(guān)字符編碼和MIME的更多信息請(qǐng)參看RFC 2047。

?????? 2、getOutputStream

?????? public ServletOutputStream getOutputStream() throws IOException;

?????? 返回一個(gè)記錄二進(jìn)制的響應(yīng)數(shù)據(jù)的輸出流。

?????? 如果這個(gè)響應(yīng)對(duì)象已經(jīng)調(diào)用getWriter,將會(huì)拋出IllegalStateException。

?????? 3、getWriter

?????? public PrintWriter getWriter throws IOException;

?????? 這個(gè)方法返回一個(gè)PringWriter對(duì)象用來(lái)記錄格式化的響應(yīng)實(shí)體。如果要反映使用的字符編碼,必須修改響應(yīng)的MIME類型。在調(diào)用這個(gè)方法之前,必須設(shè)定響應(yīng)的content類型。

?????? 如果沒(méi)有提供這樣的編碼類型,會(huì)拋出一個(gè)UnsupportedEncodingException,如果這個(gè)響應(yīng)對(duì)象已調(diào)用getOutputStream,會(huì)拋出一個(gè)getOutputStream。

?????? 4、setContentLength

?????? public void setContentLength(int length);

?????? 設(shè)置響應(yīng)的內(nèi)容的長(zhǎng)度,這個(gè)方法會(huì)覆蓋以前對(duì)內(nèi)容長(zhǎng)度的設(shè)定。

?????? 為了保證成功地設(shè)定響應(yīng)頭的內(nèi)容長(zhǎng)度,在響應(yīng)被提交到輸出流之前必須調(diào)用這個(gè)方法。

?????? 5、setContentType

?????? public void setContentType(String type);

?????? 這個(gè)方法用來(lái)設(shè)定響應(yīng)的content類型。這個(gè)類型以后可能會(huì)在另外的一些情況下被隱式地修改,這里所說(shuō)的另外的情況可能當(dāng)服務(wù)器發(fā)現(xiàn)有必要的情況下對(duì)MIME的字符設(shè)置。

?????? 為了保證成功地設(shè)定響應(yīng)頭的content類型,在響應(yīng)被提交到輸出流之前必須調(diào)用這個(gè)方法。

?

2.7??? ?SingleThreadModel接口

?????? 定義

?????? public interface SingleThreadModel;

?????? 這是一個(gè)空接口,它指定了系統(tǒng)如何處理對(duì)同一個(gè)Servlet的調(diào)用。如果一個(gè)Servlet被這個(gè)接口指定,那么在這個(gè)Servlet中的service方法中將不會(huì)有兩個(gè)線程被同時(shí)執(zhí)行。

?????? Servlet可以通過(guò)維持一個(gè)各自獨(dú)立的Servlet實(shí)例池,或者通過(guò)只讓Servlet的service中只有一個(gè)線程的方法來(lái)實(shí)現(xiàn)這個(gè)保證。

?

2.8??? GenericServlet類

?????? public abstract class GenericServlet implements Servlet,

???????????? ServletConfig, Serializable;

?????? 這個(gè)類的存在使得編寫Servlet更加方便。它提供了一個(gè)簡(jiǎn)單的方案,這個(gè)方案用來(lái)執(zhí)行有關(guān)Servlet生命周期的方法以及在初始化時(shí)對(duì)ServletConfig對(duì)象和ServletContext對(duì)象進(jìn)行說(shuō)明。

?????? 方法

?????? 1、destroy

?????? public void destroy();

?????? 在這里destroy方法不做任何其他的工作。

?????? 2、getInitParameter

?????? public String getInitParameter(String name);

?????? 這是一個(gè)簡(jiǎn)便的途徑,它將會(huì)調(diào)用ServletConfig對(duì)象的同名的方法。

?????? 3、getInitParameterNames

?????? public Enumeration getInitParameterNames();

?????? 這是一個(gè)簡(jiǎn)便的途徑,它將會(huì)調(diào)用ServletConfig對(duì)象的同名的方法。

? ?????4、getServletConfig

?????? public ServletConfig getServletConfig();

?????? 返回一個(gè)通過(guò)這個(gè)類的init方法產(chǎn)生的ServletConfig對(duì)象的說(shuō)明。

?????? 5、getServletContext

?????? public ServletContext getServletContext();

?????? 這是一個(gè)簡(jiǎn)便的途徑,它將會(huì)調(diào)用ServletConfig對(duì)象的同名的方法。

?????? 6、getServletInfo

?????? public String getServletInfo();

?????? 返回一個(gè)反映Servlet版本的String。

?????? 7、init

?????? public void init() throws ServletException;

?????? public void init(ServletConfig config) throws ServletException;

?????? init(ServletConfig config)方法是一個(gè)對(duì)這個(gè)Servlet的生命周期進(jìn)行初始化的簡(jiǎn)便的途徑。

?????? init()方法是用來(lái)讓你對(duì)GenericServlet類進(jìn)行擴(kuò)充的,使用這個(gè)方法時(shí),你不需要存儲(chǔ)config對(duì)象,也不需要調(diào)用super.init(config)。

?????? init(ServletConfig config)方法會(huì)存儲(chǔ)config對(duì)象然后調(diào)用init()。如果你重載了這個(gè)方法,你必須調(diào)用super.init(config),這樣GenericServlet類的其他方法才能正常工作。

?????? 8、log

????? ?public void log(String msg);

?????? public void log(String msg, Throwable cause);

?????? 通過(guò)Servlet content對(duì)象將Servlet的類名和給定的信息寫入log文件中。

?????? 9、service

?????? public abstract void service(ServletRequest request, ServletResponse

???????????? response) throws ServletException, IOException;

?????? 這是一個(gè)抽象的方法,當(dāng)你擴(kuò)展這個(gè)類時(shí),為了執(zhí)行網(wǎng)絡(luò)請(qǐng)求,你必須執(zhí)行它。

?

2.9??? ServletInputStream類

?????? 定義

?????? public abstract class ServletInputStream extends InputStream

?????? 這個(gè)類定義了一個(gè)用來(lái)讀取客戶端的請(qǐng)求信息的輸入流。這是一個(gè)Servlet引擎提供的抽象類。一個(gè)Servlet通過(guò)使用ServletRequest接口獲得了對(duì)一個(gè)ServletInputStream對(duì)象的說(shuō)明。

?????? 這個(gè)類的子類必須提供一個(gè)從InputStream接口讀取有關(guān)信息的方法。

?????? 方法

?????? 1、readLine

?????? public int readLine(byte[] b, int off, int len) throws IOException;

?????? 從輸入流的指定的偏移量開(kāi)始將指定長(zhǎng)度的字節(jié)讀入到指定的數(shù)組中。如果該行所有請(qǐng)求的內(nèi)容都已被讀取,這個(gè)讀取的過(guò)程將結(jié)束。如果是遇到了新的一行,新的一行的首個(gè)字符也將被讀入到數(shù)組中。

?

2.10 ? ?ServletOutputStream類

?????? 定義

?????? public abstract class ServletOutputStream extends OutputStream

?????? 這是一個(gè)由Servlet引擎使用的抽象類。Servlet通過(guò)使用ServletResponse接口的使用獲得了對(duì)一個(gè)這種類型的對(duì)象的說(shuō)明。利用這個(gè)輸出流可以將數(shù)據(jù)返回到客戶端。

?????? 這個(gè)類的子類必須提供一個(gè)向OutputStream接口寫入有關(guān)信息的方法。

?????? 在這個(gè)接口中,當(dāng)一個(gè)刷新或關(guān)閉的方法被調(diào)用時(shí)。所有數(shù)據(jù)緩沖區(qū)的信息將會(huì)被發(fā)送到客戶端,也就是說(shuō)響應(yīng)被提交了。請(qǐng)注意,關(guān)閉這種類型的對(duì)象時(shí)不一定要關(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;

?????? 輸出變量到輸出流中,并增加一個(gè)回車換行符

?

2.11 ? ?ServletException類

?????? 定義

?????? public class ServletException extends Exception

?????? 當(dāng)Servlet遇到問(wèn)題時(shí)拋出的一個(gè)異常。

?????? 構(gòu)造函數(shù)

?????? public ServletException();

?????? public ServletException(String message);

?????? public ServletException(String message, Throwable cause);

?????? public ServletException(Throwable cause);

?????? 構(gòu)造一個(gè)新的ServletException,如果這個(gè)構(gòu)造函數(shù)包括一個(gè)Throwable參數(shù),這個(gè)Throwable對(duì)象將被作為可能拋出這個(gè)異常的原因。

?????? 方法

?????? 1、getRootCause

?????? public Throwable getRootCause();

?????? 如果配置了拋出這個(gè)異常的原因,這個(gè)方法將返回這個(gè)原因,否則返回一個(gè)空值。

?

2.12?????? UnavailableException類

?????? 定義

?????? public class UnavailableException extends ServletException

?????? 不論一個(gè)Servlet是永久地還是臨時(shí)地?zé)o效,都會(huì)拋出這個(gè)異常。Servlet會(huì)記錄這個(gè)異常以及Servlet引擎所要采取的相應(yīng)措施。

?????? 臨時(shí)的無(wú)效是指Servlet在某一時(shí)間由于一個(gè)臨時(shí)的問(wèn)題而不能處理請(qǐng)求。例如,在另一個(gè)不同的應(yīng)用層的服務(wù)(可能是數(shù)據(jù)庫(kù))無(wú)法使用。這個(gè)問(wèn)題可能會(huì)自行糾正或者需要采取其他的糾正措施。

?????? 永久的無(wú)效是指除非管理員采取措施,這個(gè)Servlet將不能處理客戶端的請(qǐng)求。例如,這個(gè)Servlet配置信息丟失或Servlet的狀態(tài)被破壞。

?????? Servlet 引擎可以安全地處理包括永久無(wú)效在內(nèi)的這兩種異常,但是對(duì)臨時(shí)無(wú)效的正常處理可以使得Servlet引擎更健壯。特別的,這時(shí)對(duì)Servlet的請(qǐng)求只是 被阻止(或者是被延期)一段時(shí)間,這顯然要比在service自己重新啟動(dòng)前完全拒絕請(qǐng)求更為科學(xué)。

?????? 構(gòu)造函數(shù)

?????? public UnavailableException(Servlet servlet, String message);

?????? public UnavailableException(int seconds, Servlet servlet,

???????????? String message);

?????? 構(gòu)造一個(gè)包含指定的描述信息的新的異常。如果這個(gè)構(gòu)造函數(shù)有一個(gè)關(guān)于秒數(shù)的參數(shù),這將給出Servlet發(fā)生臨時(shí)無(wú)效后,能夠重新處理請(qǐng)求的估計(jì)時(shí)間。如果不包含這個(gè)參數(shù),這意味著這個(gè)Servlet永久無(wú)效。

?????? 方法

?????? 1、getServlet

?????? public Servlet getServlet();

?????? 返回報(bào)告無(wú)效的Servlet。這被Servlet引擎用來(lái)識(shí)別受到影響的Servlet。

?????? 2、getUnavailableSeconds

?????? public int getUnavailableSeconds();

?????? 返回Servlet預(yù)期的無(wú)效時(shí)間,如果這個(gè)Servlet是永久無(wú)效,返回-1。

?????? 3、isPermanent

?????? public boolean isPermanent();

?????? 如果這個(gè)Servlet永久無(wú)效,返回布爾值true,指示必須采取一些管理行動(dòng)以使得這個(gè)Servlet可用。

?

軟件包:javax.servlet.http

?????? 所包含的接口:HttpServletRequest;HttpServletResponse;HttpSession;HttpSessionBindingListener;HttpSessionContext。

?????? 所包含的類:Cookie;HttpServlet;HttpSessionBindingEvent;HttpUtils。


2.13?????? HttpServletRequest接口

?????? 定義

?????? public interface HttpServletRequest extends ServletRequest;

?????? 用來(lái)處理一個(gè)對(duì)Servlet的HTTP格式的請(qǐng)求信息。

?????? 方法

?????? 1、getAuthType

?????? public String getAuthType();

?? ????返回這個(gè)請(qǐng)求的身份驗(yàn)證模式。

?????? 2、getCookies

?????? public Cookie[] getCookies();

?????? 返回一個(gè)數(shù)組,該數(shù)組包含這個(gè)請(qǐng)求中當(dāng)前的所有cookie。如果這個(gè)請(qǐng)求中沒(méi)有cookie,返回一個(gè)空數(shù)組。

?????? 3、getDateHeader

?????? public long getDateHeader(String name);

?????? 返回指定的請(qǐng)求頭域的值,這個(gè)值被轉(zhuǎn)換成一個(gè)反映自1970-1-1日(GMT)以來(lái)的精確到毫秒的長(zhǎng)整數(shù)。

?????? 如果頭域不能轉(zhuǎn)換,拋出一個(gè)IllegalArgumentException。如果這個(gè)請(qǐng)求頭域不存在,這個(gè)方法返回-1。

?????? 4、getHeader

?????? public String getHeader(String name);

?????? 返回一個(gè)請(qǐng)求頭域的值。(譯者注:與上一個(gè)方法不同的是,該方法返回一個(gè)字符串)

?????? 如果這個(gè)請(qǐng)求頭域不存在,這個(gè)方法返回-1。

?????? 5、getHeaderNames

?????? public Enumeration getHeaderNames();

?????? 該方法返回一個(gè)String對(duì)象的列表,該列表反映請(qǐng)求的所有頭域名。

?????? 有的引擎可能不允許通過(guò)這種方法訪問(wèn)頭域,在這種情況下,這個(gè)方法返回一個(gè)空的列表。

?????? 6、getIntHeader

?????? public int getIntHeader(String name);

?????? 返回指定的請(qǐng)求頭域的值,這個(gè)值被轉(zhuǎn)換成一個(gè)整數(shù)。

?????? 如果頭域不能轉(zhuǎn)換,拋出一個(gè)IllegalArgumentException。如果這個(gè)請(qǐng)求頭域不存在,這個(gè)方法返回-1。

?????? 7、getMethod

?????? public String getMethod();

?????? 返回這個(gè)請(qǐng)求使用的HTTP方法(例如:GET、POST、PUT)

?????? 8、getPathInfo

?????? public String getPathInfo();

?????? 這個(gè)方法返回在這個(gè)請(qǐng)求的URL的Servlet路徑之后的請(qǐng)求URL的額外的路徑信息。如果這個(gè)請(qǐng)求URL包括一個(gè)查詢字符串,在返回值內(nèi)將不包括這個(gè)查詢字符串。這個(gè)路徑在返回之前必須經(jīng)過(guò)URL解碼。如果在這個(gè)請(qǐng)求的URL的Servlet路徑之后沒(méi)有路徑信息。這個(gè)方法返回空值。

?????? 9、getPathTranslated

?????? public String getPathTranslated();

?????? 這個(gè)方法獲得這個(gè)請(qǐng)求的URL的Servlet路徑之后的額外的路徑信息,并將它轉(zhuǎn)換成一個(gè)真實(shí)的路徑。在進(jìn)行轉(zhuǎn)換前,這個(gè)請(qǐng)求的URL必須經(jīng)過(guò)URL解碼。如果在這個(gè)URL的Servlet路徑之后沒(méi)有附加路徑信息。這個(gè)方法返回空值。

? ?????10、getQueryString

?????? public String getQueryString();

?????? 返回這個(gè)請(qǐng)求URL所包含的查詢字符串。一個(gè)查詢字串符在一個(gè)URL中由一個(gè)“?”引出。如果沒(méi)有查詢字符串,這個(gè)方法返回空值。

?????? 11、getRemoteUser

?????? public String getRemoteUser

?????? 返回作了請(qǐng)求的用戶名,這個(gè)信息用來(lái)作HTTP用戶論證。

?????? 如果在請(qǐng)求中沒(méi)有用戶名信息,這個(gè)方法返回空值。

?????? 12、getRequestedSessionId

?????? public String getRequestedSessionId();

?????? 返回這個(gè)請(qǐng)求相應(yīng)的session id。如果由于某種原因客戶端提供的session id是無(wú)效的,這個(gè)session id將與在當(dāng)前session中的session id不同,與此同時(shí),將建立一個(gè)新的session。

?????? 如果這個(gè)請(qǐng)求沒(méi)與一個(gè)session關(guān)聯(lián),這個(gè)方法返回空值。

?????? 13、getRequestURI

?????? public String getRequestURI();

?????? 從HTTP請(qǐng)求的第一行返回請(qǐng)求的URL中定義被請(qǐng)求的資源的部分。如果有一個(gè)查詢字符串存在,這個(gè)查詢字符串將不包括在返回值當(dāng)中。例如,一個(gè)請(qǐng)求通過(guò) /catalog/books?id=1這樣的URL路徑訪問(wèn),這個(gè)方法將返回/catalog/books。這個(gè)方法的返回值包括了Servlet路徑 和路徑信息。

?????? 如果這個(gè)URL路徑中的的一部分經(jīng)過(guò)了URL編碼,這個(gè)方法的返回值在返回之前必須經(jīng)過(guò)解碼。

?????? 14、getServletPath

?????? public String getServletPath();

?????? 這個(gè)方法返回請(qǐng)求URL反映調(diào)用Servlet的部分。例如,一個(gè)Servlet被映射到/catalog/summer這個(gè)URL路徑,而一個(gè)請(qǐng)求使用了/catalog/summer/casual這樣的路徑。所謂的反映調(diào)用Servlet的部分就是指/catalog/summer。

?????? 如果這個(gè)Servlet不是通過(guò)路徑匹配來(lái)調(diào)用。這個(gè)方法將返回一個(gè)空值。

?????? 15、getSession

?????? public HttpSession getSession();

?????? public HttpSession getSession(boolean create);

?????? 返回與這個(gè)請(qǐng)求關(guān)聯(lián)的當(dāng)前的有效的session。如果調(diào)用這個(gè)方法時(shí)沒(méi)帶參數(shù),那么在沒(méi)有session與這個(gè)請(qǐng)求關(guān)聯(lián)的情況下,將會(huì)新建一個(gè)session。如果調(diào)用這個(gè)方法時(shí)帶入了一個(gè)布爾型的參數(shù),只有當(dāng)這個(gè)參數(shù)為真時(shí),session才會(huì)被建立。

?????? 為了確保session能夠被完全維持。Servlet開(kāi)發(fā)者必須在響應(yīng)被提交之前調(diào)用該方法。

?????? 如果帶入的參數(shù)為假,而且沒(méi)有session與這個(gè)請(qǐng)求關(guān)聯(lián)。這個(gè)方法會(huì)返回空值。

?????? 16、isRequestedSessionIdValid

?????? public boolean isRequestedSessionIdValid();

?????? 這個(gè)方法檢查與此請(qǐng)求關(guān)聯(lián)的session當(dāng)前是不是有效。如果當(dāng)前請(qǐng)求中使用的session無(wú)效,它將不能通過(guò)getSession方法返回。

?????? 17、isRequestedSessionIdFromCookie

?????? public boolean isRequestedSessionIdFromCookie();

?????? 如果這個(gè)請(qǐng)求的session id是通過(guò)客戶端的一個(gè)cookie提供的,該方法返回真,否則返回假。

?????? 18、isRequestedSessionIdFromURL

?????? public boolean isRequestedSessionIdFromURL();

?????? 如果這個(gè)請(qǐng)求的session id是通過(guò)客戶端的URL的一部分提供的,該方法返回真,否則返回假。請(qǐng)注意此方法與isRequestedSessionIdFromUrl在URL的拼寫上不同。

?????? 以下方法將被取消

?????? 19、isRequestedSessionIdFromUrl

?????? public boolean isRequestedSessionIdFromUrl();

?????? 該方法被isRequestedSessionIdFromURL代替。

?

2.14?????? HttpServletResponse接口

?????? 定義?

?????? public interface HttpServletResponse extends ServletResponse

?????? 描述一個(gè)返回到客戶端的HTTP回應(yīng)。這個(gè)接口允許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)中增加一個(gè)指定的cookie。可多次調(diào)用該方法以定義多個(gè)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);

?????? 對(duì)sendRedirect方法使用的指定URL進(jìn)行編碼。如果不需要編碼,就直接返回這個(gè)URL。之所以提供這個(gè)附加的編碼方法,是因?yàn)樵?redirect的情況下,決定是否對(duì)URL進(jìn)行編碼的規(guī)則和一般情況有所不同。所給的URL必須是一個(gè)絕對(duì)URL。相對(duì)URL不能被接收,會(huì)拋出一個(gè) IllegalArgumentException。

?????? 所有提供給sendRedirect方法的URL都應(yīng)通過(guò)這個(gè)方法運(yùn)行,這樣才能確保會(huì)話跟蹤能夠在所有瀏覽器中正常運(yùn)行。

?????? 4、encodeURL

?????? public String encodeURL(String url);

?????? 對(duì)包含session ID的URL進(jìn)行編碼。如果不需要編碼,就直接返回這個(gè)URL。Servlet引擎必須提供URL編碼方法,因?yàn)樵谟行┣闆r下,我們將不得不重寫URL,例如,在響應(yīng)對(duì)應(yīng)的請(qǐng)求中包含一個(gè)有效的session,但是這個(gè)session不能被非URL的(例如cookie)的手段來(lái)維 持。

?????? 所有提供給Servlet的URL都應(yīng)通過(guò)這個(gè)方法運(yùn)行,這樣才能確保會(huì)話跟蹤能夠在所有瀏覽器中正常運(yùn)行。

?????? 5、sendError

?????? public void sendError(int statusCode) throws IOException;

?????? public void sendError(int statusCode, String message) throws

????????? IOException;

?????? 用給定的狀態(tài)碼發(fā)給客戶端一個(gè)錯(cuò)誤響應(yīng)。如果提供了一個(gè)message參數(shù),這將作為響應(yīng)體的一部分被發(fā)出,否則,服務(wù)器會(huì)返回錯(cuò)誤代碼所對(duì)應(yīng)的標(biāo)準(zhǔn)信息。

?????? 調(diào)用這個(gè)方法后,響應(yīng)立即被提交。在調(diào)用這個(gè)方法后,Servlet不會(huì)再有更多的輸出。

?????? 6、sendRedirect

?????? public void sendRedirect(String location) throws IOException;

?????? 使用給定的路徑,給客戶端發(fā)出一個(gè)臨時(shí)轉(zhuǎn)向的響應(yīng)(SC_MOVED_TEMPORARILY)。給定的路徑必須是絕對(duì)URL。相對(duì)URL將不能被接收,會(huì)拋出一個(gè)IllegalArgumentException。

?????? 這個(gè)方法必須在響應(yīng)被提交之前調(diào)用。調(diào)用這個(gè)方法后,響應(yīng)立即被提交。在調(diào)用這個(gè)方法后,Servlet不會(huì)再有更多的輸出。

?????? 7、setDateHeader

?????? public void setDateHeader(String name, long date);

?????? 用一個(gè)給定的名稱和日期值設(shè)置響應(yīng)頭,這里的日期值應(yīng)該是反映自1970-1-1日(GMT)以來(lái)的精確到毫秒的長(zhǎng)整數(shù)。如果響應(yīng)頭已經(jīng)被設(shè)置,新的值將覆蓋當(dāng)前的值。

?????? 8、setHeader

?????? public void setHeader(String name, String value);

?????? 用一個(gè)給定的名稱和域設(shè)置響應(yīng)頭。如果響應(yīng)頭已經(jīng)被設(shè)置,新的值將覆蓋當(dāng)前的值。

?????? 9、setIntHeader

?????? public void setIntHeader(String name, int value);

?????? 用一個(gè)給定的名稱和整形值設(shè)置響應(yīng)頭。如果響應(yīng)頭已經(jīng)被設(shè)置,新的值將覆蓋當(dāng)前的值。

?????? 10、setStatus

?????? public void setStatus(int statusCode);

?????? 這個(gè)方法設(shè)置了響應(yīng)的狀態(tài)碼,如果狀態(tài)碼已經(jīng)被設(shè)置,新的值將覆蓋當(dāng)前的值。

?????? 以下的幾個(gè)方法將被取消

?????? 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);

?????? 這個(gè)方法設(shè)置了響應(yīng)的狀態(tài)碼,如果狀態(tài)碼已經(jīng)被設(shè)置,新的值將覆蓋當(dāng)前的值。如果提供了一個(gè)message,它也將會(huì)被作為響應(yīng)體的一部分被發(fā)送。

?

2.15?????? HttpSession接口

?? ????定義

?????? public interface HttpSession

?????? 這個(gè)接口被Servlet引擎用來(lái)實(shí)現(xiàn)在HTTP客戶端和HTTP會(huì)話兩者的關(guān)聯(lián)。這種關(guān)聯(lián)可能在多外連接和請(qǐng)求中持續(xù)一段給定的時(shí)間。session用來(lái)在無(wú)狀態(tài)的HTTP協(xié)議下越過(guò)多個(gè)請(qǐng)求頁(yè)面來(lái)維持狀態(tài)和識(shí)別用戶。

?????? 一個(gè)session可以通過(guò)cookie或重寫URL來(lái)維持。

?????? 方法

?????? 1、getCreationTime

?????? public long getCreationTime();

?????? 返回建立session的時(shí)間,這個(gè)時(shí)間表示為自1970-1-1日(GMT)以來(lái)的毫秒數(shù)。

?????? 2、getId

?????? public String getId();

?????? 返回分配給這個(gè)session的標(biāo)識(shí)符。一個(gè)HTTP session的標(biāo)識(shí)符是一個(gè)由服務(wù)器來(lái)建立和維持的唯一的字符串。

?????? 3、getLastAccessedTime

?????? public long getLastAccessedTime();

?????? 返回客戶端最后一次發(fā)出與這個(gè)session有關(guān)的請(qǐng)求的時(shí)間,如果這個(gè)session是新建立的,返回-1。這個(gè)時(shí)間表示為自1970-1-1日(GMT)以來(lái)的毫秒數(shù)。

?????? 4、getMaxInactiveInterval

?????? public int getMaxInactiveInterval();

?????? 返加一個(gè)秒數(shù),這個(gè)秒數(shù)表示客戶端在不發(fā)出請(qǐng)求時(shí),session被Servlet引擎維持的最長(zhǎng)時(shí)間。在這個(gè)時(shí)間之后,Servlet引擎可能被Servlet引擎終止。如果這個(gè)session不會(huì)被終止,這個(gè)方法返回-1。

?????? 當(dāng)session無(wú)效后再調(diào)用這個(gè)方法會(huì)拋出一個(gè)IllegalStateException。

?????? 5、getValue

?????? public Object getValue(String name);

?????? 返回一個(gè)以給定的名字綁定到session上的對(duì)象。如果不存在這樣的綁定,返回空值。

?????? 當(dāng)session無(wú)效后再調(diào)用這個(gè)方法會(huì)拋出一個(gè)IllegalStateException。

?????? 6、getValueNames

? ?????public String[] getValueNames();

?????? 以一個(gè)數(shù)組返回綁定到session上的所有數(shù)據(jù)的名稱。

?????? 當(dāng)session無(wú)效后再調(diào)用這個(gè)方法會(huì)拋出一個(gè)IllegalStateException。

?????? 7、invalidate

?????? public void invalidate();

?????? 這個(gè)方法會(huì)終止這個(gè)session。所有綁定在這個(gè)session上的數(shù)據(jù)都會(huì)被清除。并通過(guò)HttpSessionBindingListener接口的valueUnbound方法發(fā)出通告。

?????? 8、isNew

?????? public boolean isNew();

?????? 返回一個(gè)布爾值以判斷這個(gè)session是不是新的。如果一個(gè)session已經(jīng)被服務(wù)器建立但是還沒(méi)有收到相應(yīng)的客戶端的請(qǐng)求,這個(gè)session將被 認(rèn)為是新的。這意味著,這個(gè)客戶端還沒(méi)有加入會(huì)話或沒(méi)有被會(huì)話公認(rèn)。在他發(fā)出下一個(gè)請(qǐng)求時(shí)還不能返回適當(dāng)?shù)膕ession認(rèn)證信息。

?????? 當(dāng)session無(wú)效后再調(diào)用這個(gè)方法會(huì)拋出一個(gè)IllegalStateException。

?????? 9、putValue

?????? public void putValue(String name, Object value);

?????? 以給定的名字,綁定給定的對(duì)象到session中。已存在的同名的綁定會(huì)被重置。這時(shí)會(huì)調(diào)用HttpSessionBindingListener接口的valueBound方法。

?????? 當(dāng)session無(wú)效后再調(diào)用這個(gè)方法會(huì)拋出一個(gè)IllegalStateException。

?????? 10、removeValue

???? ??public void removeValue(String name);

?????? 取消給定名字的對(duì)象在session上的綁定。如果未找到給定名字的綁定的對(duì)象,這個(gè)方法什么出不做。這時(shí)會(huì)調(diào)用HttpSessionBindingListener接口的valueUnbound方法。

?????? 當(dāng)session無(wú)效后再調(diào)用這個(gè)方法會(huì)拋出一個(gè)IllegalStateException。

?????? 11、setMaxInactiveInterval

?????? public int setMaxInactiveInterval(int interval);

?????? 設(shè)置一個(gè)秒數(shù),這個(gè)秒數(shù)表示客戶端在不發(fā)出請(qǐng)求時(shí),session被Servlet引擎維持的最長(zhǎng)時(shí)間。

?????? 以下這個(gè)方法將被取消

?????? 12、getSessionContext

?????? public HttpSessionContext getSessionContext();

?????? 返回session在其中得以保持的環(huán)境變量。這個(gè)方法和其他所有HttpSessionContext的方法一樣被取消了。


2.16?????? ?HttpSessionBindingListener接口

?????? 定義

?????? public interface HttpSessionBindingListener

?????? 這個(gè)對(duì)象被加入到HTTP的session中,執(zhí)行這個(gè)接口會(huì)通告有沒(méi)有什么對(duì)象被綁定到這個(gè)HTTP session中或被從這個(gè)HTTP session中取消綁定。

?????? 方法

?????? 1、valueBound

?????? public void valueBound(HttpSessionBindingEvent event);

?????? 當(dāng)一個(gè)對(duì)象被綁定到session中,調(diào)用此方法。HttpSession.putValue方法被調(diào)用時(shí),Servlet引擎應(yīng)該調(diào)用此方法。

?????? 2、valueUnbound

?????? public void valueUnbound(HttpSessionBindingEvent event);

?????? 當(dāng)一個(gè)對(duì)象被從session中取消綁定,調(diào)用此方法。HttpSession.removeValue方法被調(diào)用時(shí),Servlet引擎應(yīng)該調(diào)用此方法。

?

2.17?????? HttpSessionContext接口

?????? 定義

?????? 此接口將被取消

?????? public interface HttpSessionContext

?????? 這個(gè)對(duì)象是與一組HTTP session關(guān)聯(lián)的單一的實(shí)體。

?????? 這個(gè)接口由于安全的原因被取消,它出現(xiàn)在目前的版本中僅僅是為了兼容性的原因。這個(gè)接口的方法將模擬以前的版本的定義返回相應(yīng)的值。

?????? 方法

?????? 1、getSession

?????? public HttpSession getSession(String sessionId);

?????? 當(dāng)初用來(lái)返回與這個(gè)session id相關(guān)的session。現(xiàn)在返回空值。

?????? 2、getIds

?????? public Enumeration getIds();

?????? 當(dāng)初用來(lái)返回這個(gè)環(huán)境下所有session id的列表。現(xiàn)在返回空的列表。

?

2.18?????? Cookie類

?????? 定義

?????? public class Cookie implements Cloneable

?????? 這個(gè)類描述了一個(gè)cookie,有關(guān)cookie的定義你可以參照Netscape Communications Corporation的說(shuō)明,也可以參照RFC 2109。

?????? 構(gòu)造函數(shù)

?????? public Cookie(String name, String value);

?????? 用一個(gè)name-value對(duì)定義一個(gè)cookie。這個(gè)name必須能被HTTP/1.1所接受。

?????? 以字符$開(kāi)頭的name被RFC 2109保留。

?????? 給定的name如果不能被HTTP/1.1所接受,該方法拋出一個(gè)IllegalArgumentException。

?????? 方法

?????? 1、getComment

?????? public String getComment();

?????? 返回描述這個(gè)cookie目的的說(shuō)明,如果未定義這個(gè)說(shuō)明,返回空值。

?????? 2、getDomain

?????? public String getDomain();

?????? 返回這個(gè)cookie可以出現(xiàn)的區(qū)域,如果未定義區(qū)域,返回空值。

?????? 3、getMaxAge

????? ?public int getMaxAge();

?????? 這個(gè)方法返回這個(gè)cookie指定的最長(zhǎng)存活時(shí)期。如果未定義這個(gè)最長(zhǎng)存活時(shí)期,該方法返回-1。

?????? 4、getName

?????? public String getName();

?????? 該方法返回cookie名。

?????? 5、getPath

?????? public String getPath();

?????? 返回這個(gè)cookie有效的所有URL路徑的前綴,如果未定義,返回空值。

?????? 6、getSecure

?????? public boolean getSecure();

?????? 如果這個(gè)cookie只通過(guò)安全通道傳輸返回真,否則返回假。

?????? 7、getValue

?????? public String getValue();

?????? 該方法返回cookie的值。

?????? 8、getVersion

?????? public int getVersion();

?????? 返回cookie的版本。版本1由RFC 2109解釋。版本0由Netscape Communications Corporation的說(shuō)明解釋。新構(gòu)造的cookie默認(rèn)使用版本0。

?????? 9、setComment

?????? public void setComment(String purpose);

?????? 如果一個(gè)用戶將這個(gè)cookie提交給另一個(gè)用戶,必須通過(guò)這個(gè)說(shuō)明描述這個(gè)cookie的目的。版本0不支持這個(gè)屬性。

?????? 10、setDomain

?????? public void setDomain(String pattern);

?????? 這個(gè)方法設(shè)置cookie的有效域的屬性。這個(gè)屬性指定了cookie可以出現(xiàn)的區(qū)域。一個(gè)有效域以一個(gè)點(diǎn)開(kāi)頭(.foo.com),這意味著在指定的域名解析系統(tǒng)的區(qū)域中(可能是www.foo.com但不是a.b.foo.com)的主機(jī)可以看到這個(gè)cookie。默認(rèn)情況是,cookie只能返回保 存它的主機(jī)。

?????? 11、setMaxAge

?????? public void setMaxAge(int expiry);

?????? 這個(gè)方法設(shè)定這個(gè)cookie的最長(zhǎng)存活時(shí)期。在該存活時(shí)期之后,cookie會(huì)被終目。負(fù)數(shù)表示這個(gè)cookie不會(huì)生效,0將從客戶端刪除這個(gè)cookie。

? ? ? ?12、setPath

?????? public void setPath(String uri);

?????? 這個(gè)方法設(shè)置cookie的路徑屬性。客戶端只能向以這個(gè)給定的路徑String開(kāi)頭的路徑返回cookie。

?????? 13、setSecure

?????? public void setSecure(boolean flag);

?????? 指出這個(gè)cookie只能通過(guò)安全通道(例如HTTPS)發(fā)送。只有當(dāng)產(chǎn)生這個(gè)cookie的服務(wù)器使用安全協(xié)議發(fā)送這個(gè)cookie值時(shí)才能這樣設(shè)置。

?????? 14、setValue

?????? public void setValue(String newValue);

?????? 設(shè)置這個(gè)cookie的值,對(duì)于二進(jìn)制數(shù)據(jù)采用BASE64編碼。

?????? 版本0不能使用空格、{}、()、=、,、“”、/、?、@、:以及;。

?????? 15、setVersion

?????? public void setVersion(int v);

?????? 設(shè)置cookie的版本號(hào)

?

2.19?????? HttpServlet類

?????? 定義

?????? public class HttpServlet extends GenericServlet implements

????????? Serializable

?????? 這是一個(gè)抽象類,用來(lái)簡(jiǎn)化HTTP Servlet寫作的過(guò)程。它是GenericServlet類的擴(kuò)充,提供了一個(gè)處理HTTP協(xié)議的框架。

?????? 在這個(gè)類中的service方法支持例如GET、POST這樣的標(biāo)準(zhǔn)的HTTP方法。這一支持過(guò)程是通過(guò)分配他們到適當(dāng)?shù)姆椒?#xff08;例如doGet、doPost)來(lái)實(shí)現(xiàn)的。

?????? 方法

?????? 1、doDelete

?????? protected void doDelete(HttpServletRequest request,

???????????? HttpServletResponse response) throws ServletException,

???????????? IOException;

?????? 被這個(gè)類的service方法調(diào)用,用來(lái)處理一個(gè)HTTP DELETE操作。這個(gè)操作允許客戶端請(qǐng)求從服務(wù)器上刪除URL。這一操作可能有負(fù)面影響,對(duì)此用戶就負(fù)起責(zé)任。

?????? 這一方法的默認(rèn)執(zhí)行結(jié)果是返回一個(gè)HTTP BAD_REQUEST錯(cuò)誤。當(dāng)你要處理DELETE請(qǐng)求時(shí),你必須重載這一方法。

?????? 2、doGet

?????? protected void doGet(HttpServletRequest request,

???????????? HttpServletResponse response) throws ServletException,

???????????? IOException;

?????? 被這個(gè)類的service方法調(diào)用,用來(lái)處理一個(gè)HTTP GET操作。這個(gè)操作允許客戶端簡(jiǎn)單地從一個(gè)HTTP服務(wù)器“獲得”資源。對(duì)這個(gè)方法的重載將自動(dòng)地支持HEAD方法。

?????? GET操作應(yīng)該是安全而且沒(méi)有負(fù)面影響的。這個(gè)操作也應(yīng)該可以安全地重復(fù)。

?????? 這一方法的默認(rèn)執(zhí)行結(jié)果是返回一個(gè)HTTP BAD_REQUEST錯(cuò)誤。

?????? 3、doHead

?????? protected void doHead(HttpServletRequest request,

???????????? HttpServletResponse response) throws ServletException,

???????????? IOException;

?????? 被這個(gè)類的service方法調(diào)用,用來(lái)處理一個(gè)HTTP HEAD操作。默認(rèn)的情況是,這個(gè)操作會(huì)按照一個(gè)無(wú)條件的GET方法來(lái)執(zhí)行,該操作不向客戶端返回任何數(shù)據(jù),而僅僅是返回包含內(nèi)容長(zhǎng)度的頭信息。

?????? 與GET操作一樣,這個(gè)操作應(yīng)該是安全而且沒(méi)有負(fù)面影響的。這個(gè)操作也應(yīng)該可以安全地重復(fù)。

?????? 這個(gè)方法的默認(rèn)執(zhí)行結(jié)果是自動(dòng)處理HTTP HEAD操作,這個(gè)方法不需要被一個(gè)子類執(zhí)行。

?????? 4、doOptions

?????? protected void doOptions(HttpServletRequest request,

???????????? HttpServletResponse response) throws ServletException,

???????????? IOException;

?????? 被這個(gè)類的service方法調(diào)用,用來(lái)處理一個(gè)HTTP OPTION操作。這個(gè)操作自動(dòng)地決定支持哪一種HTTP方法。例如,一個(gè)Servlet寫了一個(gè)HttpServlet的子類并重載了doGet方法,doOption會(huì)返回下面的頭:

?????? Allow: GET,HEAD,TRACE,OPTIONS

?????? 你一般不需要重載這個(gè)方法。

?????? 5、doPost

?????? protected void doPost(HttpServletRequest request,

???????????? HttpServletResponse response) throws ServletException,

???????????? IOException;

?????? 被這個(gè)類的service方法調(diào)用,用來(lái)處理一個(gè)HTTP POST操作。這個(gè)操作包含請(qǐng)求體的數(shù)據(jù),Servlet應(yīng)該按照他行事。

?????? 這個(gè)操作可能有負(fù)面影響。例如更新存儲(chǔ)的數(shù)據(jù)或在線購(gòu)物。

?????? 這一方法的默認(rèn)執(zhí)行結(jié)果是返回一個(gè)HTTP BAD_REQUEST錯(cuò)誤。當(dāng)你要處理POST操作時(shí),你必須在HttpServlet的子類中重載這一方法。

?????? 6、doPut

?????? protected void doPut(HttpServletRequest request,

???????????? HttpServletResponse response) throws ServletException,

???????????? IOException;

?????? 被這個(gè)類的service方法調(diào)用,用來(lái)處理一個(gè)HTTP PUT操作。這個(gè)操作類似于通過(guò)FTP發(fā)送文件。

?????? 這個(gè)操作可能有負(fù)面影響。例如更新存儲(chǔ)的數(shù)據(jù)或在線購(gòu)物。

?????? 這一方法的默認(rèn)執(zhí)行結(jié)果是返回一個(gè)HTTP BAD_REQUEST錯(cuò)誤。當(dāng)你要處理PUT操作時(shí),你必須在HttpServlet的子類中重載這一方法。

?????? 7、doTrace

?????? protected void doTrace(HttpServletRequest request,

???????????? HttpServletResponse response) throws ServletException,

???????????? IOException;

?????? 被這個(gè)類的service方法調(diào)用,用來(lái)處理一個(gè)HTTP TRACE操作。這個(gè)操作的默認(rèn)執(zhí)行結(jié)果是產(chǎn)生一個(gè)響應(yīng),這個(gè)響應(yīng)包含一個(gè)反映trace請(qǐng)求中發(fā)送的所有頭域的信息。

?????? 當(dāng)你開(kāi)發(fā)Servlet時(shí),在多數(shù)情況下你需要重載這個(gè)方法。

?????? 8、getLastModified

?????? protected long getLastModified(HttpServletRequest request);

?????? 返回這個(gè)請(qǐng)求實(shí)體的最后修改時(shí)間。為了支持GET操作,你必須重載這一方法,以精確地反映最后修改的時(shí)間。這將有助于瀏覽器和代理服務(wù)器減少裝載服務(wù)器和網(wǎng)絡(luò)資源,從而更加有效地工作。返回的數(shù)值是自1970-1-1日(GMT)以來(lái)的毫秒數(shù)。

默認(rèn)的執(zhí)行結(jié)果是返回一個(gè)負(fù)數(shù),這標(biāo)志著最后修改時(shí)間未知,它也不能被一個(gè)有條件的GET操作使用。

?????? 9、service

?????? protected void service(HttpServletRequest request,

???????????? HttpServletResponse response) throws ServletException,

???????????? IOException;

?????? public void service(ServletRequest request, ServletResponse response)

???????????? throws ServletException, IOException;

?????? 這是一個(gè)Servlet的HTTP-specific方案,它分配請(qǐng)求到這個(gè)類的支持這個(gè)請(qǐng)求的其他方法。

?????? 當(dāng)你開(kāi)發(fā)Servlet時(shí),在多數(shù)情況下你不必重載這個(gè)方法。

?

2.20?????? HttpSessionBindingEvent類

?????? 定義

?????? public class HttpSessionBindingEvent extends EventObject

?????? 這個(gè)事件是在監(jiān)聽(tīng)到HttpSession發(fā)生綁定和取消綁定的情況時(shí)連通HttpSessionBindingListener的。這可能是一個(gè)session被終止或被認(rèn)定無(wú)效的結(jié)果。

?????? 事件源是HttpSession.putValue或HttpSession.removeValue。

?????? 構(gòu)造函數(shù)

?????? public HttpSessionBindingEvent(HttpSession session, String name);

?????? 通過(guò)引起這個(gè)事件的Session和發(fā)生綁定或取消綁定的對(duì)象名構(gòu)造一個(gè)新的HttpSessionBindingEvent。

?????? 方法

?????? 1、getName

?????? public String getName();

?????? 返回發(fā)生綁定和取消綁定的對(duì)象的名字。

?????? 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ù)器上重建客戶端用來(lái)建立請(qǐng)求的URL。這個(gè)方法反映了不同的協(xié)議(例如http和https)和端口,但不包含查詢字符串。

?????? 這個(gè)方法返回一個(gè)StringBuffer而不是一個(gè)String,這樣URL可以被Servlet開(kāi)發(fā)者有效地修改。

?????? 2、parsePostData

?????? public static Hashtable parsePostData(int len,

???????????? ServletInputstream in);

?????? 解析一個(gè)包含MIME類型application/x-www-form-urlencoded的數(shù)據(jù)的流,并創(chuàng)建一個(gè)具有關(guān)鍵值-數(shù)據(jù)對(duì)的 hash table。這里的關(guān)鍵值是字符串,數(shù)據(jù)是該字符串所對(duì)應(yīng)的值的列表。一個(gè)關(guān)鍵值可以在POST的數(shù)據(jù)中出現(xiàn)一次或多次。這個(gè)關(guān)鍵值每出現(xiàn)一次,它的相應(yīng)的值就被加入到hash table中的字符串所對(duì)應(yīng)的值的列表中。

?????? 從POST數(shù)據(jù)讀出的數(shù)據(jù)將經(jīng)過(guò)URL解碼,+將被轉(zhuǎn)換為空格以十六進(jìn)制傳送的數(shù)據(jù)(例如%xx)將被轉(zhuǎn)換成字符。

?????? 當(dāng)POST數(shù)據(jù)無(wú)效時(shí),該方法拋出一個(gè)IllegalArgumentException。

?????? 3、parseQueryString

?????? public static Hashtable parseQueryString(String s);

?????? 解析一個(gè)查詢字符串,并創(chuàng)建一個(gè)具有關(guān)鍵值-數(shù)據(jù)對(duì)的hash table。這里的數(shù)據(jù)是該字符串所對(duì)應(yīng)的值的列表。一個(gè)關(guān)鍵值可以出現(xiàn)一次或多次。這個(gè)關(guān)鍵值每出現(xiàn)一次,它的相應(yīng)的值就被加入到hash table中的字符串所對(duì)應(yīng)的值的列表中。

?????? 從查詢字符串讀出的數(shù)據(jù)將經(jīng)過(guò)URL解碼,+將被轉(zhuǎn)換為空格以十六進(jìn)制傳送的數(shù)據(jù)(例如%xx)將被轉(zhuǎn)換成字符。

?????? 當(dāng)查詢字符串無(wú)效時(shí),該方法拋出一個(gè)IllegalArgumentException。

?

術(shù)語(yǔ)表

bytecode

?????? 字節(jié)碼:由Java編譯器和Java解釋程序生成的機(jī)器代碼。

cookie

?????? 由Web服務(wù)器建立的數(shù)據(jù),該數(shù)據(jù)存儲(chǔ)在用戶的計(jì)算機(jī)上,提供了一個(gè)Web站點(diǎn)跟蹤用戶的參數(shù)并存儲(chǔ)在用戶自己硬盤上的方法。

HTTP

?????? 超文本傳輸協(xié)議。一個(gè)請(qǐng)求響應(yīng)協(xié)議用來(lái)連接WWW服務(wù)器向客戶端瀏覽器傳輸HTML頁(yè)面。

輸入流對(duì)象

? ? ? ?一個(gè)對(duì)象,由ServletInputStream類定義,被Servlet用來(lái)從客戶端讀取請(qǐng)求。

映射

?????? 由Servlet實(shí)例和Servlet返回?cái)?shù)據(jù)的URL組成的一對(duì),例如,HelloServlet和/hello/index.html。

輸出流對(duì)象

? ? ? ?一個(gè)對(duì)象,由ServletOutputStream class類定義,被Servlet用來(lái)向客戶端返回?cái)?shù)據(jù)。

request dispatcher object

?????? 由RequestDispatcher接口定義的一個(gè)對(duì)象,用來(lái)從客戶端接收請(qǐng)求,并將其發(fā)送到Web服務(wù)器上可用的其他資源(例如Servlet、CGI、HTML文件或JSP文件)。

sandboxed servlet

?????? 在一個(gè)安全性約束下運(yùn)行的Servlet。

servlet

? ? ? ?一個(gè)小的,具有平臺(tái)無(wú)關(guān)性的,沒(méi)有圖形用戶界面的Java程序。它可以在許多方面擴(kuò)充Web服務(wù)的功能。

servlet configuration object

?????? ServletConfig接口定義的一個(gè)對(duì)象,用來(lái)配置一個(gè)Servlet。

servlet context object

?????? ServletContext接口定義的一個(gè)對(duì)象。給予Servlet有關(guān)Servlet引擎的信息。

servlet引擎

?????? 由Web服務(wù)器提供商制作的一個(gè)環(huán)境,可以允許Servlet在具體的Web服務(wù)器上運(yùn)行。

servlet請(qǐng)求對(duì)象

?????? 由ServletRequest接口定義的一個(gè)對(duì)象,允許Servlet獲得用關(guān)客戶端請(qǐng)求的數(shù)據(jù)。

servlet response object

?????? 由ServletResponse接口定義的一個(gè)對(duì)象,允許Servlet作出響應(yīng)。

servlet runner

? ? ? ?Java Servlet Developer’s Kit (JSDK)中的sun.servlet.http.HttpServer過(guò)程,它使得Servlet得以運(yùn)行。

會(huì)話跟蹤

?????? 在一個(gè)Web應(yīng)用程序中,識(shí)別一個(gè)從同一個(gè)客戶端發(fā)出的連續(xù)的唯一的請(qǐng)求的能力。

SSL

?????? 加密套接字協(xié)議層。一個(gè)安全協(xié)議,用來(lái)在Iternet上的客戶端瀏覽器和服務(wù)器交換密鑰和加密數(shù)據(jù)。

URI

?????? 統(tǒng)一資源標(biāo)識(shí)。定義一個(gè)Internet地址,它是一個(gè)URL的超集。

URL

?????? 統(tǒng)一資源路徑。這個(gè)地址定義了到達(dá)一個(gè)WWW上的文件的路線,通常由協(xié)議前綴、域名、目錄名和文件名組成。

?

轉(zhuǎn)載于:https://www.cnblogs.com/haimishasha/p/5609261.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的Java Servlet API中文说明文档的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。