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("HeaderDemo ");
out.println("
");
out.println("");
out.println("HeaderServlet at "+ request.getContextPath()+"
"); // Application environment path
Enumeration 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 教學手冊

沒有留言:
張貼留言