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

相关文章
相关标签/搜索