request
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