javaweb知識點總結(request和response)
一.HttpServletResponse 1.http協議:web伺服器收到客戶端的http請求,會針對每一次請求,分別建立一個request和response 2.HttpServletResponse 2.1響應行 setStatus 2.2響應頭 2.2.1setHeader 請求響應頭資訊 A.重新整理頁面 response.setHeader("refresh","1"); B.沒有快取 response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); C.設定過期的時間 response.setDateHeader("Expires", System.currentTimeMillis()+自己設定的時間期限); D.訪問別的頁面 response.setStatus(302); response.setHeader("location","url"); E.下載檔案用於設定檔案型別 response.setHeader("Content-Type","video/x-msvideo"); F.通知瀏覽器資料採用的壓縮格式和長度 通知瀏覽器資料採用的壓縮格式:response.setHeader("Content-Encoding","壓縮後的資料"); 高速瀏覽器壓縮資料的長度:response.setHeader("Content-Length",壓縮後的資料.length+""); G.高速瀏覽器圖片或視訊 response.setHeader("Content-type","這個引數在tomcat裡conf下的web.xml裡面找"); K.高速瀏覽器已下載 response.setHeader("Content-disposition","attachment;filename=2.jpg"); 2.2.2Response.setRedirect 請求重定向 轉發和重定向 1.request封裝的物件是可以取到,重定向是取不出request封裝的屬性 2.request是伺服器請求資源,url不變,重定向是根據url改變 3.request轉發的path只能是專案中的path,重定向location可以是專案外的地址 4.請求轉發到servlet中dopost過來就是dopost,doget請求過來就doget ,重定向到servlet都是doget執行 5.forward更高效
3.響應正文 字元輸出流 getWriter() 位元組輸出流 getOutPutStream() 介面輸出字元 伺服器用編碼 setCharacterEncoding(String charset) setContentType(String type)
二.HttpServletRequest 1.請求行 getMethod(); 獲得請求方式 GET getRequestURL();返回客戶端發出請求時的完整URL。//http://localhost:8080/TestWeb/request getRequestURI(); 返回請求行中的資源名部分。 /TestWeb/request getContextPath(); 當前應用的虛擬目錄 /TestWeb getQueryString() ; 返回請求行中的引數部分。http://localhost/test.do?a=b&c=d&e=f得到a=b&c=d&e=f
2.請求訊息頭 String getHeader(String name) 根據頭名稱得到頭資訊值 Enumeration getHeaderNames() 得到所有頭資訊name Enumeration getHeaders(String name) 根據頭名稱得到相同名稱頭資訊值 Enumeration headers=request.getHeaders("accept-language"); while (headers.hasMoreElements()){ String e=(String)headers.nextElement(); System.out.println(request.getHeader(e)); }
Enumeration names=request.getHeaderNames(); while(names.hasMoreElements()){ String e=(String) names.nextElement(); System.out.println(request.getHeader(e)); } 瀏覽器: String header=request.getHeader("User-Agent"); System.out.println(header); if(header.toLowerCase().contains("mise")){ System.out.println("IE"); }else if(header.toLowerCase().contains("firefox")){ System.out.println("火狐"); }else if(header.toLowerCase().contains("chrome")){ System.out.println("谷歌"); }else{ System.out.println("其他瀏覽器"); } 3.請求正文 A.獲取表單資料 <input type="text" name="username" /> *** getParameter(name) 根據表單中name屬性的名,獲取value屬性的值方法 *** getParameterValues(String name)專業為複選框取取提供的方法 String [] hobbys=request.getParameterValues("hobby"); getParameterNames() 得到表單提交的所有name的方法 Enumeration names=request.getParameterNames(); while(names.hasMoreElements()){ String name=(String) names.nextElement(); String []values=request.getParameterValues(name); for (int i=0;values!=null&&i<values.length;i++){ System.out.println(name+"\t"+values[i]); }
} *** getParameterMap 到表單提交的所有值的方法 //做框架用,非常實用
Map<String,String[]> map = request.getParameterMap(); for (Map.Entry<String, String[]> m : map.entrySet()) { String name = m.getKey(); String[] value = m.getValue(); }
getInputStream 以位元組流的方式得到所有表單資料 B.作為域物件(作用範圍是在伺服器間同一請求不同頁面之間的引數傳遞) *** void setAttribute(String name, Object value); *** Object getAttribute(String name); Void removeAttribute(String name);
C.與請求轉發相關的方法 //得到請求轉發或請求包含的協助物件 RequestDispatcher getRequestDispatcher(String path) forward(ServletRequest request, ServletResponse response) //轉發的方法 include(ServletRequest request, ServletResponse response) //請求包含
forward方法在呼叫後響應中沒有提交的內容會被自動消除,將請求轉發給其他servlet,由被呼叫的servlet做出響應,而原先servlet 的執行終止,include方法使得原先的servlet和轉發的Servlet都可以輸出響應資訊,原先的還可以繼續輸出響應資訊
D.與請求編碼相關的方法: //解決post方式編碼 *****request.setCharacterEncoding("UTF-8"); //告訴伺服器客戶端什麼編碼,只能處理post請求方式 //解決get方式編碼 String name = new String(name.getBytes(“iso-8859-1”),”UTF-8”);