response對象表明服務器對客戶端的響應,大部分時候使用更簡單的響應對象out就能夠了,但out對象用於輸出字符流,沒法輸出非字符流,若是要在JSP頁面中生成一幅位圖、或者一個PDF文檔,就只能使用response做爲響應輸出。
response能夠用於重定向頁面,其sendRedirect(String path)方法用因而重定向到指定路徑的頁面;與request對象的forward方法或JSP的forward指令不一樣的是,重定向會丟失全部的請求參數和request範圍內的屬性,由於重定向將生成第二次請求,與前一次請求不在同一個request範圍內,並且地址欄中的URL也會變成重定向的目標URL,使用重定向的結果,與在地址欄裏從新輸入新地址再按回車鍵效果徹底同樣。
response的另一個做用是增長對象,增長一個Cookie有以下三個步驟:
1 調用Cookie的構造器建立一個Cookie對象,構造器爲Cookie(String cookieName, String cookieValue)
2 設置Cookie的生命週期,利用1中建立好的Cookie對象,調用其setMaxAge(int seconds)方法
3 調用response對象的addCookie(Cookie ck)方法增長Cookie對象
例以下面的頁面response_addcookie.jsp使用response對象增長4個Cookie,其中最後一個Cookie,其值是中文,默認狀況下,Cookie不容許使用中文字符,因此添加的時候,須要編碼。html
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>測試使用response對象寫cookie</title> </head> <body> <% Cookie ckName = new Cookie("username", "zhangsan"); ckName.setMaxAge(30); response.addCookie(ckName); Cookie ckGender = new Cookie("gender", "Male"); ckGender.setMaxAge(30); response.addCookie(ckGender); Cookie ckAge = new Cookie("age", "28"); ckAge.setMaxAge(30); response.addCookie(ckAge); //中文須要編碼 Cookie ckChineseName = new Cookie("ChineseName", java.net.URLEncoder.encode("張三", "utf-8")); ckChineseName.setMaxAge(30); response.addCookie(ckChineseName); %> </body> </html>
若是瀏覽器沒有阻止Cookie,那麼在瀏覽器輸入該頁面路徑,就能夠新增長4個Cookie,而後在下面的頁面response_readCookie.jsp中就能夠讀取這4個Cookie,讀取Cookie要依賴request對象:java
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>測試使用request對象讀cookie</title> </head> <body> <% Cookie[] cookies = request.getCookies(); for(Cookie ck : cookies) { if(ck.getName().equals("ChineseName")) { //中文須要解碼 out.println(ck.getName() + ": " + java.net.URLDecoder.decode(ck.getValue(), "utf-8") + "<br />"); } else { out.println(ck.getName() + ": " + ck.getValue() + "<br />"); } } %> </body> </html>
在瀏覽器中輸入該頁面的路徑,就能夠讀出新增的4個Cookie,運行頁面以下:
瀏覽器
因爲在response_addcookie.jsp頁面中新增長Cookie時,調用setMaxAge方法設置的生命週期是30秒,因此30秒後,若是不刷新response_addcookie.jsp頁面,刷新response_readcookie.jsp頁面,就看不到這4個新增的Cookie了,若是先刷新response_addcookie.jsp頁面,再刷新response_readcookie.jsp頁面,能夠再次看到新增的Cookie。服務器