HTTP 什麽是Servlet
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