- 輕量級Java EE企業(yè)應用開發(fā)實戰(zhàn)
- 柳偉衛(wèi)編著
- 1811字
- 2022-07-29 14:31:18
3.1 Servlet概述
Servlet是Server Applet的簡稱,稱為服務器端小程序或服務連接器,主要功能在于交互式地瀏覽和修改數(shù)據(jù),生成動態(tài)Web內(nèi)容。目前,新Servlet規(guī)范版本為Servlet 4.0(JSR 369)。
3.1.1 Servlet架構(gòu)
Java Servlet是運行在Web服務器或應用服務器上的程序,它是作為來自Web瀏覽器或其他HTTP客戶端的請求和HTTP服務器上的數(shù)據(jù)庫或應用程序之間的中間層。
使用Servlet可以收集來自網(wǎng)頁表單的用戶輸入,呈現(xiàn)來自數(shù)據(jù)庫或者其他源的記錄,還可以動態(tài)創(chuàng)建網(wǎng)頁。
圖3-1展示了Servlet架構(gòu)。

圖3-1 Servlet架構(gòu)
Servlet主要執(zhí)行以下任務:
- 讀取客戶端(瀏覽器)發(fā)送的顯式數(shù)據(jù),包括網(wǎng)頁上的HTML表單或自定義的HTTP客戶端程序的表單。
- 讀取客戶端(瀏覽器)發(fā)送的隱式HTTP請求數(shù)據(jù),包括Cookies、媒體類型和瀏覽器能理解的壓縮格式等。
- 處理數(shù)據(jù)并生成結(jié)果。這個過程可能需要訪問數(shù)據(jù)庫、執(zhí)行RMI等遠程過程調(diào)用、調(diào)用Web服務或者直接計算得出對應的響應。
- 發(fā)送顯式數(shù)據(jù)(文檔)到客戶端(瀏覽器)。該文檔的格式可以是多種多樣的,包括文本文件(HTML、XML或JSON文件)、二進制文件(GIF圖像)、Excel等。
- 發(fā)送隱式HTTP響應到客戶端(瀏覽器),包括告訴瀏覽器或其他客戶端被返回的文檔類型(例如HTML)、設置Cookies和緩存參數(shù)以及其他類似的任務。
3.1.2 Servlet生命周期
Servlet生命周期可被定義為從創(chuàng)建Servlet直到其銷毀的整個過程。以下是Servlet遵循的過程:
- Servlet通過調(diào)用init方法進行初始化。
- Servlet調(diào)用service方法來處理客戶端的請求。
- Servlet通過調(diào)用destroy方法終止。
- 最后,Servlet是由JVM的垃圾回收器進行垃圾回收的。
現(xiàn)在讓我們詳細討論生命周期的方法。
1.init方法
init方法被設計成只調(diào)用一次。它在第一次創(chuàng)建Servlet時被調(diào)用,在后續(xù)每次用戶請求時不再調(diào)用。因此,它用于一次性初始化。
Servlet創(chuàng)建于用戶第一次調(diào)用對應于該Servlet的URL時,但是也可以指定Servlet在服務器第一次啟動時被加載。
用戶調(diào)用一個Servlet就會創(chuàng)建一個Servlet實例,每一個用戶請求都會產(chǎn)生一個新的線程,適當?shù)臅r候移交給doGet或doPost方法。init方法簡單地創(chuàng)建或加載一些數(shù)據(jù),這些數(shù)據(jù)將被用于Servlet的整個生命周期。
init方法的定義如下:

2.service方法
service方法是執(zhí)行實際任務的主要方法。Servlet容器調(diào)用service方法來處理來自客戶端(瀏覽器)的請求,并把格式化的響應寫回給客戶端。
每次服務器接收到一個Servlet請求時,服務器會產(chǎn)生一個新的線程并調(diào)用服務。service方法檢查HTTP請求類型(GET、POST、PUT、DELETE等),并在適當?shù)臅r候調(diào)用doGet、doPost、doPut、doDelete等方法。
下面是該方法的特征:

service方法由容器調(diào)用,會在適當?shù)臅r候調(diào)用doGet、doPost、doPut、doDelete等方法。所以,不用對service方法做任何動作,只需要根據(jù)來自客戶端的請求類型來重寫doGet、doPost方法即可。
doGet和doPost方法是每次服務請求中常用的方法。下面介紹這兩種方法的特征。
3.doGet方法
當Servlet容器接收到GET請求時,會將該請求交由doGet方法處理。處理邏輯寫在重寫的doGet方法中,代碼如下:

4.doPost()方法
當Servlet容器接收到POST請求時,會將該請求交由doPost方法處理。處理邏輯寫在重寫的doPost方法中,代碼如下:

5.destroy方法
當Servlet容器確定Servlet應該從服務中移除時,將調(diào)用Servlet接口的destroy方法以允許Servlet釋放它使用的任何資源和保存任何持久化的狀態(tài)。例如,當想要節(jié)省內(nèi)存資源或它被關閉時,容器可以執(zhí)行destroy方法。
Servlet容器調(diào)用destroy方法之前,它必須讓當前正在執(zhí)行service方法的任何線程完成執(zhí)行,或者超過了服務器定義的時間限制。
一旦調(diào)用了Servlet實例的destroy方法,容器就無法再路由其他請求到該Servlet實例。如果容器需要再次使用該Servlet,就必須用該Servlet類的一個新實例。在destroy方法完成后,Servlet容器必須釋放Servlet實例以便被垃圾回收。
destroy方法定義如下:

3.1.3 常用方法
基本的Servlet接口定義了service方法來用于處理客戶端的請求。當有請求到達時,該方法由Servlet容器路由到一個Servlet實例來調(diào)用。
Web應用的并發(fā)請求處理通常需要Web開發(fā)人員設計適合多線程執(zhí)行的Servlet,從而保證service方法能在一個特定時間點處理多線程并發(fā)執(zhí)行。通常Web容器對于并發(fā)請求將使用同一個Servlet處理,并且在不同的線程中并發(fā)執(zhí)行service方法。
HttpServlet抽象子類在基本的Servlet上添加了協(xié)議相關的方法,并且這些方法能根據(jù)HTTP請求類型自動由HttpServlet中實現(xiàn)的service方法轉(zhuǎn)發(fā)到相應的協(xié)議相關的處理方法上。這些方法是:
- doGet處理HTTP GET請求。
- doPost處理HTTP POST請求。
- doPut處理HTTP PUT請求。
- doDelete處理HTTP DELETE請求。
- doHead處理HTTP HEAD請求。
- doOptions處理HTTP OPTIONS請求。
- doTrace處理HTTP TRACE請求。
一般情況下,開發(fā)基于HTTP的Servlet時,Servlet開發(fā)人員只需實現(xiàn)doGet和doPost請求處理方法即可。如果開發(fā)人員想使用其他處理方法,那么其使用方式跟之前的類似,即HTTP編程都是類似的。
doPut和doDelete方法允許Servlet開發(fā)人員讓支持HTTP/1.1的客戶端使用這些功能。HttpServlet中的doHead方法可以認為是doGet方法的一種特殊形式,它僅返回由doGet方法產(chǎn)生的header信息。doOptions方法返回當前Servlet支持的HTTP方法。doTrace方法返回的響應包含TRACE請求的所有頭信息。
- Dynamics 365 for Finance and Operations Development Cookbook(Fourth Edition)
- Python時間序列預測
- Mastering Drupal 8 Views
- Protocol-Oriented Programming with Swift
- Building Android UIs with Custom Views
- Java Web開發(fā)就該這樣學
- Java SE實踐教程
- Hands-On Full Stack Development with Spring Boot 2.0 and React
- Java Web從入門到精通(第3版)
- Apache Camel Developer's Cookbook
- 單片機原理及應用技術(shù)
- Windows Phone 8 Game Development
- Mapping with ArcGIS Pro
- Getting Started with RethinkDB
- 開源網(wǎng)絡地圖可視化:基于Leaflet的在線地圖開發(fā)