1. 程式人生 > >HTTP 什麽是Servlet

HTTP 什麽是Servlet

網關 特點 log mage 靜態 讀取 dopost() 創建 客戶

  HTML是靜態頁面,只能保存靜態內容。動態頁面指根據不同時間、不同用戶而顯示不同內容的頁面。

  生成動態頁面的兩種方法:

  1. 使用CGI。CGI全稱是公共網關接口,使用Perl腳本編寫。

  2. 使用Servlet。Servlet是使用Java語言編寫的服務端程序,運行在Web服務器中的Servlet容器中,實現請求/響應的Web服務模式。

  兩者區別如下:

  1. 可移植性強

  因為Java語言具有跨平臺和可移植性強的特點,使得Servlet也有較好的可移植性,即無需修改代碼就可以部署到多種不同類型的Web服務器上,所以Servlet比CGI可移植性更好。

  2. 執行效率高

  CGI處理一個請求時會創建一個進程,而Servlet處於服務器進程之中,處理一個請求時會創建一個線程,因為線程的創建與上下文切換開銷比進程更小,所以Servlet執行效率更高。

  3. 功能強大

  Servlet可以與Web服務器直接交互,而CGI無法與Web服務器直接交互。

  4. 使用方便

  Servlet提供了許多接口來讀取或設置HTTP頭消息,可以處理Cookie和跟蹤會話狀態,而CGI沒有。

  5. 可擴展性強

  因為Java語言是健壯的、面向對象的編程語言,很容易擴展,所以Servlet可擴展性強於CGI。

  Servlet處理HTTP請求流程如下:

  技術分享圖片

  1. 客戶端向服務端發送HTTP請求。

  2. Web服務器接收到該請求後,會把該請求交給容器處理,容器會創建兩個對象:HttpServletResponse和HttpServletRequest。

  3. 容器根據URL找到對應的Servlet,創建一個新的線程,把第2步創建的兩個對象傳遞給該線程。

  4. 容器調用Servlet的service()方法來響應用戶請求,而service()方法會調用doPost()方法或doGet()方法完成具體的響應任務,把生成的動態頁面返回給容器。

  5. 容器把響應消息封裝成HTTP格式,返回給客戶端。此時,這個線程運行結束,刪除第2步創建的兩個對象。

  參考資料

  《Java程序員面試筆試寶典》 P166-168

HTTP 什麽是Servlet