Servlet是用Java編寫的Server端程序机杜,它與協(xié)議和平臺無關(guān)。Servlet運行于Java-enabled Web Server中衅谷。Java Servlet可以動態(tài)地擴展Server的能力椒拗,并采用請求-響應(yīng)模式提供Web服務(wù)。最早支持Servlet技術(shù)的是JavaSoft的Java Web Server获黔。此后蚀苛,一些其它的基于Java的Web Server開始支持標(biāo)準(zhǔn)的Servlet API。
-
Servlet的主要功能在于交互式地瀏覽和修改數(shù)據(jù)玷氏,生成動態(tài)Web內(nèi)容堵未。這個過程為:
- 客戶端發(fā)送請求至服務(wù)器端;
- 服務(wù)器將請求信息發(fā)送至Servlet;
- Servlet生成響應(yīng)內(nèi)容并將其傳給Server。響應(yīng)內(nèi)容動態(tài)生成预茄,通常取決于客戶端的請求;
- 服務(wù)器將響應(yīng)返回給客戶端
Servlet看起來像是通常的Java程序兴溜。Servlet導(dǎo)入特定的屬于Java Servlet API的包侦厚。因為是對象字節(jié)碼耻陕,可動態(tài)地從網(wǎng)絡(luò)加載,可以說Servlet對Server就如同Applet對Client一樣刨沦,但是诗宣,由于 Servlet運行于Server中,它們并不需要一個圖形用戶界面想诅。從這個角度講召庞,Servlet也被稱為Faceless Object。
-
JAVA Servlet的優(yōu)勢:
- Servlet可以和其他資源(文件来破、數(shù)據(jù)庫篮灼、Applet、Java應(yīng)用程序等)交互徘禁,以生成返回給客戶端的響應(yīng)內(nèi)容诅诱。如果需要,還可以保存請求-響應(yīng)過程中的信息送朱。
- 采用Servlet娘荡,服務(wù)器可以完全授權(quán)對本地資源的訪問(如數(shù)據(jù)庫)干旁,并且Servlet自身將會控制外部用戶的訪問數(shù)量及訪問性質(zhì);
- Servlet可以是其它服務(wù)的客戶端程序,例如炮沐,它們可以用于分布式的應(yīng)用系統(tǒng)中争群,可以從本地硬盤,或者通過網(wǎng)絡(luò)從遠(yuǎn)端硬盤激活Servlet大年。
- Servlet可被鏈接(chain)换薄。一個Servlet可以調(diào)用另一個或一系列Servlet,即成為它的客戶端鲜戒。
- 采用Servlet Tag技術(shù)专控,可以在HTML頁面中動態(tài)調(diào)用Servlet。
- Servlet API與協(xié)議無關(guān)遏餐。它并不對傳遞它的協(xié)議有任何假設(shè)伦腐。
- 像所有的Java程序一樣,Servlet擁有面向?qū)ο驤ava語言的所有優(yōu)勢
- Servlet提供了Java應(yīng)用程序的所有優(yōu)勢——可移植失都、穩(wěn)健柏蘑、易開發(fā)。使用Servlet 的Tag技術(shù)粹庞,Servlet能夠生成嵌于靜態(tài)HTML頁面中的動態(tài)內(nèi)容咳焚。
一個Servlet被客戶端發(fā)送的第一個請求激活,然后它將繼續(xù)運行于后臺庞溜,等待以后的請求革半。每個請求將生成一個新的線程,而不是一個完整的進(jìn)程流码。多個客戶能夠在同一個進(jìn)程中同時得到服務(wù)又官。一般來說,Servlet進(jìn)程只是在Web Server卸載時被卸載漫试。
- Servlet生命周期:
裝載Servlet六敬。這項操作一般是動態(tài)執(zhí)行的。然而驾荣,Server通常會提供一個管理的選項外构,用于在Server啟動時強制裝載和初始化特定的Servlet。
Server創(chuàng)建一個Servlet的實例
Server調(diào)用Servlet的init()方法
一個客戶端的請求到達(dá)Server
Server創(chuàng)建一個請求對象
Server創(chuàng)建一個響應(yīng)對象
Server激活Servlet的service()方法播掷,傳遞請求和響應(yīng)對象作為參數(shù)
service()方法獲得關(guān)于請求對象的信息审编,處理請求,訪問其他資源歧匈,獲得需要的信息
service()方法使用響應(yīng)對象的方法垒酬,將響應(yīng)傳回Server,最終到達(dá)客戶端。service()方法可能激活其它方法以處理請求伤溉,如doGet()或doPost()或程序員自己開發(fā)的新的方法
對于更多的客戶端請求般码,Server創(chuàng)建新的請求和響應(yīng)對象,仍然激活此Servlet的service()方法乱顾,將這兩個對象作為參數(shù)傳遞給它板祝。如此重復(fù)以上的循環(huán),但無需再次調(diào)用init()方法走净。一般Servlet只初始化一次 ,當(dāng)Server不再需要Servlet時(一般當(dāng)Server關(guān)閉時)券时,Server調(diào)用Servlet的Destroy()方法。