My Calendar

2015年1月25日 星期日

HttpServletRequest

HttpServletRequest

關於HttpServletRequest
當 Web 容器收到 HTTP 的請求時,容器會自動收集 web.xml@WebServlet 所定義的資訊,並產生 HttpServletRequest 物件,這個物件可以取得HTTP請求中的資訊。可以在 Servlet 中處理請求,或是將請求轉發給另一個 Servlet 進行處理。各個 Servlet/JSP 在同一個請求週期中需要共用資料的時候,可以透過 HttpServletRequest 物件設定 attribute.

處理請求參數和標頭
HttpServletRequest 定義了一些方法可以取得 HTTP 請求的資訊。例如可以使用以下的方法取得請求參數:

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 物件,當中包含全部請求參數名稱。例如:

Enumeration  params = 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
Map  requestParams = 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
 }

}


顯示結果如下:


參考資料
  1. Servlet&JSP 教學手冊

沒有留言:

張貼留言