Java技術(shù)標(biāo)準(zhǔn):服務(wù)器端小程序?qū)崙?zhàn)入門(mén)
Servlet
Servlet 是 Server Applet 的簡(jiǎn)稱(chēng),譯為“服務(wù)器端小程序”。Servlet 是 Java 的一套技術(shù)標(biāo)準(zhǔn),規(guī)定了如何使用 Java 來(lái)開(kāi)發(fā)動(dòng)態(tài)網(wǎng)站。換句話說(shuō),Java 可以用來(lái)開(kāi)發(fā)網(wǎng)站后臺(tái),但是要提前定義好一套規(guī)范,并編寫(xiě)基礎(chǔ)類(lèi)庫(kù),這就是 Servlet 所做的事情。
Java Servlet 可以使用所有的 Java API,Java 能做的事情,Servlet 都能做。
Servlet只是古老的CGI技術(shù)的替代品,直接使用Servle開(kāi)發(fā)還是很麻煩,所以Java后來(lái)又對(duì)Servlet 進(jìn)行了升級(jí),推出了 JSP 技術(shù)。JSP 只是對(duì) Servlet 加了一層殼,JSP 經(jīng)過(guò)編譯后還是 Servlet。
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)行交互。
Servlet 架構(gòu)
下圖顯示了 Servlet 在 Web 應(yīng)用程序中的位置。
Servlet實(shí)現(xiàn)過(guò)程
最早支持 Servlet 技術(shù)的是 JavaSoft 的 Java Web Server。此后,一些其它的基于 Java 的 Web Server 開(kāi)始支持標(biāo)準(zhǔn)的 Servlet API。Servlet 的主要功能在于交互式地瀏覽和修改數(shù)據(jù),生成動(dòng)態(tài) Web 內(nèi)容。這個(gè)過(guò)程為:
? 客戶(hù)端發(fā)送請(qǐng)求至服務(wù)器端;
? 服務(wù)器將請(qǐng)求信息發(fā)送至 Servlet;
? Servlet 生成響應(yīng)內(nèi)容并將其傳給服務(wù)器。響應(yīng)內(nèi)容動(dòng)態(tài)生成,通常取決于客戶(hù)端的請(qǐng)求;
? 服務(wù)器將響應(yīng)返回給客戶(hù)端。
? 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è)圖形用戶(hù)界面。從這個(gè)角度講,Servlet 也被稱(chēng)為 FacelessObject。
? 一個(gè) Servlet 就是 Java 編程語(yǔ)言中的一個(gè)類(lèi),它被用來(lái)擴(kuò)展服務(wù)器的性能,服務(wù)器上駐留著可以通過(guò)“請(qǐng)求-響應(yīng)”編程模型來(lái)訪問(wèn)的應(yīng)用程序。雖然 Servlet 可以對(duì)任何類(lèi)型的請(qǐng)求產(chǎn)生響應(yīng),但通常只用來(lái)擴(kuò)展 Web 服務(wù)器的應(yīng)用程序。
Servlet命名
Servlet 的命名可以看出 sun 命名的特點(diǎn),如 Applet 表示小應(yīng)用程序;Scriptlet = Script + Applet,表示小腳本程序;同樣 Servlet = Service + Applet,表示小服務(wù)程序。
生命周期編輯
客戶(hù)端請(qǐng)求該 Servlet;
加載 Servlet 類(lèi)到內(nèi)存;
實(shí)例化并調(diào)用init()方法初始化該 Servlet;
service()(根據(jù)請(qǐng)求方法不同調(diào)用doGet() 或者 doPost(),此外還有doHead()、doPut()、doTrace()、doDelete()、doOptions());
destroy()。
加載和實(shí)例化 Servlet。這項(xiàng)操作一般是動(dòng)態(tài)執(zhí)行的。然而,Server 通常會(huì)提供一個(gè)管理的選項(xiàng),用于在 Server 啟動(dòng)時(shí)強(qiáng)制裝載和初始化特定的 Servlet。
Server 創(chuàng)建一個(gè) Servlet的實(shí)例
第一個(gè)客戶(hù)端的請(qǐng)求到達(dá) Server
Server 調(diào)用 Servlet 的 init() 方法(可配置為 Server 創(chuàng)建 Servlet 實(shí)例時(shí)調(diào)用,在 web.xml 中 標(biāo)簽下配置 標(biāo)簽,配置的值為整型,值越小 Servlet 的啟動(dòng)優(yōu)先級(jí)越高)
一個(gè)客戶(hù)端的請(qǐng)求到達(dá) Server
Server 創(chuàng)建一個(gè)請(qǐng)求對(duì)象,處理客戶(hù)端請(qǐng)求
Server 創(chuàng)建一個(gè)響應(yīng)對(duì)象,響應(yīng)客戶(hù)端請(qǐng)求
Server 激活 Servlet 的 service() 方法,傳遞請(qǐng)求和響應(yīng)對(duì)象作為參數(shù)
service() 方法獲得關(guān)于請(qǐng)求對(duì)象的信息,處理請(qǐng)求,訪問(wèn)其他資源,獲得需要的信息
service() 方法使用響應(yīng)對(duì)象的方法,將響應(yīng)傳回Server,最終到達(dá)客戶(hù)端。service()方法可能激活其它方法以處理請(qǐng)求,如 doGet() 或 doPost() 或程序員自己開(kāi)發(fā)的新的方法。
對(duì)于更多的客戶(hù)端請(qǐng)求,Server 創(chuàng)建新的請(qǐng)求和響應(yīng)對(duì)象,仍然激活此 Servlet 的 service() 方法,將這兩個(gè)對(duì)象作為參數(shù)傳遞給它。如此重復(fù)以上的循環(huán),但無(wú)需再次調(diào)用 init() 方法。一般 Servlet 只初始化一次(只有一個(gè)對(duì)象),當(dāng) Server 不再需要 Servlet 時(shí)(一般當(dāng) Server 關(guān)閉時(shí)),Server 調(diào)用 Servlet 的 destroy() 方法。
發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
最新活動(dòng)更多
-
10月31日立即下載>> 【限時(shí)免費(fèi)下載】TE暖通空調(diào)系統(tǒng)高效可靠的組件解決方案
-
即日-11.13立即報(bào)名>>> 【在線會(huì)議】多物理場(chǎng)仿真助跑新能源汽車(chē)
-
11月28日立即報(bào)名>>> 2024工程師系列—工業(yè)電子技術(shù)在線會(huì)議
-
12月19日立即報(bào)名>> 【線下會(huì)議】OFweek 2024(第九屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
-
即日-12.26火熱報(bào)名中>> OFweek2024中國(guó)智造CIO在線峰會(huì)
-
即日-2025.8.1立即下載>> 《2024智能制造產(chǎn)業(yè)高端化、智能化、綠色化發(fā)展藍(lán)皮書(shū)》
推薦專(zhuān)題
- 1 【一周車(chē)話】沒(méi)有方向盤(pán)和踏板的車(chē),你敢坐嗎?
- 2 特斯拉發(fā)布無(wú)人駕駛車(chē),還未迎來(lái)“Chatgpt時(shí)刻”
- 3 特斯拉股價(jià)大跌15%:Robotaxi離落地還差一個(gè)蘿卜快跑
- 4 馬斯克給的“驚喜”夠嗎?
- 5 大模型“新星”開(kāi)啟變現(xiàn)競(jìng)速
- 6 海信給AI電視打樣,12大AI智能體全面升級(jí)大屏體驗(yàn)
- 7 打完“價(jià)格戰(zhàn)”,大模型還要比什么?
- 8 馬斯克致敬“國(guó)產(chǎn)蘿卜”?
- 9 神經(jīng)網(wǎng)絡(luò),誰(shuí)是盈利最強(qiáng)企業(yè)?
- 10 比蘋(píng)果偉大100倍!真正改寫(xiě)人類(lèi)歷史的智能產(chǎn)品降臨
- 高級(jí)軟件工程師 廣東省/深圳市
- 自動(dòng)化高級(jí)工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷(xiāo)售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級(jí)銷(xiāo)售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專(zhuān)家 廣東省/江門(mén)市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市