1. 程式人生 > >Java Servlet 實戰入門教程-00-Servlet 系列教程彙總 Servlet 是什麼,Servlet與tomcat/j2EE的關係

Java Servlet 實戰入門教程-00-Servlet 系列教程彙總 Servlet 是什麼,Servlet與tomcat/j2EE的關係

系列文章彙總

寫作緣由

原來學習過多次 servlet,但是平時工作中一直使用 spring mvc 等框架。使用的時候寫幾個註解,實際原理並不知曉。 此係列文章,意在知其然,知其所以然。 學習之路,就是保持一顆好奇之心。

Servlet

概念

servlet是用於擴充套件和增強Web伺服器的Java平臺技術。

servlet提供了一種基於元件的、獨立於平臺的方法來構建基於web的應用程式,而不受CGI程式的效能限制。

與專有的伺服器擴充套件機制(如Netscape伺服器API或Apache模組)不同,servlet是獨立於伺服器和平臺的。這使您可以自由地為您的伺服器、平臺和工具選擇“最佳品種”策略。

servlet可以訪問所有Java API,包括訪問企業資料庫的JDBC API。servlet還可以訪問特定於http的呼叫庫,並獲得成熟Java語言的所有好處,包括可移植性、效能、可重用性和崩潰保護。

如今,servlet是構建互動式Web應用程式的流行選擇。

容器

第三方servlet容器可用於Apache Web伺服器、Microsoft IIS等。

Servlet容器通常是Web和應用伺服器的元件,如BEA WebLogic應用伺服器、IBM WebSphere、Sun Java系統Web伺服器、Sun Java系統應用伺服器等。

JSP

您可能想了解有關JavaServer Pages (JSP)技術的最新資訊。

JSP技術是servlet技術的擴充套件,該技術的建立是為了支援編輯HTML和XML頁面。

它使固定或靜態模板資料與動態內容相結合變得更加容易。

即使您很喜歡編寫servlet,也有幾個令人信服的理由來研究JSP技術作為現有工作的補充。

vs CGI

Java Servlet 通常情況下與使用 CGI(Common Gateway Interface,公共閘道器介面)實現的程式可以達到異曲同工的效果。但是相比於 CGI,Servlet 有以下幾點優勢:

  • 效能明顯更好。

  • Servlet 在 Web 伺服器的地址空間內執行。這樣它就沒有必要再建立一個單獨的程序來處理每個客戶端請求。

  • Servlet 是獨立於平臺的,因為它們是用 Java 編寫的。

  • 伺服器上的 Java 安全管理器執行了一系列限制,以保護伺服器計算機上的資源。因此,Servlet 是可信的。

  • Java 類庫的全部功能對 Servlet 來說都是可用的。它可以通過 sockets 和 RMI 機制與 applets、資料庫或其他軟體進行互動。

與 J2EE 的關係

Servlet是J2EE 規範中的一種,主要是為了擴充套件java作為web服務的功能。

他的作用就是為java程式提供一個統一的web應用的規範,方便程式設計師統一的使用這種規範來編寫程式,應用容器可以使用提供的規範來實現自己的特性。

與 Tomcat 的關係

Tomcat 是Web應用伺服器,是一個Servlet/JSP容器。

Tomcat 作為Servlet容器,負責處理客戶請求,把請求傳送給Servlet,並將Servlet的響應傳送回給客戶。

而Servlet是一種執行在支援Java語言的伺服器上的元件。 Servlet最常見的用途是擴充套件Java Web伺服器功能,提供非常安全的,可移植的,易於使用的CGI替代品。

從http協議中的請求和響應可以得知,瀏覽器發出的請求是一個請求文字,而瀏覽器接收到的也應該是一個響應文字。

但是在上面這個圖中,並不知道是如何轉變的,只知道瀏覽器傳送過來的請求也就是request,我們響應回去的就用response。忽略了其中的細節,現在就來探究一下。

tomcat-servlet

①:Tomcat將http請求文字接收並解析,然後封裝成HttpServletRequest型別的request物件,所有的HTTP頭資料讀可以通過request物件呼叫對應的方法查詢到。

②:Tomcat同時會要響應的資訊封裝為HttpServletResponse型別的response物件,通過設定response屬性就可以控制要輸出到瀏覽器的內容,然後將response交給tomcat,tomcat就會將其變成響應文字的格式傳送給瀏覽器

Java Servlet API 是Servlet容器(tomcat)和servlet之間的介面,它定義了serlvet的各種方法,還定義了Servlet容器傳送給Servlet的物件類,其中最重要的就是ServletRequest和ServletResponse。所以說我們在編寫servlet時,需要實現Servlet介面,按照其規範進行操作。

個人感想

平時的工作中,使用 spring mvc 註解用來用去,其實一直沒有深究過其本質是什麼。

  • Web

我們每一個 web 服務,就是客戶端和服務端檔案資訊的交換。

  • Servlet

Servlet 是一套標準,甚至可以簡單的理解為介面。

這些介面是無法單獨執行的,就需要依賴於容器(Container)。

比如常見的 TomcatJetty

為什麼需要容器來處理 servlet 請求呢?

這樣肯定帶來了額外的開銷,但是為什麼這麼做呢?

除卻開發的成本較高,維護統一這些不談。

我們先看看容器有哪些功能。

通訊支援

Servlet 與 Web 之間的通訊,容器都會幫我們處理。

我們只需要專心關注於業務。

生命週期

Servlet 的生命週期與資源分配,容器都會幫我們處理好。

多執行緒支援

Servlet 不是執行緒安全的,這點我們在使用的時候要謹慎。

但是 Tomcat 在處理的時候,每一個請求都會新建一個執行緒去處理,宣告週期結束後,會自動銷燬。

執行緒方面,已經方便處理很多。

宣告方式實現安全

利用容器配置,我們改下 *.xml 配置即可進行相關設定。

而不用重新修改 Java 程式碼,相對安全便捷。

JSP 支援

JSP 功能以前是多麼強大,正是容器將其翻譯成為 java 的。

Spring MVC

基於 java 註解對 Servlet 進行一系列的封裝,大大簡化我們的開發難度。

後面我們會手寫一個簡化版的 spring mvc。

原文地址

參考資料

  • servlet 如何工作
  • Servlet 執行緒安全