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不允许使用中文字符,所以添加的时候,需要编码。

<%@ 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对象:

<%@ 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。