1. 程式人生 > >Servlet、Servlet容器

Servlet、Servlet容器

() 返回 pos 發送 容器 較高的 內部 方式 以及

Java Servlet(Java服務器小程序)是一個基於Java技術的Web組件,運行在服務器端,它由Servlet容器所管理,用於生成動態的內容

Servlet容器也叫做Servlet引擎,是Web服務器或應用程序服務器的一部分,用於在發送的請求和響應之上提供網絡服務,解碼基於 MIME的請求,格式化基於MIME的響應。

Servlet沒有main方法,不能獨立運行,它必須被部署到Servlet容器中,由容器來實例化和調用 Servlet的方法(如doGet()和doPost()),Servlet容器在Servlet的生命周期內包容和管理Servlet

在JSP技術 推出後,管理和運行Servlet/JSP的容器也稱為Web容器。

有了servlet之後,用戶通過單擊某個鏈接或者直接在瀏覽器的地址欄中輸入URL來訪問Servlet,Web服務器接收到該請求後,並不是將 請求直接交給Servlet,而是交給Servlet容器。Servlet容器實例化Servlet,調用Servlet的一個特定方法對請求進行處理, 並產生一個響應。這個響應由Servlet容器返回給Web服務器,Web服務器包裝這個響應,以HTTP響應的形式發送給Web瀏覽器。

servlet容器能提供什麽?

我們知道需要由servlet容器來管理和運行servlet,但是為什麽要這樣做呢?使用servlet容器的原因有:

  通信支持:利用容器提供的方法,你能輕松的讓servlet與web服務器對話,而不用自己建立serversocket、監聽某個端口、創建流等 等。容器知道自己與web服務器之間的協議,所以你的servlet不用擔心web服務器(如Apache)和你自己的web代碼之間的API,只需要考 慮如何在servlet中實現業務邏輯(如處理一個訂單)。
  生命周期管理:servlet容器控制著servlet的生與死,它負責加載類、實例化和初始化servlet,調用servlet方法,以及使servlet實例被垃圾回收,有了servlet容器,你不需要太多的考慮資源管理。
  多線程支持:容器會自動為它所接收的每個servlet請求創建一個新的java線程。針對用戶的請求,如果servlet已經運行完相應的http服務方法,這個線程就會結束。這並不是說你不需要考慮線程安全性,其實你還會遇到同步問題,不過這樣能使你少做很多工作。
聲明方式實現安全:利用servlet容器,你可以使用xml部署描述文件來配置和修改安全性,而不必將其硬編碼寫到servlet類代碼中。
  JSP支持:servlet容器負責將jsp代碼翻譯為真正的java代碼。

servlet具有以下優點:

  Servlet是單實例多線程的運行方式,每個請求在一個獨立的線程中運行,而提供服務的Servlet實例只有一個。
  Servlet具有可升級性,能響應更多的請求,因為Servlet容器使用一個線程而不是操作系統進程,而線程僅占用有限的系統資源。
  Servlet使用標準的API,被更多的Web服務器所支持。
  Servlet使用Java語言編寫,因此擁有Java程序語言的所有優點,包括容易開發和平臺獨立性。
  Servlet可以訪問Java平臺豐富的類庫,使得各種應用的開發更為容易。
  Servlet容器給Servlet提供額外的功能,如錯誤處理和安全。

Servlet容器的分類

根據Servlet容器工作模式的不同,可以將Servlet容器分為以下三類:

1)獨立的Servlet容器

    當我們使用基於Java技術的Web服務器時,Servlet容器作為構成Web服務器的一部分而存在。然而大多數的Web服務器並非基於Java,因此,就有了下面兩種Servlet容器的工作模式。

2)進程內的Servlet容器

    Servlet容器由Web服務器插件和Java容器兩部分的實現組成。Web服務器插件在某個Web服務器內部地址空間中打開一個 JVM(Java虛擬機),使得Java容器可以在此JVM中加載並運行Servlet。如有客戶端調用Servlet的請求到來,插件取得對此請求的控 制並將它傳遞(使用JNI技術)給Java容器,然後由Java容器將此請求交由Servlet進行處理。進程內的Servlet容器對於單進程、多線程 的服務器非常適合,提供了較高的運行速度,但伸縮性有所不足。

3)進程外的Servlet容器

    Servlet容器運行於Web服務器之外的地址空間,它也是由Web服務器插件和Java容器兩部分的實現組成的。Web服務器插件和Java容 器(在外部JVM中運行)使用IPC機制(通常是TCP/IP)進行通信。當一個調用Servlet的請求到達時,插件取得對此請求的控制並將其傳遞(使 用IPC機制)給Java容器。進程外Servlet容器對客戶請求的響應速度不如進程內的Servlet容器,但進程外容器具有更好的伸縮性和穩定性。

Servlet、Servlet容器