1. 程式人生 > >Java Web(Servlet篇):簡介

Java Web(Servlet篇):簡介

目錄

Servlet 簡介

servlet 優勢

Servlet 架構

Servlet 任務

Servlet 包

Servlet 基本結構

Servlet 生命週期

init() 方法

service() 方法

doGet() 方法

doPost() 方法

destroy() 方法

getServletConfig() 方法

生命走起架構圖

總結

原始碼下載


Servlet 簡介

Servlet(Server Applet)是Java Servlet的簡稱,稱為小服務程式或服務聯結器,用Java編寫的伺服器端程式,主要功能在於互動式地瀏覽和修改資料,生成動態Web內容。

狹義的Servlet是指Java語言實現的一個介面,廣義的Servlet是指任何實現了這個Servlet介面的類,一般情況下,人們將Servlet理解為後者。Servlet運行於支援Java的應用伺服器中。從原理上講,Servlet可以響應任何型別的請求,但絕大多數情況下Servlet只用來擴充套件基於HTTP協議的Web伺服器。

Java Servlet 是執行在 Web 伺服器或應用伺服器上的程式,它是作為來自 Web 瀏覽器或其他 HTTP 客戶端的請求和 HTTP 伺服器上的資料庫或應用程式之間的中間層。

servlet 優勢

  • 效能明顯更好。
  • Servlet 在 Web 伺服器的地址空間內執行。這樣它就沒有必要再建立一個單獨的程序來處理每個客戶端請求。
  • Servlet 是獨立於平臺的,因為它們是用 Java 編寫的。
  • 伺服器上的 Java 安全管理器執行了一系列限制,以保護伺服器計算機上的資源。因此,Servlet 是可信的。
  • Java 類庫的全部功能對 Servlet 來說都是可用的。它可以通過 sockets 和 RMI 機制與 applets、資料庫或其他軟體進行互動。

Servlet 架構

Servlet 架構

Servlet 任務

Servlet 執行以下主要任務:

  • 讀取客戶端(瀏覽器)傳送的顯式的資料。這包括網頁上的 HTML 表單,或者也可以是來自 applet 或自定義的 HTTP 客戶端程式的表單。
  • 讀取客戶端(瀏覽器)傳送的隱式的 HTTP 請求資料。這包括 cookies、媒體型別和瀏覽器能理解的壓縮格式等等。
  • 處理資料並生成結果。這個過程可能需要訪問資料庫,執行 RMI 或 CORBA 呼叫,呼叫 Web 服務,或者直接計算得出對應的響應。
  • 傳送顯式的資料(即文件)到客戶端(瀏覽器)。該文件的格式可以是多種多樣的,包括文字檔案(HTML 或 XML)、二進位制檔案(GIF 影象)、Excel 等。
  • 傳送隱式的 HTTP 響應到客戶端(瀏覽器)。這包括告訴瀏覽器或其他客戶端被返回的文件型別(例如 HTML),設定 cookies 和快取引數,以及其他類似的任務。

Servlet 包

Java Servlet 是執行在帶有支援 Java Servlet 規範的直譯器的 web 伺服器上的 Java 類。

Servlet 可以使用 javax.servlet 和 javax.servlet.http 包建立,它是 Java 企業版的標準組成部分,Java 企業版是支援大型開發專案的 Java 類庫的擴充套件版本。

Java Servlet 就像任何其他的 Java 類一樣已經被建立和編譯。在您安裝 Servlet 包並把它們新增到您的計算機上的 Classpath 類路徑中之後,您就可以通過 JDK 的 Java 編譯器或任何其他編譯器來編譯 Servlet。

Servlet 基本結構

Servlet就是一段由java編寫的程式,由伺服器來維護。為了方便伺服器的處理,Servlet需要遵循一定的結構規範。

Servlet 生命週期

Servlet 生命週期可被定義為從建立直到毀滅的整個過程。特點為:

*      一次建立,到處服務
*      一個Servlet只會有一個物件,服務所有的請求

以下是 Servlet 遵循的過程:

  • Servlet 例項化,建立物件。
  • Servlet 通過呼叫 init () 方法進行初始化。
  • Servlet 呼叫 service() 方法來處理客戶端的請求。
  • Servlet 通過呼叫 destroy() 方法終止(結束)。
  • 最後,Servlet 是由 JVM 的垃圾回收器進行垃圾回收的。

現在讓我們詳細討論生命週期的方法。

init() 方法

init 方法被設計成只調用一次。它在第一次建立 Servlet 時被呼叫,在後續每次使用者請求時不再呼叫。因此,它是用於一次性初始化,就像 Applet 的 init 方法一樣。

Servlet 創建於使用者第一次呼叫對應於該 Servlet 的 URL 時,但是您也可以指定 Servlet 在伺服器第一次啟動時被載入。

當用戶呼叫一個 Servlet 時,就會建立一個 Servlet 例項,每一個使用者請求都會產生一個新的執行緒,適當的時候移交給 doGet 或 doPost 方法。init() 方法簡單地建立或載入一些資料,這些資料將被用於 Servlet 的整個生命週期。

init 方法的定義如下:

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() 即可。

doGet() 和 doPost() 方法是每次服務請求中最常用的方法。下面是這兩種方法的特徵。

doGet() 方法

GET 請求來自於一個 URL 的正常請求,或者來自於一個未指定 METHOD 的 HTML 表單,它由 doGet() 方法處理。

doPost() 方法

POST 請求來自於一個特別指定了 METHOD 為 POST 的 HTML 表單,它由 doPost() 方法處理。

destroy() 方法

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

在呼叫 destroy() 方法之後,servlet 物件被標記為垃圾回收。destroy 方法定義如下所示:

getServletConfig() 方法

生命走起架構圖

下圖顯示了一個典型的 Servlet 生命週期方案。

  • 第一個到達伺服器的 HTTP 請求被委派到 Servlet 容器。
  • Servlet 容器在呼叫 service() 方法之前載入 Servlet。
  • 然後 Servlet 容器處理由多個執行緒產生的多個請求,每個執行緒執行一個單一的 Servlet 例項的 service() 方法。

Servlet 生命週期

總結

  • 當某個Servlet第一次被請求的時候,伺服器會載入對應的Servlet類,將其放在Servlet例項池中。
  • 建立Servlet例項後,將呼叫該例項的init()方法進行一些初始化操作。(即Servlet的程式碼結構中的init())
  • 伺服器通過呼叫Servlet的service()方法來處理客戶端傳送的請求。實際上,上面的Servlet的程式碼結構中的do方法都是通過service()來呼叫的。程式碼結構中我們沒有顯式地看到service()方法是因為我們沒有對繼承的該方法進行重寫。
  • Servlet例項建立後會一直存在於記憶體中,直到伺服器關閉,Servlet的destroy()方法被呼叫,該例項被銷燬。

原始碼下載

[相關示例完整程式碼]請獲取 相關分支哦:feature-20180910-web