Servlet定義及原理的淺析
Servlet定義是什么呢?Servlet與Java又是什么關(guān)系呢?Servlet是用Java編寫(xiě)的Server端程序,它與協(xié)議和平臺(tái)無(wú)關(guān)。Servlet運(yùn)行于Java-enabled Web Server中。Java Servlet可以動(dòng)態(tài)地?cái)U(kuò)展Server的能力,并采用請(qǐng)求-響應(yīng)模式提供Web服務(wù)。
最早支持Servlet技術(shù)的是JavaSoft的Java Web Server。此后,一些其它的基于Java的Web Server開(kāi)始支持標(biāo)準(zhǔn)的Servlet API。
一、Servlet定義之Servlet特點(diǎn)
Servlet是Java技術(shù)對(duì)CGI編程的回答。Servlet程序在服務(wù)器端運(yùn)行,動(dòng)態(tài)地生成Web頁(yè)面。與傳統(tǒng)的CGI和許多其他類(lèi)似CGI的技術(shù)相比,Java Servlet具有更高的效率,更容易使用,功能更強(qiáng)大,具有更好的可移植性,更節(jié)省投資(更重要的是, Servlet程序員收入要比Perl程序員高:-)
◆高效
在傳統(tǒng)的CGI中,每個(gè)請(qǐng)求都要啟動(dòng)一個(gè)新的進(jìn)程,如果CGI程序本身的執(zhí)行時(shí)間較短,啟動(dòng)進(jìn)程所需要的開(kāi)銷(xiāo)很可能反而超過(guò)實(shí)際執(zhí)行時(shí)間。而在 Servlet中,每個(gè)請(qǐng)求由一個(gè)輕量級(jí)的Java線程處理(而不是重量級(jí)的操作系統(tǒng)進(jìn)程)。在傳統(tǒng)CGI中,如果有N個(gè)并發(fā)的對(duì)同一CGI程序的請(qǐng)求,則該CGI程序的代碼在內(nèi)存中重復(fù)裝載了N次;而對(duì)于Servlet,處理請(qǐng)求的是N個(gè)線程,只需要一份Servlet類(lèi)代碼。在性能優(yōu)化方面,Servlet也比CGI有著更多的選擇,比如緩沖以前的計(jì)算結(jié)果,保持?jǐn)?shù)據(jù)庫(kù)連接的活動(dòng),等等。
◆方便
Servlet提供了大量的實(shí)用工具例程,例如自動(dòng)地解析和解碼HTML表單數(shù)據(jù)、讀取和設(shè)置HTTP頭、處理Cookie、跟蹤會(huì)話狀態(tài)等。
◆功能強(qiáng)大
在Servlet中,許多使用傳統(tǒng)CGI程序很難完成的任務(wù)都可以輕松地完成。例如,Servlet能夠直接和Web服務(wù)器交互,而普通的CGI程序不能。Servlet還能夠在各個(gè)程序之間共享數(shù)據(jù),使得數(shù)據(jù)庫(kù)連接池之類(lèi)的功能很容易實(shí)現(xiàn)。
◆可移植性好
Servlet用Java編寫(xiě),Servlet API具有完善的標(biāo)準(zhǔn)。因此,為I-Planet Enterprise Server寫(xiě)的Servlet無(wú)需任何實(shí)質(zhì)上的改動(dòng)即可移植到Apache、Microsoft IIS或者WebStar。幾乎所有的主流服務(wù)器都直接或通過(guò)插件支持Servlet。
◆節(jié)省投資
不僅有許多廉價(jià)甚至免費(fèi)的Web服務(wù)器可供個(gè)人或小規(guī)模網(wǎng)站使用,而且對(duì)于現(xiàn)有的服務(wù)器,如果它不支持Servlet的話,要加上這部分功能也往往是免費(fèi)的(或只需要極少的投資)。
二、Servlet定義之Servlet的主要功能
Servlet的主要功能在于交互式地瀏覽和修改數(shù)據(jù),生成動(dòng)態(tài)Web內(nèi)容。這個(gè)過(guò)程為:
◆客戶端發(fā)送請(qǐng)求至服務(wù)器端;
◆服務(wù)器將請(qǐng)求信息發(fā)送至Servlet
◆Servlet生成響應(yīng)內(nèi)容并將其傳給Server。響應(yīng)內(nèi)容動(dòng)態(tài)生成,通常取決于客戶端的請(qǐng)求
◆服務(wù)器將響應(yīng)返回給客戶端
Servlet看起來(lái)像是通常的Java程序。Servlet導(dǎo)入特定的屬于Java Servlet API的包。因?yàn)槭菍?duì)象字節(jié)碼,可動(dòng)態(tài)地從網(wǎng)絡(luò)加載,可以說(shuō)Servlet對(duì)Server就如同Applet對(duì)Client一樣,但是,由于 Servlet運(yùn)行于Server中,它們并不需要一個(gè)圖形用戶界面。從這個(gè)角度講,Servlet也被稱(chēng)為Faceless Object。
三、JAVA Servlet的優(yōu)勢(shì)
Servlet可以和其他資源(文件、數(shù)據(jù)庫(kù)、Applet、Java應(yīng)用程序等)交互,以生成返回給客戶端的響應(yīng)內(nèi)容。如果需要,還可以保存請(qǐng)求-響應(yīng)過(guò)程中的信息。
采用Servlet,服務(wù)器可以完全授權(quán)對(duì)本地資源的訪問(wèn)(如數(shù)據(jù)庫(kù)),并且Servlet自身將會(huì)控制外部用戶的訪問(wèn)數(shù)量及訪問(wèn)性質(zhì)
Servlet可以是其它服務(wù)的客戶端程序,例如,它們可以用于分布式的應(yīng)用系統(tǒng)中,可以從本地硬盤(pán),或者通過(guò)網(wǎng)絡(luò)從遠(yuǎn)端硬盤(pán)激活Servlet。
Servlet可被鏈接(chain)。一個(gè)Servlet可以調(diào)用另一個(gè)或一系列Servlet,即成為它的客戶端。
采用Servlet Tag技術(shù),可以在HTML頁(yè)面中動(dòng)態(tài)調(diào)用Servlet。
Servlet API與協(xié)議無(wú)關(guān)。它并不對(duì)傳遞它的協(xié)議有任何假設(shè)。
像所有的Java程序一樣,Servlet擁有面向?qū)ο驤ava語(yǔ)言的所有優(yōu)勢(shì)
Servlet提供了Java應(yīng)用程序的所有優(yōu)勢(shì)——可移植、穩(wěn)健、易開(kāi)發(fā)。使用Servlet 的Tag技術(shù),Servlet能夠生成嵌于靜態(tài)HTML頁(yè)面中的動(dòng)態(tài)內(nèi)容。
一個(gè)Servlet被客戶端發(fā)送的***個(gè)請(qǐng)求激活,然后它將繼續(xù)運(yùn)行于后臺(tái),等待以后的請(qǐng)求。每個(gè)請(qǐng)求將生成一個(gè)新的線程,而不是一個(gè)完整的進(jìn)程。多個(gè)客戶能夠在同一個(gè)進(jìn)程中同時(shí)得到服務(wù)。一般來(lái)說(shuō),Servlet進(jìn)程只是在Web Server卸載時(shí)被卸載。
Servlet定義呢不是一句話就說(shuō)好的概念,那么很多的都是總結(jié)和歸納,以上就是本文對(duì)于Servlet定義的淺析,希望對(duì)你有所幫助。
【編輯推薦】