6.3 response对象
response对象用于响应客户请求,向客户端输出信息。它封装了JSP产生的响应,并发送到客户端以响应客户端的请求。请求的数据可以是各种数据类型,甚至是文件。response对象在JSP页面内有效。
6.3.1 重定向网页
使用response对象提供的sendRedirect()方法可以将网页重定向到另一个页面。重定向操作支持将地址重定向到不同的主机上,这一点与转发不同。在客户端浏览器上将会得到跳转的地址,并重新发送请求链接。用户可以从浏览器的地址栏中看到跳转后的地址。进行重定向操作后,request中的属性全部失效,并且开始一个新的request对象。
sendRedirect()方法的语法格式如下:
response.sendRedirect(String path);
参数说明:
path:用于指定目标路径,可以是相对路径,也可以是不同主机的其他URL地址。
【例6.9】 使用sendRedirect()方法重定向网页到login.jsp页面(与当前网页同级)和明日编程词典网(与该网页不在同一主机)的代码如下:
注意
在JSP页面中使用该方法时,不要再用JSP脚本代码(包括return语句),因为重定向之后的代码已经没有意义了,并且还可能产生错误。
【例6.10】 通过sendRedirect()方法重定向页面到用户登录页面。(实例位置:资源包\TM\sl\6\6)
(1)创建index.jsp文件,在该文件中,调用response对象的sendRedirect()方法重定向页面到用户登录页面login.jsp。index.jsp文件的关键代码如下:
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <%response.sendRedirect("login.jsp"); %>
(2)编写login.jsp文件,在该文件中添加用于收集用户登录信息的表单及表单元素。关键代码如下:
运行本实例,默认执行的是index.jsp页面,在该页面中又执行了重定向页面到login.jsp的操作,所以在浏览器中将显示如图6.7所示的用户登录页面。
图6.7 运行结果
6.3.2 处理HTTP文件头
通过response对象可以设置HTTP响应报头,其中,最常用的是禁用缓存、设置页面自动刷新和定时跳转网页。下面分别进行介绍。
1.禁用缓存
在默认情况下,浏览器将会对显示的网页内容进行缓存。这样,当用户再次访问相关网页时,浏览器会判断网页是否有变化,如果没有变化则直接显示缓存中的内容,这样可以提高网页的显示速度。对于一些安全性要求较高的网站,通常需要禁用缓存。
【例6.11】 通过设置HTTP头的方法实现禁用缓存。示例代码如下:
<% response.setHeader("Cache-Control","no-store"); response.setDateHeader("Expires",0); %>
2.设置页面自动刷新
通过设置HTTP头还可以实现页面的自动刷新。
【例6.12】 使网页每隔10秒自动刷新一次。示例代码如下:
<% response.setHeader("refresh","10"); %>
3.定时跳转网页
通过设置HTTP头还可以实现定时跳转网页的功能。
【例6.13】 使网页5秒钟后自动跳转到指定的网页。示例代码如下:
<% response.setHeader("refresh","5;URL=login.jsp"); %>
6.3.3 设置输出缓冲
通常情况下,服务器要输出到客户端的内容不会直接写到客户端,而是先写到一个输出缓冲区,在计算机术语中,缓冲区被定义为暂时放置输入或输出资料的内存。实际上,缓冲区也可以这样理解:在一个粮库中,由于装卸车队的速度要快于传送带的传输速度,为了不造成装卸车队的浪费,粮库设计了一个站台,装卸车队可以先将运送的粮食卸到这个平台上,然后让传送机慢慢传送。粮库的这个站台就起到了缓冲的作用。当满足以下3种情况之一,就会把缓冲区的内容写到客户端。
JSP页面的输出信息已经全部写入缓冲区。
缓冲区已满。
在JSP页面中,调用了response对象的flushBuffer()方法或out对象的flush()方法。
response对象提供了如表6.2所示的对缓冲区进行配置的方法。
表6.2 对缓冲区进行配置的方法
【例6.14】 设置缓冲区的大小为32KB。示例代码如下:
response.setBufferSize(32);
说明
如果将缓冲区的大小设置为0KB,则表示不缓冲。