response对象
- 1.概述
- 2.实例:response对象方法运用
- (1)实例一:页面自动刷新
- (2)实例二:实现页面重定向,具体的代码
- (3)综合实例:实现登录并记录用户名
1.概述
response对象主要用于对客户端的请求进行回应,将Web服务器处理后的结果发回给客户端。它封装了 JSP 产生的响应,并发送到客户端以响应客户端的请求,请求的数据可以是各种数据类型,甚至是文件。
response 对象属于 HttpServletResponse 接口的实例,HttpServletResponse接口的定义格式与HttpServletRequest 接口的定义格式非常类似,都只有一个父接口 ServletResponse 和一个子接口HttpServletResponse。response 对象也提供了很多方法,例如设置文件头信息、设定页面重定向以及设置缓冲区信息等,方法名及功能如下所示。
方法名 | 功能介绍 |
---|---|
void addCookie (Cookie c) | 添加一个 cookie 对象,用来保存客户端用户信息,例如一些网站或企业应用系统,登录时提供一个 “是否记住用户名” 的选项,可以通过 cookie 实现 |
void setHeader(String name,String value) | 设置头信息:response.setHeader (“头信息内容”" 头信息参数 "); 常用的刷新 refresh,例如:response.setHeader (“refresh”,“1”); 几秒后跳转:response.setHeader (“refresh”,“2;URL=XXX”) |
void sendRedirect(String url) | 设置页面重定向 |
void flushBuffer() | 强制将缓冲区的内容输出到客户端 |
void setBufferSize() | 设置缓冲区的大小 |
void reset() | 清除缓冲区的内容,同时清除状态码和报头 |
int getBufferSize() | 获取响应所使用的缓冲区的实际大小,如果没有使用缓冲区,则返回为 0 |
boolean isCommitted() | 检测服务器端是否已经把数据写入客户端 |
2.实例:response对象方法运用
(1)实例一:页面自动刷新
<%@ page language="java" import="java.util.Date" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><%// 获取当前应用的基础路径String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/";%><base href="<%=basePath%>"><title>response方法实现页面定时刷新</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">
</head><body>
<h3>当前系统时间(每秒自动刷新):</h3>
<%// 创建当前时间对象Date currentTime = new Date();// 输出本地化的时间字符串(包含日期和时间)out.println(currentTime.toLocaleString());// 核心方法:设置响应头refresh,实现1秒自动刷新// 第一个参数是响应头名称"refresh",第二个参数是刷新间隔(秒)response.setHeader("refresh", "1");
%>
</body>
</html>
运行结果如下:
(2)实例二:实现页面重定向,具体的代码
responseDemo02.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><% // 计算当前应用的基础路径String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/";%><base href="<%=basePath%>"><title>response方法实现重定向</title></head><body><%/** 页面重定向核心代码* 工作原理:服务器向客户端发送302状态码和新的URL* 客户端收到后会自动请求新的URL,地址栏会显示新页面的地址* 注意:重定向是客户端行为,会产生两次请求*/response.sendRedirect("responseDemo02_01.jsp");// 注意:sendRedirect之后的代码可能不会执行,建议放在页面逻辑最后%></body>
</html>
responseDemo02_01.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><% // 计算当前应用的基础路径String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/";%><base href="<%=basePath%>"><title>页面重定向目标页面</title></head><body><h3>重定向成功!</h3><p>Hello!!</p><p>页面发生了变化,已经重定向到新的页面......</p><p>当前页面路径:responseDemo02_01.jsp</p></body>
</html>
运行结果如下:
(3)综合实例:实现登录并记录用户名
在某网站的登录页面登录时如果选择“记住用户名”,登录成功后会跳转至一个中间页面(页面代码将登录的用户名密码存在cookie中),中间页面中存在一个超链接,单击超链接可以链接到第三个页面查看response方法保存到cookie中的数据信息。如果不选择“记住用户名”,则中间页面会将cookie值删除,再单击超链接则无法显示登录的用户名和密码。
login.jsp
<%@ page language="java" import="java.util.*,javax.servlet.http.Cookie" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><% // 计算应用基础路径String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/";%><base href="<%=basePath%>"><title>平台 - 登录</title></head><body background="images/bk.jpg"><%// 初始化用户名和密码变量String username = "";String password = "";// 获取客户端发送的所有CookieCookie[] cookies = request.getCookies();if (cookies != null && cookies.length > 0) {// 遍历Cookie查找保存的用户名和密码for (Cookie cookie : cookies) {if (cookie.getName().equals("username")) {username = cookie.getValue();}if (cookie.getName().equals("password")) {password = cookie.getValue();}// 将Cookie回写到响应中,维持Cookie有效期response.addCookie(cookie);}}%><!-- 登录表单,提交到cookieSave.jsp处理 --><form action="ch4/response/cookieSave.jsp" method="post"><h1 style="text-align: center;">登录平台</h1><table border="1" align="center"><tr><td>用户名:</td><td><input type="text" name="username" value="<%=username%>"></td></tr><tr><td>密码:</td><td><input type="password" name="password" value="<%=password%>"></td></tr><tr><td colspan="2"><input type="checkbox" name="flag"> 记住用户名</td></tr><tr align="center"><td colspan="2"><input type="submit" value=" 登 录 "></td></tr></table></form></body>
</html>
cookieSave.jsp
<%@ page language="java" import="java.util.*,javax.servlet.http.Cookie" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><% String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/";%><base href="<%=basePath%>"><title>处理登录信息</title></head><body><%// 设置请求编码,防止中文乱码request.setCharacterEncoding("UTF-8");// 获取表单提交的用户名和密码String username = request.getParameter("username");String password = request.getParameter("password");// 获取"记住用户名"复选框状态String[] flag = request.getParameterValues("flag");if (flag != null && flag.length > 0) {// 选中了"记住用户名",创建并保存CookieCookie cookie1 = new Cookie("username", username);Cookie cookie2 = new Cookie("password", password);// 设置Cookie有效期为1天(单位:秒)cookie1.setMaxAge(1 * 24 * 60 * 60);cookie2.setMaxAge(1 * 24 * 60 * 60);// 将Cookie添加到响应中,发送给客户端response.addCookie(cookie1);response.addCookie(cookie2);} else {// 未选中"记住用户名",删除已有的CookieCookie[] cookies = request.getCookies();if (cookies != null && cookies.length > 0) {for (Cookie cookie : cookies) {// 找到存储用户名和密码的Cookie,设置有效期为0(立即删除)if (cookie.getName().equals("username")) {cookie.setMaxAge(0);}if (cookie.getName().equals("password")) {cookie.setMaxAge(0);}// 将修改后的Cookie回写到客户端response.addCookie(cookie);}}}%><!-- 超链接到查询页面查看Cookie信息 --><a href="ch4/response/cookieQuery.jsp">查看是否保存了用户名信息</a></body>
</html>
cookieQuery.jsp
<%@ page language="java" import="java.util.*,javax.servlet.http.Cookie" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><% String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/";%><base href="<%=basePath%>"><title>用户信息查询</title></head><body bgcolor="#A2B5CD"><%request.setCharacterEncoding("UTF-8");// 初始化变量String username = "";String password = "";// 获取客户端发送的CookieCookie[] cookies = request.getCookies();if (cookies != null && cookies.length > 0) {for (Cookie cookie : cookies) {// 提取用户名和密码if (cookie.getName().equals("username")) {username = cookie.getValue();}if (cookie.getName().equals("password")) {password = cookie.getValue();}// 维持Cookie有效期response.addCookie(cookie);}}%><!-- 显示Cookie中保存的信息 --><h2>用户名为:<%=username %></h2><h2>密码为:<%=password %></h2></body>
</html>
运行结果如下:
选中“记住用户名”,单击“登录”按钮后,跳转至中间页面,处理是否记住用户名信息。
单击“查看是否保存了用户名信息”超链接,页面再次进行跳转。