Web應用使用response對象

        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。服務器

相關文章
相關標籤/搜索