JAVAEE之--------过滤器设置是否缓存(Filter)
2015-12-22 11:51
561 查看
在网页中,每次的客户端访问服务器,有部分不用重复请求,如有些图片,视频等就没有必要每次都请求,这样会让服务器增大工作量。为了防止这样,我们采用过滤器来设置客户端是都缓存。
参考文章:点击打开链接
HTTP1.1中启用Cache-Control 来控制页面的缓存与否,这里介绍几个常用的参数:
no-cache,浏览器和缓存服务器都不应该缓存页面信息;
public,浏览器和缓存服务器都可以缓存页面信息;
no-store,请求和响应的信息都不应该被存储在对方的磁盘系统中;
must-revalidate,对于客户机的每次请求,代理服务器必须想服务器验证缓存是否过时;
Last-Modified只页面的最后生成时间,GMT格式;
Expires过时期限值,GMT格式,指浏览器或缓存服务器在该时间点后必须从真正的服务器中获取新的页面信息;
上面两个值在JSP中设置值为字符型的GMT格式,无法生效,设置long类型才生效;
下面是设置不缓存的filter代码:
<span style="font-size:24px;">package cn.hncu.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CacheFilter implements Filter {
@Override
public void destroy() {
}</span>
下面是设置缓存的过滤器文件
package cn.hncu.filter;
import java.io.IOException;
import java.util.Date;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
public class CacheFilter2 implements Filter {
@Override
public void destroy() {
}
@Override
上面的filter文件生效需要在web.xml中配置,根据配置的路径来进行过滤。
参考文章:点击打开链接
HTTP1.1中启用Cache-Control 来控制页面的缓存与否,这里介绍几个常用的参数:
no-cache,浏览器和缓存服务器都不应该缓存页面信息;
public,浏览器和缓存服务器都可以缓存页面信息;
no-store,请求和响应的信息都不应该被存储在对方的磁盘系统中;
must-revalidate,对于客户机的每次请求,代理服务器必须想服务器验证缓存是否过时;
Last-Modified只页面的最后生成时间,GMT格式;
Expires过时期限值,GMT格式,指浏览器或缓存服务器在该时间点后必须从真正的服务器中获取新的页面信息;
上面两个值在JSP中设置值为字符型的GMT格式,无法生效,设置long类型才生效;
下面是设置不缓存的filter代码:
<span style="font-size:24px;">package cn.hncu.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CacheFilter implements Filter {
@Override
public void destroy() {
}</span>
<span style="font-size:24px;"> @Override public void doFilter(ServletRequest request , ServletResponse response, FilterChain chain) throws IOException, ServletException { // 过滤器有很多作用,这个用来设置客户端是否设置缓存的问题,我们这里采用response通知客户端设置不缓存 chain.doFilter(request, response); HttpServletResponse res=(HttpServletResponse) response; res.setHeader("expries", "-1"); res.setHeader("pragma", "no-cache"); res.setHeader("cache-control", "no-cache"); /*上面的已经可以设置不缓存,但是还可以设置全面一点: //不允许浏览器端或缓存服务器缓存当前页面信息。 /* response.setHeader( "Pragma", "no-cache" ); response.setDateHeader("Expires", "-1"); response.addHeader( "Cache-Control", "no-cache" );//浏览器和缓存服务器都不应该缓存页面信息 response.addHeader( "Cache-Control", "no-store" );//请求和响应的信息都不应该被存储在对方的磁盘 response.addHeader( "Cache-Control", "must-revalidate" );*///于客户机的每次请求,代理服务器必须想服务器验证缓存是否过时; } @Override public void init(FilterConfig arg0) throws ServletException { } }</span><span style="font-size:18px;"> </span>
下面是设置缓存的过滤器文件
package cn.hncu.filter;
import java.io.IOException;
import java.util.Date;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
public class CacheFilter2 implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request , ServletResponse response, FilterChain chain) throws IOException, ServletException { // 过滤器有很多作用,这个用来设置客户端是否设置缓存的问题,我们这里采用response通知客户端设置缓存 //这里设置缓存1天,以实现让图片、视频类的资源(在过滤器当中配置相应的拦截路径)要求客户浏览器缓存1天) //拦截路径在web.xml中配置 chain.doFilter(request, response);//先进行请求,返回也会从过这里,返回进行拦截 HttpServletResponse res=(HttpServletResponse) response; Date d =new Date(); Long time=d.getTime()+60*60*24; // res.setHeader("expries", ""+time);//这样就设置缓存一天 res.setDateHeader("expries", time);//和上面一句一样 /* * Date date = new Date(); response.setDateHeader("Last-Modified",date.getTime()); //Last-Modified:页面的最后生成时间 response.setDateHeader("Expires",date.getTime()+60*60*24); //Expires:过时期限值 response.setHeader("Cache-Control", "public"); //Cache-Control来控制页面的缓存与否,public:浏览器和缓存服务器都可以缓存页面信息; response.setHeader("Pragma", "Pragma"); //Pragma:设置页面是否缓存,为Pragma则缓存,no-cache则不缓存 */ }
@Override public void init(FilterConfig arg0) throws ServletException { } }
上面的filter文件生效需要在web.xml中配置,根据配置的路径来进行过滤。
相关文章推荐
- 浅析SQL Server中的执行计划缓存(上)
- Enterprise Library for .NET Framework 2.0缓存使用实例
- PowerShell中编程清空IE缓存方法
- PowerShell中使用.NET将程序集加入全局程序集缓存
- C#中缓存的基本用法总结
- wap开发中如何有效的利用缓存减少消息的传送量
- PHP基于文件存储实现缓存的方法
- php 过滤器实现代码
- smarty缓存用法分析
- PHP过滤器的实现方法第1/2页
- 引用全局程序集缓存内的程序集的方法
- asp Response.flush 实时显示进度
- C#实现清除IE浏览器缓存的方法
- ASP.NET缓存管理的几种方法
- PHP文件缓存类实现代码
- 清除aspx页面缓存的程序实现方法
- C#缓存之SqlCacheDependency用法实例总结
- jQuery数据缓存用法分析
- jQuery可见性过滤器:hidden和:visibility用法实例
- Jquery validation remote 验证的缓存问题解决方法