首页
论坛
图书
开发资料
在线文档
网址
下载
联系我们
 新闻│Java│JavaScript│Eclipse│Eclipse 英文│J2EE│J2ME│J2SE│JSP│Netbeans│Hibernate│JBuilder│Spring│Struts
站内搜索: 请输入搜索关键词

当前页面: 开发资料首页 → 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彩色验证码

首页 | 全站 Sitemap | 联系我们 | 设为首页 | 收藏本站
版权所有 Copyright © 2006-2007, Java 编程资料牛鼻站, All rights reserved