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