1. 程式人生 > >request

request

請求轉發 類型轉換 封裝 uri method 解耦 進行 java parameter

request:
  處理客戶端的請求協議

  獲取請求行的相關信息:
    getMethod(); //方法
    getRequestURI(); //URI路徑
    getContextPath(); //項目
    getScheme(); //協議約束
    getRequestURL(); //URL路徑

  獲取請求頭的相關信息:(請求頭是鍵值對形式,所以遍歷叠代器)
    Enumeration<String> names = request.getHeaderNames() //返回請求頭的所有鍵的信息
    while(names.hasMoreElements()){
      String name = names.nextElement();
      String value = request.getHeader(name);
      System.out.println(name + " == " + value);
    }

  獲取請求體的相關信息:(直接通過提交時的name鍵得到值)
    getParameter(name) //根據鍵獲取值(多個值得到第一個)
    getParameterValues(name) //根據鍵獲取值組織成的數組
    getParameterMap() //返回鍵值組織成Map集合,值是一個數組的形式

BeanUtils:(面向對象的思想:將提交的數據封裝為一個javaBean對象,BeanUtils自動封裝JavaBean)
  BeanUtils.populate(JavaBean對象,Map集合)
    註意:
      1:BeanUtils會自動進行數據類型轉化
        但是只能進行簡單的數據類型轉換 int double boolean String
      2:Map的鍵和JavaBean的字段名以及對應的setXxx方法名必須保持一致
      3:如果字段名不一致,不會正常賦值
  BeanUtils自定義轉換器:
    1.創建一個時間轉換器
     DateConverter dc = new DateConverter();
    2.聲明當前時間轉換器可以轉換的字符串的格式
     dc.setPattern("yyyy-MM-dd");
    3.在BeanUtils中註冊時間轉換器
     ConvertUtils.register(dc, Date.class);
    /*作用,直接將一個1990-10-01格式的字符串轉換成一個java.util.Date對象*/

使用請求轉發:(解耦合)
    request.getRequestDispatcher("/servlet的路徑").forward(ruquest,response);
  攜帶數據:
    request.setAttribute("鍵","值");
    這時不能用servletContext存儲數據,因為並發訪問時可能會出問題
  新頁面獲取值:
    request.getAttribute("鍵");
  在請求轉發的時候因為用的是同一個response對象,所以一定要在開流之前定義響應的編碼集
    response.setContentType("text/html;charset=utf-8");
  數據輸出理論上只能由最後一個Servlet發出,不然會被覆蓋

重新定向:
  A:調用response.sendRedirect("帶/項目名稱的URL");
  B:A的數據設置進響應頭,被瀏覽器解析,瀏覽器訪問該URL
    相當於:response.setStatus(302); //設置狀態碼告訴客戶端需要重定向
        response.setHeader("Location","/day36demo/路徑")

  請求轉發與重定向區別
    A:本質區別:發生跳轉這個動作產生的場合不同
      請求轉發在服務器端發生跳轉,而重定向發生在瀏覽器
    B:請求轉發只有一次請求,只有一次響應
      重定向重定向一次,請求兩次,響應了兩次
    C:重定向地址欄會發生改變
      請求轉發不會
      原因:最後訪問的資源的URL當前瀏覽器是否可以獲得
    D:路徑項目名:
        重定向必須有
        請求轉發沒有
    E:請求轉發的路徑只能是項目內資源
      而重定向可以定位到網絡上的任意資源,不單只是項目內的
      定時刷新頁面也是一種特殊的重定向

request