Java Servlet 記錄

在JavaEE平臺上,處理TCP連接,解析HTTP協議這些底層工作統統扔給現成的Web服務器去做,我們只需要把自己的應用程序跑在Web服務器上。爲了實現這一目的,JavaEE提供了Servlet API,我們使用Servlet API編寫自己的Servlet來處理HTTP請求,Web服務器實現Servlet API接口,實現底層功能。

Java Servlet 是運行在 Web 服務器或應用服務器上的程序,它是作爲來自 Web 瀏覽器或其他 HTTP 客戶端的請求和 HTTP 服務器上的數據庫或應用程序之間的中間層。

1. 生命週期

Servlet 通過調用 init () 方法進行初始化。
Servlet 調用 service() 方法來處理客戶端的請求。
Servlet 通過調用 destroy() 方法終止(結束)。
最後,Servlet 是由 JVM 的垃圾回收器進行垃圾回收的。

1.1 init() 方法

init 方法被設計成只調用一次。它在第一次創建 Servlet 時被調用,在後續每次用戶請求時不再調用。因此,它是用於一次性初始化。

Servlet 創建於用戶第一次調用對應於該 Servlet 的 URL 時,但是您也可以指定 Servlet 在服務器第一次啓動時被加載。

當用戶調用一個 Servlet 時,就會創建一個 Servlet 實例,每一個用戶請求都會產生一個新的線程,適當的時候移交給 doGet 或 doPost 方法。init() 方法簡單地創建或加載一些數據,這些數據將被用於 Servlet 的整個生命週期。

1.2 service() 方法

service() 方法是執行實際任務的主要方法。Servlet 容器(即 Web 服務器)調用 service() 方法來處理來自客戶端(瀏覽器)的請求,並把格式化的響應寫回給客戶端。

每次服務器接收到一個 Servlet 請求時,服務器會產生一個新的線程並調用服務。service() 方法檢查 HTTP 請求類型(GET、POST、PUT、DELETE 等),並在適當的時候調用 doGet、doPost、doPut,doDelete 等方法。

service() 方法由容器調用,service 方法在適當的時候調用 doGet、doPost、doPut、doDelete 等方法。所以,您不用對 service() 方法做任何動作,您只需要根據來自客戶端的請求類型來重寫 doGet() 或 doPost() 即可。

1.3 destroy() 方法

destroy() 方法只會被調用一次,在 Servlet 生命週期結束時被調用。destroy() 方法可以讓您的 Servlet 關閉數據庫連接、停止後臺線程、把 Cookie 列表或點擊計數器寫入到磁盤,並執行其他類似的清理活動。

在調用 destroy() 方法之後,servlet 對象被標記爲垃圾回收。

1.4 總結

第一個到達服務器的 HTTP 請求被委派到 Servlet 容器。
Servlet 容器在調用 service() 方法之前加載 Servlet。
然後 Servlet 容器處理由多個線程產生的多個請求,每個線程執行一個單一的 Servlet 實例的 service() 方法。

2. 開發

一個Servlet總是繼承自HttpServlet,然後覆寫doGet()或doPost()方法。注意到doGet()方法傳入了HttpServletRequest和HttpServletResponse兩個對象,分別代表HTTP請求和響應。我們使用Servlet API時,並不直接與底層TCP交互,也不需要解析HTTP協議,因爲HttpServletRequest和HttpServletResponse就已經封裝好了請求和響應。以發送響應爲例,我們只需要設置正確的響應類型,然後獲取PrintWriter,寫入響應即可。

要使用Servlet API需要引入Servlet的包

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

開發時可下載Tomcat或使用嵌入式Tomcat,使用Tomcat包的話需在IDEA中配置Tomcat安裝包地址,並添加部署的war包
IDEA配置Tomcat地址
添加部署包

參考:
Servlet開發
Servlet 教程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章