教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

Java培訓之HttpServlet介紹

更新時間:2016年07月26日18時21分 來源:傳智播客Java培訓學院 瀏覽次數(shù):

HttpServlet是javax.servlet.http包下的一個抽象類,這個包提供了用來擴展基于http協(xié)議的Servlet。HttpServlet繼承與GenericServlet,不僅重寫了service(ServletRequest  req,ServletResponse res)方法,還提供了很多與http協(xié)議有關的方法。

1.HttpServlet詳解

為了讓大家更加清晰的理解HttpServlet,下面我們通過一張圖來了解HttpServlet的相關方法,如圖1-1所示:
圖1-1 HttpServlet 方法
由圖1-1可知,HttpServlet中自帶的方法大多都是以“do”開頭,例如doGet、doPost等。我們知道GET和POST是Http協(xié)議中的請求方式,那么doGet,doPost方法其實是分別對get請求和post請求進行處理的方法。其中,還有兩個service()方法,一個是重寫GenericServlet 類的service()方法,一個是自定義的service()方法,它們的參數(shù)類型也不一樣。 自定義的service(HttpServletRequest req,HttpServletResponse resp)方法,該方法中的參數(shù)都是javax.servlet.http包下的類,即都是基于Http協(xié)議的。ServletRequest與HttpServletRequest、ServletResponse與HttpServletResponse都是父子關系。
為了讓大家更好的理解HttpServlet,下面我們通過一張圖來描述其原理,如圖1-2所示:
圖1-2 HttpServlet 原理圖
圖1-2是HttpSerlvet類的工作原理,下面通過一張序列圖來理解當客戶端訪問Servlet時,底層的一些方法調(diào)用的順序,如圖1-3所示:
圖1-3 HttpServlet時序圖
我們自己創(chuàng)建的Servlet類繼承了HttpServlet,不需要重寫service()方法,只需要重寫doGet()和doPost()。因為在以后的開發(fā)中最常用的請求方式是get和post,所以一般重寫它們即可,如果不重寫就會調(diào)用父類的doGet()和doPost()方法,父類的這兩個方法是向客戶端響應405狀態(tài)碼。

2.HttpServlet動手體驗

由于大多數(shù)客戶端的請求方式都是GET和POST,因此學習如何使用HttpServlet中的doGet()和doPost()方法變得相當重要。接下來通過一個具體的案例,詳細了解這兩個方法的使用,雙擊此處 下載案例源代碼,詳細步驟請參考HttpServlet案例詳解,具體如下:
(1)創(chuàng)建一個web應用Example12,在【src】目錄下新建一個類TestServlet,該Servlet繼承HttpServlet。具體代碼如例1-1所示:
例1-1 TestServlet.java
public class TestServlet extends HttpServlet {
     /*
        * 重寫doPost方法
        * */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
           throws ServletException, IOException {
       System.out.println("doPost() ...........");
    }
}
(2)接著在web.xml對TestServlet 進行配置,具體代碼如例1-2所示:
例1-2 web.xml配置TestServlet
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>cn.itcast.servlet.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/TestServlet</url-pattern>
</servlet-mapping>
(3)將應用發(fā)布到Tomcat服務器中,啟動Tomcat服務器,在瀏覽器端地址欄上輸入http://localhost:8080/Example12/TestServlet,瀏覽器顯示結果如圖1-4所示:
圖1-4運行結果
由圖1-4的可知,服務器端響應給瀏覽器端405狀態(tài)碼,在常用狀態(tài)碼中對405狀態(tài)碼進行了介紹,出現(xiàn)這樣的結果是因為當前的請求方式?jīng)]有在服務器端進行處理,我們在服務器端只重寫了doPost()方法,并沒有重寫doGet()方法,而當前請求是GET請求,所以這個時候會去調(diào)用父類HttpServlet的doGet()方法,HttpServlet的doGet()方法響應給客戶端405狀態(tài)碼。
(5)對Example12應用中的index.jsp頁面做修改,主要代碼如例1-3所示:
例1-3 index.jsp
  <body>
    <form action ="/Example12/TestServlet" method="post">
     用戶名:<input type="text" name="username"/></br>
     <input type="submit" value="提交"/>
    </form>
  </body>
例1-3中,index.jsp頁面中的表單,提交路徑是“/Example12/TestServlet”,請求方式是post請求。
(6)重新啟動Tomcat服務器,在瀏覽器端地址欄上輸入http://localhost:8080/Example12,然后點擊表單的提交按鈕,控制臺打印結果如圖1-5所示:
圖1-5 運行結果
由運行結果得知doPost()方法被調(diào)用了,請求方式post請求,服務器調(diào)用service方法,service方法根據(jù)請求方式來調(diào)用相應的方法進行處理。
本文版權歸傳智播客Java培訓學院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:傳智播客Java培訓學院
首發(fā):http://fskzgqt.cn/javaee
0 分享到:
和我們在線交談!