当前页面: 开发资料首页 → Java 专题 → 使用Filter指定浏览器来缓存或不缓存服务器数据
使用Filter指定浏览器来缓存或不缓存服务器数据
摘要: 使用Filter指定浏览器来缓存或不缓存服务器数据
器来缓存或不缓存服务器数据
<link> href="../../css/index.css" rel="stylesheet" type="text/css">
</head>
function valiform() {
if(document.form2.keyword.value==""){
alert("请输入关键字!");
document.form2.keyword.focus();
return false;
}
}
function valiform1(){
if(document.form5.pinjianame.value==""){
alert("请输入姓名!");
document.form5.pinjianame.focus();
return false;
}
if(document.form5.pinjiacontent.value==""){
alert("请输入评价内容!");
document.form5.pinjiacontent.focus();
return false;
}
}
<body bgcolor="#FFFFFF" background="../../images/background.gif" leftmargin="0" topmargin="0">
<table width="756" height="1146" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" class="LTR">
<tr>
<td width="747" height="78"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="19%" height="65"></td>
<td width="81%"><table width="94%" height="53" border="0" align="center" cellpadding="0" cellspacing="0" class="LTR">
<tr>
<td height="53">
</td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
<tr>
<td height="20" class="ArticleTeitle"><table width="100%" height="25" border="0" cellpadding="0" cellspacing="0" bgcolor="#3399FF" >
<tr>
<td width="29%">
您的位置〖 大小〖 发布日期〖 浏览
</td>
</tr>
<tr>
<td height="35" valign="top" class="ArticleTeitle">
<table width="676" border="0">
<tr>
<td width="271">
</td>
<td width="395"> 在http://www.jdon.com/上, 彭先生说缓存的设计是提高java系统表现能力的关键,缓存的合理应用在jive论坛上的表现是最有说服利的地方。
下面我们利用HTTP 规范1.1中对请求头类型Cache-Control的定义来说明如何利用在Filter机制实现Http请求的缓存或者不缓存。
这里我们列举的例子是缓存一个图片,比如网站的logo。我们可以指定客户端浏览器缓存对这个logo缓存,或不缓存,以及多长时间的缓存。
其实在asp.net中也提供了类似的功能,而且更为简单,有兴趣的读者可以参看asp.net的相关文章。
下面我们使用servlet的filter机制来实现上面的功能。
</td>
</tr>
</table>
这个filter的代码如下:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
public class ResponseHeaderFilter implements Filter {
FilterConfig fc;
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException,ServletException {
HttpServletResponse response = (HttpServletResponse) res;
for (Enumeration e=fc.getInitParameterNames(); e.hasMoreElements();) {
String headerName = (String)e.nextElement();
response.addHeader(headerName, fc.getInitParameter(headerName));
}
chain.doFilter(req, response);
}
public void init(FilterConfig filterConfig) {
this.fc = filterConfig;
}
public void destroy() {
this.fc = null;
}
}
在WEB-INF/web.xml 中添加如下配置
ResponseHeaderFilter
com.jspbook.ResponseHeaderFilter
Cache-Control
max-age=3600
ResponseHeaderFilter
/logo.png
注意上面的黑体部分。
我们把上面的代码放在Tomcat(5.0.16)中进行测试。
注意:为了记录Tomcat相应的浏览器请求的日志,需要把:
/conf/server.xml 文件中的
注释去掉,访问的日志被记录在catalina_log.[当天日期].txt中。
为了测试我们的代码,建立一个简单的html文件:
<head>
A Simple Page
</head>
<body>
Some text, with a logo
</body>
并把logo.png放到相应的目录下面:
2004-01-15 18:48:20 RequestDumperValve[Catalina]: REQUEST URI =/test.html
...(第一次访问的情景)
===============================================================
2004-01-15 18:48:21 RequestDumperValve[Catalina]: REQUEST URI =/logo.png
...
2004-01-15 18:48:21 RequestDumperValve[Catalina]: header=Cache-Control=max-age=3600
----------
...(非第一次访问的情景)
===============================================================
2004-01-15 18:48:20 RequestDumperValve[Catalina]: REQUEST URI =/test.html
----------
可见,logo.png在缓存期间并没有被服务器输出。
根据Http1.1的规范,有两种方式来让浏览器缓存数据:
1、if-modified-since HTTP request header
2、cache-control
当然如果不缓存数据可以用如下的配置:
ResponseHeaderFilter
com.jspbook.ResponseHeaderFilter
Cache-Control
private,no-cache,no-store
欢迎交流
田春峰
accesine@163.com
<script>
function TempSave(ElementID)
{
CommentsPersistDiv.setAttribute("CommentContent",document.getElementById(ElementID).value);
CommentsPersistDiv.save("CommentXMLStore");
}
function Restore(ElementID)
{
CommentsPersistDiv.load("CommentXMLStore");
document.getElementById(ElementID).value=CommentsPersistDiv.getAttribute("CommentContent");
}
</td>
</tr>
<tr>
↑返回目录
前一篇: 一个检查邮件地址有效性的正则表达式程序
后一篇: JSP彩色验证码