基於JSP HttpServlet的詳細介紹

來源:互聯網
上載者:User
文章目錄
  • HttpServletRequest
  • HttpServletResponse
  • 樣本程式

HttpServlet
先來複習一下上一節提到的類結構圖:


可以看到,HttpServlet繼承了GenericServlet,不過它也是一個抽象類別, 不能直接使用,只能繼承它。

HttpServlet中常用的方法有兩個:

doGet
void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

當瀏覽器用GET方式訪問時,該方法被調用。

doPost
void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

當瀏覽器用POST方式訪問時,該方法被調用。

這兩個函數內部的處理方法基本上與上一節介紹的GenericServlet.service()函數相同。

另外其他的HTTP請求也都有相應的方法:

HTTP請求類別 HttpServlet的方法
GET doGet()
POST doPost()
HEAD doHead()
PUT doPut()
DELETE doDelete()

HttpServletRequest

doGet()doPost()函數的兩個參數為HttpServletRequestHttpServletResponse對象。

HttpServletRequest介面表示瀏覽器請求,你可以通過這個類擷取瀏覽器發送到伺服器的任何資訊。 對於PHP程式員來說,這個類有點類似於$_GET$_POST$_SERVER 等幾個變數的內容。 它的常用方法如下:

getParameter
String getParameter(String name)

擷取指定變數名name所對應的參數值。該方法實際上為父介面javax.servlet.ServletRequest的方法。如果是GET請求則擷取查詢字串後的參數,POST請求則擷取<form>表單中的參數。類似於PHP的$_GET$_POST數組。

getParameterValues
String[] getParameterValues(String name)

這個方法與getParameter()類似。當你要擷取<input type=”check”>這類會返回多個值的表單屬性時,就應當用這個方法。

getMethod
String getMethod()

返回字串"GET""POST"

getRequestURI
String getRequestURI()

擷取請求的URI(不包括查詢字串)。相當於PHP的$_SERVER['REQUEST_URI']

getServletPath
String getServletPath()

擷取Servlet的路徑。相當於PHP的$_SERVER['PHP_SELF']

getPathInfo
String getPathInfo()

擷取PathInfo。相當於PHP的$_SERVER['PATH_INFO']

setCharacterEncoding
void setCharacterEncoding(String new)

佈建要求的編碼。需要處理漢字時務必要通過該方法設定正確的字元編碼,否則將無法正確讀取瀏覽器發過來的文字。

還有好多有用的方法大家可以自己去參考介面文檔。

HttpServletResponse

HttpServletResponse介面則用於控制伺服器發送給用戶端的內容,相當於PHP的echoheader等函數。

setContentType
void setContentType(String type)

設定傳回值的類型。通常的HTML內容可設定為"text/html; charset=UTF-8"等,而動態產生的圖片則可以設定為"image/gif"等。輸出漢字之前,務必要通過該方法指定輸出的字元編碼。相當於在PHP中寫 header("Content-Type: image/gif")

ServletOutputStream
ServletOutputStream getOutputStream() throws IOException

向用戶端發送位元據時,需要通過此方法擷取輸出資料流。

getWriter
PrintWriter getWriter() throws IOException

向用戶端發送文本資料時,需要通過此方法擷取輸出資料流。

樣本程式

上一節建立Servlet時,我們先產生了Java代碼,再將其添加到web.xml的Servlet節中。 實際上可以直接在web.xml的Servlet節中建立Servlet,Eclicpse會自動幫我們產生Java代碼。

我們這次將建立一個表單提交程式,通過一個HTML表單提交資料,然後在Servlet中讀出資料並顯示出來。

首先按右鍵WebContent目錄,選擇New->HTML,建立一個HTML文檔,命名為 htmlpost.html。 下一步是選擇HTML模板,直接用預設值即可。

然後編輯 htmlpost.html,可參考本節的原始碼。原始碼下載:

httppost_jb51net.zip

按右鍵Deployment Descriptor中的Servlets,選擇New->Servlet

按照的樣子,在Java package處輸入包名 com.idv2.learnjsp,在 Class name處輸入類名 HttpPost,單擊Next。

出現Servlet映射的配置介面,輸入適當的Description。注意下方的 URL Mappings,這個就是從瀏覽器訪問該Servlet時使用的URL。

下一步選擇建立的類的屬性,通常選擇預設即可。 不過我們的Servlet只需要處理POST方法,所以下方的重載列表中只需選擇doPost即可。

最後單擊Finish,即可完成Servlet的建立,並且Eclipse會自動在Java代碼的src目錄中產生HttpPost.java檔案的架構。

編輯java代碼,可以參考下面的原始碼下載。

httppost_jb51net.zip

其實這段代碼的主要內容就是通過 getParameter 或者 getParameterValues 方法來擷取用戶端提交的資料。其程式碼片段如下;

複製代碼 代碼如下:// 字元集
request.setCharacterEncoding("UTF-8");

// 從表單中獲得資料
out.println(" <li>使用者名稱: " + request.getParameter("username"));
out.println(" <li>密碼: " + request.getParameter("password"));
out.println(" <li>確認密碼: " + request.getParameter("confpass"));

// 擷取複選框的表單選項
String interests[] = request.getParameterValues("interests");
out.println(" <li>興趣愛好: <br/>");
if (interests != null) {
for (int i = 0; i < interests.length; i++) {
out.println(interests[i] + "<br/>");
}
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.