Tomcat Servlet 工作原理(An Introduction to Tomcat Servlet Interactions)

本文譯自:An Introduction to Tomcat Servlet Interactions
譯者:喝酒不騎馬
郵箱:[email protected]


Tomcat Servlet 功能介紹

Apache Tomcat 因其靈活的配置和交互能力其實是作爲通用的 web 應用服務運行在多種環境上的,但主要還是作爲一個 Java Servlet 容器。

Tomcat 利用它對 Java Servlet 和 JSP API 的實現,可以從客戶端接收請求,通過動態編譯容器管理的 Java class 文件來處理相關應用程序上下文中指定的請求,並將結果返還給客戶端。這種動態生成的特點是快速、多線程,同時還不依賴於特有的平臺去處理請求。

除此之外,Java Servlet 的設計規範兼容大部分其它主流的 Java Web 技術,因此託管在 Tomcat 服務上的 servlet 可以使用所有 Tomcat 所支持的資源。通過 Tomcat 嵌套分層式 XML 配置文件可以對資源的訪問進行詳細地控制,同時還有鬆耦合、易發佈、邏輯性強、可讀性好的特點。

本文,我們將討論 Apache Tomcat 是如何快速地將這些動態內容分發給客戶端的。

Tomcat 是如何處理 Servlets 的?

Servlet 規範中的一個關鍵要求是,對於整個數據處理過程,Servlet 只負責處理指定的部分。例如,servlet 中的代碼不會監聽某個特定端口上的請求,也不會直接和客戶端打交道,也不負責管理資源的訪問權限。而這些瑣事都是交給 Tomcat 的 sevlet 容器掌管的。

這麼做可以使 servlet 在各種環境中被複用,也可以讓其他人並行開發某些模塊。也就是說,只要不是一些重大的改動,比如想優化效率,那麼不需要改動 servlet 代碼,只需要重構連接器就好了。

Selvet 的生命週期

作爲一個被 Tomcat 管理的組件,servlet 有它的生命週期。通常情況下,當有請求時,容器會加載 servlet 的 class 文件,這標誌着 servlet 生命週期的開始。當容器通過調用 destroy 方法來關閉 servlet 時,servlet 的生命週期結束。servlet 在這兩個節點中的活動被視作是它的生命週期。

一個典型的 servlet 在 Tomcat 上運行時的生命週期如下所示:

  1. Tomcat 通過它其中個一個連接器收到了一個客戶端的請求。
  2. Tomcat 將這個請求映射到一個合適的引擎(Sevlet)來處理。這些引擎包含在其它的一些信息中(例如主機、服務器等信息),而這些信息縮小了 Tomcat 搜索正確引擎的範圍。
  3. 當請求被映射到一個對應的 servlet,Tomcat 會檢查這個 servlet 的 class 文件是否已經被加載。如果沒有的話,Tomcat 會將 servlet 編譯成可以被 JVM 所執行的 Java 字節碼,並創建一個 servlet 實例。
  4. Tomcat 通過調用 servlet 的 init 方法來對它進行初始化。Servlet 中包含着讀取 Tomcat 配置文件並能相應地執行操作的代碼,也包含聲明哪些資源可能會被使用的代碼,這使 Tomcat 能夠以有序的、可管理的方式來創建 servlet。
  5. 當 servlet 被初始化後,Tomcat 可以調用 servlet 中的業務相關的方法來處理這個請求,並作爲一個響應(response)返回。
  6. 在整個 servlet 的生命週期裏,Tomcat 和 servlet 之間可以使用監聽器來進行通訊,這些監聽器監視着 servlet 的變化。Tomcat 可以用多種方式來檢索和存儲這些變化,並允許其它的 servlet 能夠獲取這些信息,從而允許那些給定了上下文的各個組件在一個或多個用戶會話間維護或訪問這些信息。例如電商應用可以在購物車中記錄用戶添加的商品,而在結賬環節中使用這些數據
  7. Tomcat 通過調用 servlet 的 destroy 方法來“委婉地”刪除 servlet。這個操作可以由更改被監聽的狀態來觸發,或者通過發送給 Tomcat 的用於取消 servlet 部署的外部命令觸發,亦或是通過關閉服務器來觸發。

組件的協作

通過使用 servlet 以及訪問由 HTML 和 JSP(HTML 和 Java 的混合體)組成的資源,並使用本地標籤庫或自定義標籤調用 servlet 方法的方式,Tomcat 可以給用戶提供一個動態的、安全的、可持久化的 web 應用。

舉個例子,用戶可以訪問一個頁面,這個頁面是由客戶端通過 AJAX、CSS 以及 HTML 與 DOM 交互的方式來處理動態用戶對象的。而用戶信息則通過與 servlet 方法交互的 JSP 標籤來從數據庫中獲取。這使頁面的展示功能和業務邏輯完全分離,從而提高了安全性和設計的靈活性。

延展閱讀

在本問的基礎上,我們提供了幾個深入講解 Tomcat 如何使用 servlet 的文章:

  • Tomcat Deploy——簡單介紹關於Tomcat的部署以及如何配置 servlet。
  • Tomcat JSP——深入理解 JSP(一種使用 servlet 規範元素的 Java 技術),還包括 JSP 架構的概覽以及最佳實踐。
  • Tomcat Context——一篇通俗易懂的,對 Tomcat 基於容器的管理模型的全面介紹文章,這對於開始使用 servlet 的人來說很有幫助。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章