Response對象

###什麼是Response HttpServletResponse對象服務器的響應,這個對象封裝了向客戶端發送數據,發送響應頭,發送響應狀態碼的方法.html

####發送數據的兩個方法,注意區別:web

  • getOutputStream 字節流
  • getWriter 字符流

###向瀏覽器輸出中文瀏覽器

####使用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.用重定向技術,地址欄會發生變化,用戶登陸和顯示購物車時,一般會用重定向技術
相關文章
相關標籤/搜索