Java技術(shù)標準:服務(wù)器端小程序?qū)崙?zhàn)入門
Servlet
Servlet 是 Server Applet 的簡稱,譯為“服務(wù)器端小程序”。Servlet 是 Java 的一套技術(shù)標準,規(guī)定了如何使用 Java 來開發(fā)動態(tài)網(wǎng)站。換句話說,Java 可以用來開發(fā)網(wǎng)站后臺,但是要提前定義好一套規(guī)范,并編寫基礎(chǔ)類庫,這就是 Servlet 所做的事情。
Java Servlet 可以使用所有的 Java API,Java 能做的事情,Servlet 都能做。
Servlet只是古老的CGI技術(shù)的替代品,直接使用Servle開發(fā)還是很麻煩,所以Java后來又對Servlet 進行了升級,推出了 JSP 技術(shù)。JSP 只是對 Servlet 加了一層殼,JSP 經(jīng)過編譯后還是 Servlet。
Servlet是什么?
Java Servlet 是運行在 Web 服務(wù)器或應(yīng)用服務(wù)器上的程序,它是作為來自 Web 瀏覽器或其他 HTTP 客戶端的請求和 HTTP 服務(wù)器上的數(shù)據(jù)庫或應(yīng)用程序之間的中間層。
使用 Servlet,您可以收集來自網(wǎng)頁表單的用戶輸入,呈現(xiàn)來自數(shù)據(jù)庫或者其他源的記錄,還可以動態(tài)創(chuàng)建網(wǎng)頁。
Java Servlet 通常情況下與使用 CGI(Common Gateway Interface,公共網(wǎng)關(guān)接口)實現(xiàn)的程序可以達到異曲同工的效果。但是相比于 CGI,Servlet 有以下幾點優(yōu)勢:
? 性能明顯更好。
? Servlet 在 Web 服務(wù)器的地址空間內(nèi)執(zhí)行。這樣它就沒有必要再創(chuàng)建一個單獨的進程來處理每個客戶端請求。
? Servlet 是獨立于平臺的,因為它們是用 Java 編寫的。
? 服務(wù)器上的 Java 安全管理器執(zhí)行了一系列限制,以保護服務(wù)器計算機上的資源。因此,Servlet 是可信的。
? Java 類庫的全部功能對 Servlet 來說都是可用的。它可以通過 sockets 和 RMI 機制與 applets、數(shù)據(jù)庫或其他軟件進行交互。
Servlet 架構(gòu)
下圖顯示了 Servlet 在 Web 應(yīng)用程序中的位置。
Servlet實現(xiàn)過程
最早支持 Servlet 技術(shù)的是 JavaSoft 的 Java Web Server。此后,一些其它的基于 Java 的 Web Server 開始支持標準的 Servlet API。Servlet 的主要功能在于交互式地瀏覽和修改數(shù)據(jù),生成動態(tài) Web 內(nèi)容。這個過程為:
? 客戶端發(fā)送請求至服務(wù)器端;
? 服務(wù)器將請求信息發(fā)送至 Servlet;
? Servlet 生成響應(yīng)內(nèi)容并將其傳給服務(wù)器。響應(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 也被稱為 FacelessObject。
? 一個 Servlet 就是 Java 編程語言中的一個類,它被用來擴展服務(wù)器的性能,服務(wù)器上駐留著可以通過“請求-響應(yīng)”編程模型來訪問的應(yīng)用程序。雖然 Servlet 可以對任何類型的請求產(chǎn)生響應(yīng),但通常只用來擴展 Web 服務(wù)器的應(yīng)用程序。
Servlet命名
Servlet 的命名可以看出 sun 命名的特點,如 Applet 表示小應(yīng)用程序;Scriptlet = Script + Applet,表示小腳本程序;同樣 Servlet = Service + Applet,表示小服務(wù)程序。
生命周期編輯
客戶端請求該 Servlet;
加載 Servlet 類到內(nèi)存;
實例化并調(diào)用init()方法初始化該 Servlet;
service()(根據(jù)請求方法不同調(diào)用doGet() 或者 doPost(),此外還有doHead()、doPut()、doTrace()、doDelete()、doOptions());
destroy()。
加載和實例化 Servlet。這項操作一般是動態(tài)執(zhí)行的。然而,Server 通常會提供一個管理的選項,用于在 Server 啟動時強制裝載和初始化特定的 Servlet。
Server 創(chuàng)建一個 Servlet的實例
第一個客戶端的請求到達 Server
Server 調(diào)用 Servlet 的 init() 方法(可配置為 Server 創(chuàng)建 Servlet 實例時調(diào)用,在 web.xml 中 標簽下配置 標簽,配置的值為整型,值越小 Servlet 的啟動優(yōu)先級越高)
一個客戶端的請求到達 Server
Server 創(chuàng)建一個請求對象,處理客戶端請求
Server 創(chuàng)建一個響應(yīng)對象,響應(yīng)客戶端請求
Server 激活 Servlet 的 service() 方法,傳遞請求和響應(yīng)對象作為參數(shù)
service() 方法獲得關(guān)于請求對象的信息,處理請求,訪問其他資源,獲得需要的信息
service() 方法使用響應(yīng)對象的方法,將響應(yīng)傳回Server,最終到達客戶端。service()方法可能激活其它方法以處理請求,如 doGet() 或 doPost() 或程序員自己開發(fā)的新的方法。
對于更多的客戶端請求,Server 創(chuàng)建新的請求和響應(yīng)對象,仍然激活此 Servlet 的 service() 方法,將這兩個對象作為參數(shù)傳遞給它。如此重復(fù)以上的循環(huán),但無需再次調(diào)用 init() 方法。一般 Servlet 只初始化一次(只有一個對象),當 Server 不再需要 Servlet 時(一般當 Server 關(guān)閉時),Server 調(diào)用 Servlet 的 destroy() 方法。
請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個字
最新活動更多
-
即日-12.26立即報名>>> 【在線會議】村田用于AR/VR設(shè)計開發(fā)解決方案
-
1月8日火熱報名中>> Allegro助力汽車電氣化和底盤解決方案優(yōu)化在線研討會
-
即日-1.14火熱報名中>> OFweek2025中國智造CIO在線峰會
-
即日-1.24立即參與>>> 【限時免費】安森美:Treo 平臺帶來出色的精密模擬
-
即日-2025.8.1立即下載>> 《2024智能制造產(chǎn)業(yè)高端化、智能化、綠色化發(fā)展藍皮書》
-
精彩回顧立即查看>> 【線下會議】OFweek 2024(第九屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會
推薦專題
- 高級軟件工程師 廣東省/深圳市
- 自動化高級工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級銷售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專家 廣東省/江門市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市
OFweek人工智能網(wǎng)
獲取更多精彩內(nèi)容