1. 程式人生 > >javaweb知識點總結(request和response)

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”);