標籤:
Servlet 是什嗎?
第一,Servlet是一種規範,由Sun公司制定的伺服器端組件規範。
第二,Servlet 可以運行在web伺服器或應用伺服器上。
第三,Servlet由Servlet容器進行管理,可實現諸如“執行個體化並管理Servlet對象”、“調用Servlet生命週期方
法”、“解析及封裝特定協議的請求和響應”等工作。
第四,作為來自 網頁瀏覽器的請求和 資料庫或應用程式之間的中介層,Servlet可以收集來自網頁的使用者請
求,呈現來自資料庫或者其他源的記錄,可實現動態建立網頁。
Servlet 架構圖
顯示了 Servlet 在 Web 應用程式中的位置。
Servlet生命週期
Servlet 生命週期可定義為其從建立直到銷毀的整個過程。當使用者調用一個 Servlet 時,就會建立一個 Servlet
執行個體,每一個使用者請求都會產生一個新的線程。
以上是 Servlet 生命週期遵循的過程。
- 通過調用init ()方法進行初始化。
- 調用service()方法來處理用戶端的請求。
- 通過調用destroy()方法終止(結束)。
- 最後,Servlet 是由 JVM 的記憶體回收行程進行記憶體回收的。
現在讓我們詳細討論生命週期的方法。
Servlet 方法解讀
init() 方法
init 方法被設計成只調用一次。它在第一次建立 Servlet 時被調用,在後續每次使用者請求時不再調用。因此,它
是用於一次性初始化,init() 方法簡單地建立或載入一些資料,這些資料將被用於 Servlet 的整個生命週期。
init 方法的定義如下:
<span style="font-family:SimSun;">public void init() throws ServletException { // 初始化代碼… }</span>
service() 方法
service() 方法是執行實際任務的主要方法。Servlet 容器調用 service() 方法來處理來自用戶端(瀏覽
器)的請求,並把格式化的響應寫回給用戶端。
每次伺服器接收到一個 Servlet 請求時,伺服器會產生一個新的線程並調用服務。service() 方法檢查 HTTP
請求類型(GET、POST、PUT、DELETE 等),並在適當的時候調用 doGet、doPost、doPut,doDelete 等方法。
方法定義:
<span style="font-family:SimSun;"><span style="font-size:18px;">public void service(ServletRequest request,ServletResponse response) throws ServletException, IOException{}</span></span>
service() 方法由容器調用,service 方法在適當的時候調用 doGet、doPost、doPut、doDelete 等方法。
所以,我們不用對 service() 方法做任何動作,您只需要根據來自用戶端的請求類型來重載 doGet() 或
doPost() 即可。
doGet() 方法
GET 請求來自於一個 URL 的正常請求,或者一個未指定提交方式 的 HTML 表單,它由 doGet() 方法處理。
<span style="font-family:SimSun;"><span style="font-size:18px;">public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Servlet 代碼}</span></span>
doPost() 方法
POST 請求來自於一個特別指定了提交方式為 POST 的 HTML 表單,它由 doPost() 方法處理。
<span style="font-family:SimSun;">public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { // Servlet 代碼 }</span>
destroy() 方法
destroy() 方法只會被調用一次,在 Servlet 生命週期結束時被調用。destroy() 方法可以使 Servlet
關閉資料庫連接、停止後台線程、把 Cookie 列表或點擊計數器寫入到磁碟,並執行其他類似的清理活動。
在調用 destroy() 方法之後,servlet 對象被標記為記憶體回收。destroy 方法定義如下所示:
<span style="font-family:SimSun;">public void destroy() { // 終止化代碼… }</span>
初次接觸Servlet,可以把它理解為 .NET 中的Handler,因為他們有著類似的作用:都可用來處理用戶端發送的請
求,讓前台與商務邏輯松耦合,並且實現動態網頁的建立。
由於認知的不足,只能說先這麼理解。具體是不是這樣還需要實際應用深入瞭解後才能做出判斷。 現在學習新
知識的時候很希望從原先學過的知識中找到一些對應的影子,儘管不是那麼對應,也有可能這麼理解是錯誤的,但是
隨著不斷的深入學習,我們也會自然而然的校正這些偏差,留下更深刻的印象。
僅供參考,希望不要誤導大家。
J2EE的13 規範之解讀Servlet