HttpServletRequest
關於HttpServletRequest
當 Web 容器收到 HTTP 的請求時,容器會自動收集 web.xml 或 @WebServlet 所定義的資訊,並產生 HttpServletRequest 物件,這個物件可以取得HTTP請求中的資訊。可以在 Servlet 中處理請求,或是將請求轉發給另一個 Servlet 進行處理。各個 Servlet/JSP 在同一個請求週期中需要共用資料的時候,可以透過 HttpServletRequest 物件設定 attribute.
處理請求參數和標頭
HttpServletRequest 定義了一些方法可以取得 HTTP 請求的資訊。例如可以使用以下的方法取得請求參數:
1) getParameter() :
1) getParameter() :
指定請求參數的名稱取得值,例如:
String userName = request.getParameter("name");
getParameter() 回傳的是 String 物件, 若請求中沒有指定的參數名稱,則會回傳null。
2) getParameterValues() :
當表單上有可以複選的選項,例如 Checkbox, List 等等,同一個參數將會有多個值,這時候可以使用 getParameterValue() 取得一個 String array, array elements 代表所有選項的值。例如 :
String [] params = request.getParameterValue("checkList");
3) getParameterNames() :
如果想知道每一次請求有多少個參數名稱,則可以使用 getParameterNames(), 這會回傳一個 Enumeration 物件,當中包含全部請求參數名稱。例如:
Enumerationparams = request.getParameterNames(); while(param.hasNextElement()) { System.out.println("Request Parameter = "+ params.nextElement); }
4) getParameterMap()
將請求參數以 Map 的形式回傳, Map 中的 Key 是請求參數名稱 Values 是請求參數值,Values 是 String array 的方式回傳因為請求參數值有肯能有多個值。例如:
// get request parameter map MaprequestParams = request.getParameterMap(); // retrieve parameter name - values pair from parameter map StringBuilder sb = new StringBuilder(); for (Map.Entry entry : requestParams.entrySet()) { String key = entry.getKey(); // parameter name String[] value = entry.getValue(); // parameter values as array of String ..... }
5) getHeader()
如果想獲取 HTTP 的標頭資訊,則用 getHeader() 這回傳一個 String 物件。例如 :
Sting headers - request.getHeader()
6) getHeaders()
使用方法和 getParameterNames() 一樣
接下來有個範例顯示如何取得 HTTP 標頭資訊 :
package com.learn.servlet; import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class Header */ @WebServlet("/header.view") public class HeaderServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public HeaderServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub PrintWriter out = response.getWriter(); out.println(""); out.println(""); out.println(" "); out.println(""); out.println("HeaderServlet at "+ request.getContextPath()+" "); // Application environment path EnumerationHeaderDemo "); out.println("e = request.getHeaderNames(); //Get all header names while(e.hasMoreElements()) { String name = e.nextElement(); out.println(name +" = "+ request.getHeader(name)+" "); } out.println(" "); out.println(""); out.close(); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } }
顯示結果如下:
參考資料
- Servlet&JSP 教學手冊
沒有留言:
張貼留言