一、概述
Servlet是一種獨立於平台和協議的伺服器端的Java應用程式,可以產生動態Web頁面。
Servlet是位於Web 服務器內部的伺服器端的Java應用程式,與傳統的從命令列啟動的Java應用程式不同,Servlet由Web伺服器進行載入,該Web伺服器必須包含支援Servlet的Java虛擬機器。其結構如所示:
Servlet主要完成以下幾個方面的工作:
1、讀取從用戶端發送來的資料
2、讀取瀏覽器請求的資料
3、產生結果
4、發送資料給用戶端
5、發送http響應資料
二、HttpServlet類
HttpServlet類是一個抽象類別,擴充了GenericServlet類。HttpServlet類用於建立一個適用於Web網站並支援HTTP協議的Servlet。一個HttpServlet的子類必須至少重載以下方法中的一個。
doGet()方法,適用於HTTP GET請求。
doPost()方法,適用於HTTP POST請求。
doPut()方法,適用於HTTP PUT請求。
doDelete()方法,適用於HTTP DELETE請求。
init()和destroy()方法,管理Servlet生命週期中的資源。
getServletInfo()方法,提供Servlet本身的資訊。
doGet()方法概述:protected void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,java.io.IOException
由伺服器調用(通過service()方法)來允許一個servlet處理一個GET請求。覆寫該方法來支援一個GET請求也自動地支援一個HTTP HEAD請求。一個HEAD請求是一個GET請求,在響應中只返回要求標頭地區,沒有返回BODY地區。當覆寫這個方法的時候,讀取請求資料,寫入回應標頭,獲得響應的writer或輸出資料流對象,最後,寫入響應資料。最好包含content type和編碼(encoding)。當使用一個PrintWriter對象去返迴響應,需要在訪問PrinterWriter對象之前設定content type。servlet容器必須在提交響應前寫入頭資訊,因為在HTTP協議下,必須在傳送BODY之前傳送頭資訊。在可能的情況下,設定頭資訊的Content-Length(使用ServletResponse.setContentLength(int)方法)以允許servlet容器使用一個持久性串連向用戶端返迴響應,從而改善效能。如果整個響應適合放入響應緩衝區,那麼Content-Length會被自動設定。GET方法是比較安全的,如果用戶端的請求需要改變儲存的資料,應該使用其它HTTP方法。
The GET method should also be idempotent, meaning that it can be safely repeated. Sometimes making a method safe also makes it idempotent. For example, repeating queries is both safe and idempotent, but buying a product online or modifying data is neither safe nor idempotent. (暫時不能翻譯)
如果請求的格式錯誤,doGet會返回一個HTTP的“Bad Request”資訊。
doHead()方法概述:protected void doHead(HttpServletRequest req,HttpServletResponse resp) throws ServletException,java.io.IOException
從一個protected service()方法返回一個HTTP HEAD請求,並處理該請求。當用戶端只需要知道回應標頭,比如Content-Type或者Content-Length,用戶端只需要發送一個HEAD請求。HTTP HEAD準確地計算輸出的位元組數來設定Content-Length。
如果你覆寫該方法,可以避免計算響應的BODY,而只需設定回應標頭以改善效能。
doPost()方法概述:protected void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,java.io.IOException
由伺服器調用(通過service()方法)以允許一個servlet去處理一個POST請求。HTTP POST方法允許客戶在同一時間內向伺服器發送無長度限制的資料,而且好像信用卡號等都是允許的。當覆寫該方法時,讀取請求資料,寫入回應標頭,獲得響應的writer或輸出資料流對象,最後,寫入響應資料。最好包含content type和編碼(encoding)。當使用一個PrintWriter對象去返迴響應,需要在訪問PrinterWriter對象之前設定content type。當使用HTTP 1.1進行編碼時(這意味著響應帶有一個Transfer-Encoding 頭),不要設定Content-Length 頭。
doPut()方法概述:protected void doPut(HttpServletRequest req,HttpServletResponse resp) throws ServletException,java.io.IOException
由伺服器調用(通過service()方法)以允許一個servlet去處理一個PUT請求。PUT操作允許客戶好像使用FTP一樣把檔案放置到伺服器。
doDelete()方法概述:protected void doDelete(HttpServletRequest req,HttpServletResponse resp) throws ServletException,java.io.IOException
由伺服器調用(通過service()方法)以允許一個servlet去處理一DELETE請求。DELETE操作允許客戶從伺服器中刪除一個文檔或網頁。
doOptions()方法概述:protected void doOptions(HttpServletRequest req,HttpServletResponse resp) throws ServletException,java.io.IOException
由伺服器調用(通過service()方法)以允許一個servlet去處理一OPTIONS請求。OPTIONS操作決定伺服器支援哪種HTTP方法,並返回一個適當的頭資訊。舉例:如果一個servlet覆寫了doGet()方法,doOptions()方法將會返回如下頭資訊:Allow: GET, HEAD, TRACE, OPTIONS
doTrace()方法概述:protected void doTrace(HttpServletRequest req,HttpServletResponse resp) throws ServletException,java.io.IOException
由伺服器調用(通過service()方法)以允許一個servlet去處理一TRACE請求。該方法用於程式調試,無需被覆寫。
protected service()方法概述:protected void service(HttpServletRequest req,HttpServletResponse resp) throws ServletException,java.io.IOException
從public service()方法接收標準的HTTP請求,並把它們指派給doXXX成員方法。該方法無需被覆寫。
public service()方法概述:指派客戶的請求到protected service()方法,該方法無需被覆寫。
參考:
http://www.cnblogs.com/johnny/articles/19688.aspx