Http協(xié)議分析
HTTP是一個(gè)屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議释移,由于其簡(jiǎn)捷非剃、快速的方式,適用于分布式超媒體信息系統(tǒng)宙暇。它于1990年提出输枯,經(jīng)過(guò)幾年的使用與發(fā)展,得到不斷地完善和擴(kuò)展占贫。目前在WWW中使用的是HTTP/1.0的第六版桃熄,HTTP/1.1的規(guī)范化工作正在進(jìn)行之中,而且HTTP-NG(Next Generation of HTTP)的建議已經(jīng)提出型奥。
HTTP協(xié)議的主要特點(diǎn)可概括如下:
- 支持客戶(hù)/服務(wù)器模式瞳收。
- 簡(jiǎn)單快速:客戶(hù)向服務(wù)器請(qǐng)求服務(wù)時(shí),只需傳送請(qǐng)求方法和路徑桩引。請(qǐng)求方法常用的有GET缎讼、HEAD、POST坑匠。每種方法規(guī)定了客戶(hù)與服務(wù)器聯(lián)系的類(lèi)型不同血崭。由于HTTP協(xié)議簡(jiǎn)單,使得HTTP服務(wù)器的程序規(guī)模小厘灼,因而通信速度很快夹纫。
- 靈活:HTTP允許傳輸任意類(lèi)型的數(shù)據(jù)對(duì)象。正在傳輸?shù)念?lèi)型由Content-Type加以標(biāo)記设凹。
- 無(wú)連接:無(wú)連接的含義是限制每次連接只處理一個(gè)請(qǐng)求舰讹。服務(wù)器處理完客戶(hù)的請(qǐng)求,并收到客戶(hù)的應(yīng)答后闪朱,即斷開(kāi)連接月匣。采用這種方式可以節(jié)省傳輸時(shí)間钻洒。
- 無(wú)狀態(tài):HTTP協(xié)議是無(wú)狀態(tài)協(xié)議。無(wú)狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒(méi)有記憶能力锄开。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息素标,則它必須重傳,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大萍悴。另一方面头遭,在服務(wù)器不需要先前信息時(shí)它的應(yīng)答就較快。
HTTP協(xié)議(URL)
http(超文本傳輸協(xié)議)是一個(gè)基于請(qǐng)求與響應(yīng)模式的癣诱、無(wú)狀態(tài)的计维、應(yīng)用層的協(xié)議,乘河瑁基于TCP的連接方式鲫惶,HTTP1.1版本中給出一種持續(xù)連接的機(jī)制,絕大多數(shù)的Web開(kāi)發(fā)实抡,都是構(gòu)建在HTTP協(xié)議之上的Web應(yīng)用剑按。
HTTP URL (URL是一種特殊類(lèi)型的URI,包含了用于查找某個(gè)資源的足夠的信息)的格式如下: http://host[":"port][abs_path]
http表示要通過(guò)HTTP協(xié)議來(lái)定位網(wǎng)絡(luò)資源澜术;host表示合法的Internet主機(jī)域名或者IP地址;port指定一個(gè)端口號(hào)猬腰,為空則使用缺省端口80鸟废;abs_path指定請(qǐng)求資源的URI;如果URL中沒(méi)有給出abs_path姑荷,那么當(dāng)它作為請(qǐng)求URI時(shí)盒延,必須以“/”的形式給出,通常這個(gè)工作瀏覽器自動(dòng)幫我們完成鼠冕。
HTTP協(xié)議的請(qǐng)求
http請(qǐng)求由三部分組成添寺,分別是:請(qǐng)求行、消息報(bào)頭懈费、請(qǐng)求正文
1计露、請(qǐng)求行以一個(gè)方法符號(hào)開(kāi)頭,以空格分開(kāi)憎乙,后面跟著請(qǐng)求的URI和協(xié)議的版本票罐,格式如下:Method Request-URI HTTP-Version CRLF
其中 Method表示請(qǐng)求方法;Request-URI是一個(gè)統(tǒng)一資源標(biāo)識(shí)符泞边;HTTP-Version表示請(qǐng)求的HTTP協(xié)議版本该押;CRLF表示回車(chē)和換行(除了作為結(jié)尾的CRLF外,不允許出現(xiàn)單獨(dú)的CR或LF字符)阵谚。
請(qǐng)求方法(所有方法全為大寫(xiě))有多種蚕礼,各個(gè)方法的解釋如下:
GET 請(qǐng)求獲取Request-URI所標(biāo)識(shí)的資源
POST 在Request-URI所標(biāo)識(shí)的資源后附加新的數(shù)據(jù)
HEAD 請(qǐng)求獲取由Request-URI所標(biāo)識(shí)的資源的響應(yīng)消息報(bào)頭
PUT 請(qǐng)求服務(wù)器存儲(chǔ)一個(gè)資源烟具,并用Request-URI作為其標(biāo)識(shí)
DELETE 請(qǐng)求服務(wù)器刪除Request-URI所標(biāo)識(shí)的資源
TRACE 請(qǐng)求服務(wù)器回送收到的請(qǐng)求信息,主要用于測(cè)試或診斷
CONNECT 保留將來(lái)使用
OPTIONS 請(qǐng)求查詢(xún)服務(wù)器的性能奠蹬,或者查詢(xún)與資源相關(guān)的選項(xiàng)和需求
應(yīng)用舉例:
GET方法:在瀏覽器的地址欄中輸入網(wǎng)址的方式訪(fǎng)問(wèn)網(wǎng)頁(yè)時(shí)朝聋,瀏覽器采用GET方法向服務(wù)器獲取資源,eg:GET /form.html HTTP/1.1 (CRLF)
POST方法要求被請(qǐng)求服務(wù)器接受附在請(qǐng)求后面的數(shù)據(jù)罩润,常用于提交表單玖翅。
eg:POST /reg.jsp HTTP/ (CRLF)
Accept:image/gif,image/x-xbit,... (CRLF)
...
HOST:www.guet.edu.cn (CRLF)
Content-Length:22 (CRLF)
Connection:Keep-Alive (CRLF)
Cache-Control:no-cache (CRLF)
(CRLF) //該CRLF表示消息報(bào)頭已經(jīng)結(jié)束,在此之前為消息報(bào)頭
user=jeffrey&pwd=1234 //此行以下為提交的數(shù)據(jù)
HEAD方法與GET方法幾乎是一樣的割以,對(duì)于HEAD請(qǐng)求的回應(yīng)部分來(lái)說(shuō)金度,它的HTTP頭部中包含的信息與通過(guò)GET請(qǐng)求所得到的信息是相同的。利用這個(gè)方法严沥,不必傳輸整個(gè)資源內(nèi)容猜极,就可以得到Request-URI所標(biāo)識(shí)的資源的信息。該方法常用于測(cè)試超鏈接的有效性消玄,是否可以訪(fǎng)問(wèn)跟伏,以及最近是否更新。
HTTP協(xié)議的響應(yīng)
在接收和解釋請(qǐng)求消息后翩瓜,服務(wù)器返回一個(gè)HTTP響應(yīng)消息受扳。
HTTP響應(yīng)也是由三個(gè)部分組成,分別是:狀態(tài)行兔跌、消息報(bào)頭勘高、響應(yīng)正文
1、狀態(tài)行格式如下:
HTTP-Version Status-Code Reason-Phrase CRLF
其中坟桅,HTTP-Version表示服務(wù)器HTTP協(xié)議的版本华望;Status-Code表示服務(wù)器發(fā)回的響應(yīng)狀態(tài)代碼;Reason-Phrase表示狀態(tài)代碼的文本描述仅乓。
狀態(tài)代碼有三位數(shù)字組成赖舟,第一個(gè)數(shù)字定義了響應(yīng)的類(lèi)別,且有五種可能取值:
1xx:指示信息--表示請(qǐng)求已接收夸楣,繼續(xù)處理
2xx:成功--表示請(qǐng)求已被成功接收宾抓、理解、接受
3xx:重定向--要完成請(qǐng)求必須進(jìn)行更進(jìn)一步的操作
4xx:客戶(hù)端錯(cuò)誤--請(qǐng)求有語(yǔ)法錯(cuò)誤或請(qǐng)求無(wú)法實(shí)現(xiàn)
5xx:服務(wù)器端錯(cuò)誤--服務(wù)器未能實(shí)現(xiàn)合法的請(qǐng)求
常見(jiàn)狀態(tài)代碼豫喧、狀態(tài)描述洞慎、說(shuō)明:
200 OK //客戶(hù)端請(qǐng)求成功
400 Bad Request //客戶(hù)端請(qǐng)求有語(yǔ)法錯(cuò)誤,不能被服務(wù)器所理解
401 Unauthorized //請(qǐng)求未經(jīng)授權(quán)嘿棘,這個(gè)狀態(tài)代碼必須和WWW-Authenticate報(bào)頭域一起使用
403 Forbidden //服務(wù)器收到請(qǐng)求劲腿,但是拒絕提供服務(wù)
404 Not Found //請(qǐng)求資源不存在,eg:輸入了錯(cuò)誤的URL
500 Internal Server Error //服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤
503 Server Unavailable //服務(wù)器當(dāng)前不能處理客戶(hù)端的請(qǐng)求鸟妙,一段時(shí)間后可能恢復(fù)正常
eg:HTTP/1.1 200 OK (CRLF)
2焦人、響應(yīng)報(bào)頭
Location:Location響應(yīng)報(bào)頭域用于重定向接受者到一個(gè)新的位置挥吵。例如:客戶(hù)端所請(qǐng)求的頁(yè)面已不存在原先的位置,為了讓客戶(hù)端重定向到這個(gè)頁(yè)面新的位置花椭,服務(wù)器端可以發(fā)回Location響應(yīng)報(bào)頭后使用重定向語(yǔ)句忽匈,讓客戶(hù)端去訪(fǎng)問(wèn)新的域名所對(duì)應(yīng)的服務(wù)器上的資源;
Server:Server 響應(yīng)報(bào)頭域包含了服務(wù)器用來(lái)處理請(qǐng)求的軟件信息及其版本。它和 User-Agent 請(qǐng)求報(bào)頭域是相對(duì)應(yīng)的矿辽,前者發(fā)送服務(wù)器端軟件的信息丹允,后者發(fā)送客戶(hù)端軟件(瀏覽器)和操作系統(tǒng)的信息。
Vary:指示不可緩存的請(qǐng)求頭列表;
Connection:連接方式;
對(duì)于請(qǐng)求來(lái)說(shuō):close(告訴 WEB 服務(wù)器或者代理服務(wù)器袋倔,在完成本次請(qǐng)求的響應(yīng)后雕蔽,斷開(kāi)連接,不等待本次連接的后續(xù)請(qǐng)求了)宾娜。keepalive(告訴WEB服務(wù)器或者代理服務(wù)器批狐,在完成本次請(qǐng)求的響應(yīng)后,保持連接前塔,等待本次連接的后續(xù)請(qǐng)求);
對(duì)于響應(yīng)來(lái)說(shuō):close(連接已經(jīng)關(guān)閉); keepalive(連接保持著嚣艇,在等待本次連接的后續(xù)請(qǐng)求); Keep-Alive:如果瀏覽器請(qǐng)求保持連接,則該頭部表明希望WEB 服務(wù)器保持連接多長(zhǎng)時(shí)間(秒);例如:Keep-Alive:300;
WWW-Authenticate:WWW-Authenticate響應(yīng)報(bào)頭域必須被包含在401 (未授權(quán)的)響應(yīng)消息中华弓,這個(gè)報(bào)頭域和前面講到的Authorization 請(qǐng)求報(bào)頭域是相關(guān)的食零,當(dāng)客戶(hù)端收到 401 響應(yīng)消息,就要決定是否請(qǐng)求服務(wù)器對(duì)其進(jìn)行驗(yàn)證寂屏。如果要求服務(wù)器對(duì)其進(jìn)行驗(yàn)證慌洪,就可以發(fā)送一個(gè)包含了Authorization 報(bào)頭域的請(qǐng)求;
空行:最后一個(gè)響應(yīng)頭部之后是一個(gè)空行,發(fā)送回車(chē)符和換行符凑保,通知服務(wù)器以下不再有響應(yīng)頭部。
3涌攻、響應(yīng)正文就是服務(wù)器返回的資源的內(nèi)容
4.4 HTTP協(xié)議的消息報(bào)頭
HTTP消息由客戶(hù)端到服務(wù)器的請(qǐng)求和服務(wù)器到客戶(hù)端的響應(yīng)組成欧引。請(qǐng)求消息和響應(yīng)消息都是由開(kāi)始行(對(duì)于請(qǐng)求消息,開(kāi)始行就是請(qǐng)求行恳谎,對(duì)于響應(yīng)消息芝此,開(kāi)始行就是狀態(tài)行),消息報(bào)頭(可選)因痛,空行(只有CRLF的行)婚苹,消息正文(可選)組成。
HTTP消息報(bào)頭包括普通報(bào)頭鸵膏、請(qǐng)求報(bào)頭膊升、響應(yīng)報(bào)頭、實(shí)體報(bào)頭谭企。
每一個(gè)報(bào)頭域都是由名字+“:”+空格+值 組成廓译,消息報(bào)頭域的名字是大小寫(xiě)無(wú)關(guān)的评肆。
1、普通報(bào)頭
在普通報(bào)頭中非区,有少數(shù)報(bào)頭域用于所有的請(qǐng)求和響應(yīng)消息瓜挽,但并不用于被傳輸?shù)膶?shí)體,只用于傳輸?shù)南ⅰ?br>
2征绸、請(qǐng)求報(bào)頭
請(qǐng)求報(bào)頭允許客戶(hù)端向服務(wù)器端傳遞請(qǐng)求的附加信息以及客戶(hù)端自身的信息久橙。
請(qǐng)求報(bào)頭舉例:
GET /form.html HTTP/1.1 (CRLF)
Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/* (CRLF)
Accept-Language:zh-cn (CRLF)
Accept-Encoding:gzip,deflate (CRLF)
If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)
If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)
User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)
Host:www.guet.edu.cn (CRLF)
Connection:Keep-Alive (CRLF)
(CRLF)
3、響應(yīng)報(bào)頭
響應(yīng)報(bào)頭允許服務(wù)器傳遞不能放在狀態(tài)行中的附加響應(yīng)信息管怠,以及關(guān)于服務(wù)器的信息和對(duì)Request-URI所標(biāo)識(shí)的資源進(jìn)行下一步訪(fǎng)問(wèn)的信息淆衷。
4、實(shí)體報(bào)頭
請(qǐng)求和響應(yīng)消息都可以傳送一個(gè)實(shí)體排惨。一個(gè)實(shí)體由實(shí)體報(bào)頭域和實(shí)體正文組成吭敢,但并不是說(shuō)實(shí)體報(bào)頭域和實(shí)體正文要在一起發(fā)送,可以只發(fā)送實(shí)體報(bào)頭域暮芭。實(shí)體報(bào)頭定義了關(guān)于實(shí)體正文(eg:有無(wú)實(shí)體正文)和請(qǐng)求所標(biāo)識(shí)的資源的元信息鹿驼。
Servlet程序
Java Servlet介紹
Java Servlet 是運(yùn)行在 Web 服務(wù)器或應(yīng)用服務(wù)器上的程序,它是作為來(lái)自 Web 瀏覽器或其他 HTTP 客戶(hù)端的請(qǐng)求和 HTTP 服務(wù)器上的數(shù)據(jù)庫(kù)或應(yīng)用程序之間的中間層辕宏。
使用 Servlet畜晰,您可以收集來(lái)自網(wǎng)頁(yè)表單的用戶(hù)輸入,呈現(xiàn)來(lái)自數(shù)據(jù)庫(kù)或者其他源的記錄瑞筐,還可以動(dòng)態(tài)創(chuàng)建網(wǎng)頁(yè)凄鼻。
Java Servlet 通常情況下與使用 CGI(Common Gateway Interface,公共網(wǎng)關(guān)接口)實(shí)現(xiàn)的程序可以達(dá)到異曲同工的效果聚假。但是相比于 CGI块蚌,Servlet 有以下幾點(diǎn)優(yōu)勢(shì):
性能明顯更好。
Servlet 在 Web 服務(wù)器的地址空間內(nèi)執(zhí)行膘格。這樣它就沒(méi)有必要再創(chuàng)建一個(gè)單獨(dú)的進(jìn)程來(lái)處理每個(gè)客戶(hù)端請(qǐng)求峭范。
Servlet 是獨(dú)立于平臺(tái)的,因?yàn)樗鼈兪怯?Java 編寫(xiě)的瘪贱。
服務(wù)器上的 Java 安全管理器執(zhí)行了一系列限制纱控,以保護(hù)服務(wù)器計(jì)算機(jī)上的資源。因此菜秦,Servlet 是可信的甜害。
Java 類(lèi)庫(kù)的全部功能對(duì) Servlet 來(lái)說(shuō)都是可用的。它可以通過(guò) sockets 和 RMI 機(jī)制與 applets球昨、數(shù)據(jù)庫(kù)或其他軟件進(jìn)行交互尔店。
Java Servlet 是運(yùn)行在帶有支持 Java Servlet 規(guī)范的解釋器的 web 服務(wù)器上的 Java 類(lèi)。
Servlet 可以使用 javax.servlet 和 javax.servlet.http 包創(chuàng)建,它是 Java 企業(yè)版的標(biāo)準(zhǔn)組成部分闹获,Java 企業(yè)版是支持大型開(kāi)發(fā)項(xiàng)目的 Java 類(lèi)庫(kù)的擴(kuò)展版本期犬。
這些類(lèi)實(shí)現(xiàn) Java Servlet 和 JSP 規(guī)范。在寫(xiě)本教程的時(shí)候避诽,二者相應(yīng)的版本分別是 Java Servlet 2.5 和 JSP 2.1龟虎。
Java Servlet 就像任何其他的 Java 類(lèi)一樣已經(jīng)被創(chuàng)建和編譯。在您安裝 Servlet 包并把它們添加到您的計(jì)算機(jī)上的 Classpath 類(lèi)路徑中之后沙庐,您就可以通過(guò) JDK 的 Java 編譯器或任何其他編譯器來(lái)編譯 Servlet鲤妥。
Servlet 架構(gòu)
下圖顯示了 Servlet 在 Web 應(yīng)用程序中的位置。
Servlet 任務(wù)
Servlet 執(zhí)行以下主要任務(wù):
讀取客戶(hù)端(瀏覽器)發(fā)送的顯式的數(shù)據(jù)拱雏。這包括網(wǎng)頁(yè)上的 HTML 表單棉安,或者也可以是來(lái)自 applet 或自定義的 HTTP 客戶(hù)端程序的表單。
讀取客戶(hù)端(瀏覽器)發(fā)送的隱式的 HTTP 請(qǐng)求數(shù)據(jù)铸抑。這包括 cookies贡耽、媒體類(lèi)型和瀏覽器能理解的壓縮格式等等。
處理數(shù)據(jù)并生成結(jié)果鹊汛。這個(gè)過(guò)程可能需要訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)蒲赂,執(zhí)行 RMI 或 CORBA 調(diào)用,調(diào)用 Web 服務(wù)刁憋,或者直接計(jì)算得出對(duì)應(yīng)的響應(yīng)滥嘴。
發(fā)送顯式的數(shù)據(jù)(即文檔)到客戶(hù)端(瀏覽器)。該文檔的格式可以是多種多樣的至耻,包括文本文件(HTML 或 XML)若皱、二進(jìn)制文件(GIF 圖像)、Excel 等尘颓。
發(fā)送隱式的 HTTP 響應(yīng)到客戶(hù)端(瀏覽器)走触。這包括告訴瀏覽器或其他客戶(hù)端被返回的文檔類(lèi)型(例如 HTML),設(shè)置 cookies 和緩存參數(shù)疤苹,以及其他類(lèi)似的任務(wù)互广。
Servlet 生命周期
Servlet 生命周期可被定義為從創(chuàng)建直到毀滅的整個(gè)過(guò)程。以下是 Servlet 遵循的過(guò)程:
Servlet 通過(guò)調(diào)用 init () 方法進(jìn)行初始化痰催。
Servlet 調(diào)用 service() 方法來(lái)處理客戶(hù)端的請(qǐng)求。
Servlet 通過(guò)調(diào)用 destroy() 方法終止(結(jié)束)迎瞧。
最后夸溶,Servlet 是由 JVM 的垃圾回收器進(jìn)行垃圾回收的。
現(xiàn)在讓我們?cè)敿?xì)討論生命周期的方法凶硅。
init() 方法
init 方法被設(shè)計(jì)成只調(diào)用一次缝裁。它在第一次創(chuàng)建 Servlet 時(shí)被調(diào)用,在后續(xù)每次用戶(hù)請(qǐng)求時(shí)不再調(diào)用。因此捷绑,它是用于一次性初始化韩脑,就像 Applet 的 init 方法一樣。
Servlet 創(chuàng)建于用戶(hù)第一次調(diào)用對(duì)應(yīng)于該 Servlet 的 URL 時(shí)粹污,但是您也可以指定 Servlet 在服務(wù)器第一次啟動(dòng)時(shí)被加載段多。
當(dāng)用戶(hù)調(diào)用一個(gè) Servlet 時(shí),就會(huì)創(chuàng)建一個(gè) Servlet 實(shí)例壮吩,每一個(gè)用戶(hù)請(qǐng)求都會(huì)產(chǎn)生一個(gè)新的線(xiàn)程进苍,適當(dāng)?shù)臅r(shí)候移交給 doGet 或 doPost 方法。init() 方法簡(jiǎn)單地創(chuàng)建或加載一些數(shù)據(jù)鸭叙,這些數(shù)據(jù)將被用于 Servlet 的整個(gè)生命周期觉啊。
init 方法的定義如下:
public void init() throws ServletException {
// 初始化代碼...}
service() 方法
service() 方法是執(zhí)行實(shí)際任務(wù)的主要方法。Servlet 容器(即 Web 服務(wù)器)調(diào)用 service() 方法來(lái)處理來(lái)自客戶(hù)端(瀏覽器)的請(qǐng)求沈贝,并把格式化的響應(yīng)寫(xiě)回給客戶(hù)端杠人。
每次服務(wù)器接收到一個(gè) Servlet 請(qǐng)求時(shí),服務(wù)器會(huì)產(chǎn)生一個(gè)新的線(xiàn)程并調(diào)用服務(wù)宋下。service() 方法檢查 HTTP 請(qǐng)求類(lèi)型(GET嗡善、POST、PUT杨凑、DELETE 等)滤奈,并在適當(dāng)?shù)臅r(shí)候調(diào)用 doGet、doPost撩满、doPut蜒程,doDelete 等方法。
下面是該方法的特征:
public void service(ServletRequest request,
ServletResponse response)
throws ServletException, IOException{}
service() 方法由容器調(diào)用伺帘,service 方法在適當(dāng)?shù)臅r(shí)候調(diào)用 doGet昭躺、doPost、doPut伪嫁、doDelete 等方法领炫。所以,您不用對(duì) service() 方法做任何動(dòng)作张咳,您只需要根據(jù)來(lái)自客戶(hù)端的請(qǐng)求類(lèi)型來(lái)重載 doGet() 或 doPost() 即可帝洪。
doGet() 和 doPost() 方法是每次服務(wù)請(qǐng)求中最常用的方法。下面是這兩種方法的特征脚猾。
doGet() 方法
GET 請(qǐng)求來(lái)自于一個(gè) URL 的正常請(qǐng)求葱峡,或者來(lái)自于一個(gè)未指定 METHOD 的 HTML 表單,它由 doGet() 方法處理龙助。
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// Servlet 代碼}
doPost() 方法
POST 請(qǐng)求來(lái)自于一個(gè)特別指定了 METHOD 為 POST 的 HTML 表單砰奕,它由 doPost() 方法處理。
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// Servlet 代碼}
destroy() 方法
destroy() 方法只會(huì)被調(diào)用一次,在 Servlet 生命周期結(jié)束時(shí)被調(diào)用军援。destroy() 方法可以讓您的 Servlet 關(guān)閉數(shù)據(jù)庫(kù)連接仅淑、停止后臺(tái)線(xiàn)程、把 Cookie 列表或點(diǎn)擊計(jì)數(shù)器寫(xiě)入到磁盤(pán)胸哥,并執(zhí)行其他類(lèi)似的清理活動(dòng)涯竟。
在調(diào)用 destroy() 方法之后,servlet 對(duì)象被標(biāo)記為垃圾回收烘嘱。destroy 方法定義如下所示:
public void destroy() {
// 終止化代碼...
}
下圖顯示了一個(gè)典型的 Servlet 生命周期方案昆禽。
第一個(gè)到達(dá)服務(wù)器的 HTTP 請(qǐng)求被委派到 Servlet 容器。
Servlet 容器在調(diào)用 service() 方法之前加載 Servlet蝇庭。
然后 Servlet 容器處理由多個(gè)線(xiàn)程產(chǎn)生的多個(gè)請(qǐng)求醉鳖,每個(gè)線(xiàn)程執(zhí)行一個(gè)單一的 Servlet 實(shí)例的 service() 方法。