JSP 设置HTTP响应报头
当客户访问一个页面时,会发送一个HTTP报头到服务器。这个HTTP请求包括请求行、HTTP头和信息行。同样,HTTP响应也包括一些HTTP头,另外使用HTML中的META标签,也可以实现对HTTP报头的操作。
META标签是HTML语言HEAD部的一个辅助性标签,它位于HTML文档头部的<HEAD>标记和<TITLE>标记之间,它提供用户不可见的信息。META标签通常用来为搜索引擎定义页面主题,或者是定义用户浏览器上的cookie、网站作者、设定页面格式、标注内容提要和关键字,还可以设置页面的自动刷新时间间隔级。
META标签分两大部分:HTTP标题信息(HTTP-EQUIV)和页面描述信息(NAME)。HTTP-EQUIV类似于HTTP的头部协议,用于回应给浏览器一些有用的信息,以帮助正确地显示网页内容。表4-3列出了常用的HTTP-EQUIV类型。
表4-3 HTTP-EQUIV类型的作用
HTTP-EQUIV类型 | 说明 | 用法 |
Content-Type Content-Language | 设定页面使用的字符集,用以说明页面制作所使用的语言,以指示浏览器调用相应的字符集显示页面内容 | <Meta http-equiv="Content-Type" Content="text/html; Charset=gb2312"> <Meta http-equiv="Content-Language" Content="zh-CN"> |
Refresh | 设置网页的刷新时间,或转移到另外的网页。单位为秒 | <Meta http-equiv="Refresh" Content="30"> <Meta http-equiv="Refresh" Content="5; Url=www.xia8"> |
Expires | 指定网页在缓存中的有效时间,一旦网页过期,必须到服务器上重新下载 | <Meta http-equiv="Expires" Content="0"> <Meta http-equiv="Expires" Content="Wed, 26 Feb 2007 08:21:57 GMT">必须使用GMT的时间格式,或直接设为0(数字表示多少时间后过期) |
Pragma | 禁止浏览器从本地机的缓存中调用页面内容 | <Meta http-equiv="Pragma" Content="No-cach"> |
Set-Cookie | 设定cookie,如果网页过期,存储的cookie也被删除。需要注意的也是必须使用GMT时间 | <Meta http-equiv="Set-Cookie" Content="cookievalue=xxx; expires=Wednesday,21-Oct-07 15:14:21 GMT; path=/"> |
Pics-label | 设置网页的评定等级。在IE的internet选项中有一项内容设置,可以防止浏览一些受限制的网站,而网站的限制级别通过该参数来设置 | <meta http-equiv="Pics-label" contect=""> |
windows-Target | 强制页面在当前窗口中以独立页面显示,可以防止网页被别人当作一个frame页调用 | <meta http-equiv="windows-Target" contect="_top"> |
META标签中的NAME是描述网页的,以便于搜索引擎分类和查。NAME的值用于指定所提供信息的类型。有些值是已经定义好的。例如description(说明)、keyword(关键字)、refresh(刷新)等。还可以指定其他任意值,如:creationdate(创建日期)等。NAME的COUNTENT为指定的实际内容,表4-5列出的NAME类型的作用。
表4-5 NAME类型的作用
NAME类型 | 说明 | 用法 |
Keywords | 为搜索引擎提供的关键字列表。各关键词间用英文逗号“,”隔开 | <Meta name="Keywords" Content=" Keywords1, Keywords2,Keywords 3,……"> |
Description | Description用来告诉搜索引擎网站的主要内容 | <Meta name="Description" Content="网页的简述"> |
Author (作者) | 标注网页的作者或制作组 | <Meta name="Author" Content=" 刘丽"> |
Copyright | 标注版权 | <Meta name="Copyright" Content="本页版权归HT所有"> |
在JSP页面中,可以通过Response对象相应方法,动态地添加新的HTTP响应标题值,这些值会被发送到浏览器。如果添加的HTTP报头已经存在,则新的值会覆盖原来的标题值。下面是一些常用的修改报头方法:
● 控制缓存和有效期。
● 定制HTTP报头。
● 指定MIME类型。
用户的浏览器,以及浏览器与服务器之间的任一代理服务器,都可以缓存HTML和JSP创建的网页。当用户请求页面时,浏览器就发送一个“最新修改”的请求到服务器,询问服务器网页是否被修改。若没有被修改,服务器的响应使用相应的状态码和消息,使浏览器使用缓存的内容而不需要通过网络重新下载页面。反之,浏览器就需要新下载页面。
通过HTML页面的META标签控制缓存和有效期的方法如下:
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="0">
而在服务器的JSP动态页页中禁止缓存,则要加入类似如下脚本
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
使用Response对象的addHeader( )和setHeader( )方法,可以创建自定义的状态码和HTTP报头。该方法需要两个参数:HTTP报头和设置报头的值。
例如,在页面中添加HTTP文件头,并通过Response对象为HTTP响应头添加一个标题Refresh。当客户端接收到这个响应头后,每间隔1秒钟将刷新页面。
文件名:ResponseSX.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.util.*,SimpleDateFormat"%>
<h3>页面自动刷新</h3>
<font size=3 align="center">jsp定义
<br> <%
Date date = new Date();
String dateFormatStr = "yyyy-M-dd\n\tH:mm:ss";
SimpleDateFormat simpleFormat = new SimpleDateFormat(dateFormatStr);
out.println("<h3 align=center>现在时间为:" + simpleFormat.format(date)
+ "</h3><br>");
response.setHeader("Refresh", "1");
%> </font>
通过浏览该网页即可在页面中,显示当前的时间,并每隔1秒钟将自动刷新一下页面,如图4-10所示。
图4-10 自动刷新当前时间
这与在HTML页面中使用如下的<META>标签效果可以设置相同的效果,如<meta http-equiv="refresh" content="1">。下面列出了基本的响应报头部分:
● Location 响应报头中用于重定向接受者到一个新的位置。例如:客户端所请求的页面已经不存在原来的位置,为了让客户端浏览器重定向到所请求页面的新位置,服务器端可以发
回Location响应报头后使用重定向语句,让客户端去访问。调用response.sendRedirect( )方法可以设置该报头。
● Server 响应报头中包含了服务器用来处理请求的软件信息。它和User-Agent请求报头相对应,Server发送服务器端软件的信息,User-Agent为发送客户端软件(浏览器)和操作系统的信息。
● Content-Encoding 标明页面在传输过程中所使用的编码方式,因此要获得Content-Type报头中所引用的资源,浏览器必须采用相应的解码机制。
● Content-Language 描述文档使用的语言。Content-Language允许用户遵照自身的首选语言来识别和区分实体。
● Content-Length 该报头用于指明响应文件的长度,以字节方式存储的十进制数字来表示,也就是一个数字字符占一个字节,用其对应的ASCII码存储传输。
● Content-Type 用于指明发送的MIME类型。例如:Content-Type: text/html;charset=GB2312。
● Expires 指定响应过期的日期和时间。通常,代理服务器或浏览器会缓存一些页面。当用户再次访问这些页面时,直接从缓存中加载并显示给用户,这样缩短了响应的时间,减少服务器的负载。为了让代理服务器或浏览器在一段时间后更新页面,可以使用Expires实体报头域指定页面过期的时间。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论