###什麼是Response HttpServletResponse對象服務器的響應,這個對象封裝了向客戶端發送數據,發送響應頭,發送響應狀態碼的方法.html
####發送數據的兩個方法,注意區別:web
###向瀏覽器輸出中文瀏覽器
####使用OutPutStream輸出中文緩存
response.setHeader("content-type","text/html;charset=UTF-8"); String data = "中文"; OutputStream out = response.getOutputStream(); out.write(data.getBytes("UTF-8"); //程序以什麼碼錶輸出,程序就必定要控制瀏覽器以什麼碼錶打開 out.write("<meta http-equiv='content-type';content='text/html;charset=UTF-8'>".getBytes()); //模擬http響應頭 控制顯示行爲
####使用PrintWriter實現中文輸出服務器
response.setCharacterEncoding("UTF-8"); response.setHeader("content-type","text/html;charset=UTF-8"); //response.setContentType("text/html;charset=UTF-8"); String data="中文" PrintWriter out = response.getWriter(); out.write(data);
###文件下載jsp
String path = this.getServletContext().getRealPath("/WEB-INF/classes/download/中文圖片.jpg"); String fileName = path.substring(path.lastIndexOf("/") + 1); // 若是下載文件時中文名稱,則文件名需通過URL編碼 fileName = URLEncoder.encode(fileName, "UTF-8"); response.setHeader("content-disposition", "attachment;fileName=" + fileName); InputStream in = null; OutputStream out = null; try { in = new FileInputStream(path); int len = 0; byte buffer[] = new byte[1024]; out = response.getOutputStream(); while ((len = in.read(buffer)) > 0) { out.write(buffer, 0, len); } } catch (Exception e) { e.printStackTrace(); } finally { in.close(); }
###用refresh控制瀏覽器刷新 ####message.jsp頁面增長如下代碼ui
頁面將在三秒後實現跳轉 <% String message = (String) request.getAttribute("message"); out.write(message); %>
####servlet增長如下代碼this
String message = "<meta http-equiv='refresh' content='3;url=/test-web/index.jsp'>"; response.setContentType("text/html;charset=UTF-8"); response.setCharacterEncoding("UTF-8"); request.setAttribute("message", message); request.getRequestDispatcher("message.jsp").forward(request, response);
####新建index.jsp中增長如下代碼編碼
<h2> 這是跳轉後的界面 </h2>
###用expires控制瀏覽器緩存url
response.setDateHeader("expires",System.currentTimeMillis()+1000*3600); String data = "aaa"; response.getWriter().write(data);
###response開發的一些細節 1.getOutputStream和getWrite方法分別用於獲得輸出二進制數據,輸出文本數據的servletOutPutStream和PrintWriter對象 2.getOutPutStream和getWriter這兩個方法互相排斥,調用其中的任何一個方法後,就不能再調用另外一方法,Java.lange.IllegalStateException: getOutStream() has already been called for this response 3.Servlet的OutPutStream和PrintWriter對象中寫入的數據將被servlet引擎從response中取出,servlt引擎將這些數據做爲消息響應的正文,而後再與響應狀態行和鴿子響應頭組合後輸出到客戶端。
4.servlet的service方法結束後,servlet引擎將檢查getWrite或getOutputStream方法返回的輸出流對象是否已經調用過close方法,若是沒有,servlet引擎將調用close方法關閉該輸出流對象。
###response實現請求重定向 請求重定向是指,一個web資源受到客戶端請求後,通知客戶端去訪問另一個資源。
應用場景:用戶登陸(地址欄變化提示用戶) 實現方式:response.setRedirect() 實現原理:response.setStatus("302"); response.setHeader("location","/day06/index.jsp"); response.sendRedirect("/day06/index.jsp"); 重定向的特色: 1.瀏覽器會向服務器發送兩次,意味着就有兩對request\response 2.用重定向技術,地址欄會發生變化,用戶登陸和顯示購物車時,一般會用重定向技術