1. 程式人生 > >Request和Response使用辨析

Request和Response使用辨析

Request

//1.獲取請求引數
String value = getParameter(String name);//一個引數對應單個值
String[] values = getParameterValues(String name);//一個引數對應多個值
//2.獲取頭資訊
String agent = request.getHeader("User-Agent");//可以判斷瀏覽器型別
//3.獲取客戶端相關資訊
String contextPath = request.getContextPath();//獲取釋出的工程名=projecta
String uri = request.getRequestURI
();//獲取統一資源識別符號=/projecta/index.html String url = request.getRequestURL();//獲取統一資源定位符=http://localhost:8080/projecta/index.html //4.獲取其餘兩個域物件 HttpSession session = request.getSession(); ServletContext servletContext = request.getServletContext(); //本身作為域物件使用 request.setAttribute("key","value"); Object object = request.
getAttribute("key");

Response

//設定響應頭
response.setHeader(String name,String value);//一個key對應一個value
response.addHeader(Srting name,String value);//一個key對應多個value
//設定響應體(向頁面展示的資料,或者ajax請求返回的資料)
response.getWriter().print("hello");
response.getOutputStream().write("hello".getBytes());
//上述兩個輸出流互斥,不能同時使用,response獲取的輸出流無需關閉

亂碼問題

1.請求引數亂碼

//post請求亂碼
//在接受引數之前設定編碼,這裡編碼格式是頁面的編碼格式
request.setCharacterEncoding("UTF-8");
//get請求亂碼
//超連結提交方式預設get請求方式採用ISO-8859-1編碼,所以需要重新編碼
String value = new String(request.getParamter("name").getBytes("ISO-8859-1"),"UTF-8")

2.響應資料亂碼

//2.1位元組流
//設定瀏覽器預設開啟編碼
response.setHeader("Content-Type", "text/html;charset=UTF-8");
//設定伺服器向瀏覽器傳輸資料的編碼,getBytes是以作業系統編碼方式gbk進行編碼
response.getOutputStream().write("中文/英文".getBytes("UTF-8"));
//2.2字元流
//設定瀏覽器預設開啟的編碼
response.setHeader("Content-Type", "text/html;charset=UTF-8");
//設定response的緩衝區的編碼(預設是ISO-8859-1)
response.setCharacterEncoding("UTF-8");

//總結(無論位元組流還是字元流都可以解決亂碼問題)
response.setContentType("text/html;charset=UTF-8")    

轉發與重定向

//轉發與重定向的區別
1、轉發一次請求一次響應,位址列地址不變;重定向兩次請求兩次響應,位址列地址發生變化
2、轉發只能在伺服器內部進行轉發,重定向可以跳轉到任意網站
3. 重定向路徑需要加工程名,轉發的路徑不需要加工程名
//1.1轉發
request.getRequestDispatcher("/index.html").forward(request, response);
//1.2重定向
response.sendRedirect("/web01/index.html");
//和下面兩行程式碼一樣的效果
response.setStatus(302);	//設定行
response.setHeader("Location", "/web01/index.html");	//設定頭