JAVAEE Filter 过滤器设置是否缓存实例详解

 更新时间:2016年05月19日 11:07:14   作者:YX_blog  
网页中,每次的客户端访问服务器,有部分不用重复请求的,这样可以减轻服务器的工作量。那么如何设置客户端是否都缓存呢?接下来通过本文给大家介绍JAVAEE Filter 过滤器设置是否缓存的实例,感兴趣的朋友一起学习吧

在网页中,每次的客户端访问服务器,有部分不用重复请求,如有些图片,视频等就没有必要每次都请求,这样会让服务器增大工作量。为了防止这样,我们采用过滤器来设置客户端是都缓存。

页面的缓存与不缓存设置及html页面中meta的作用

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中配置,根据配置的路径来进行过滤。

以上所述是小编给大家介绍的JAVAEE Filter 过滤器设置是否缓存实例详解的相关知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Java构造器与传值学习总结

    Java构造器与传值学习总结

    这篇文章主要为大家详细介绍了Java构造器与传值学习总结,文中示例介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Java使用正则表达式去除小数点后面多余的0功能示例

    Java使用正则表达式去除小数点后面多余的0功能示例

    这篇文章主要介绍了Java使用正则表达式去除小数点后面多余的0功能,结合具体实例形式分析了java字符串正则替换相关操作技巧,需要的朋友可以参考下
    2017-06-06
  • Springboot集成Quartz实现定时任务代码实例

    Springboot集成Quartz实现定时任务代码实例

    这篇文章主要介绍了Springboot集成Quartz实现定时任务代码实例,任务是有可能并发执行的,若Scheduler直接使用Job,就会存在对同一个Job实例并发访问的问题,而JobDetail & Job方式,Scheduler都会根据JobDetail创建一个新的Job实例,这样就可以规避并发访问问题
    2023-09-09
  • 关于IO密集型服务提升性能的三种方式

    关于IO密集型服务提升性能的三种方式

    这篇文章主要介绍了关于IO密集型服务提升性能的三种方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • SpringBoot如何启动自动加载自定义模块yml文件(PropertySourceFactory)

    SpringBoot如何启动自动加载自定义模块yml文件(PropertySourceFactory)

    这篇文章主要介绍了SpringBoot如何启动自动加载自定义模块yml文件(PropertySourceFactory),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • 吊打Java面试官!整理了一周的Spring面试大全(附答案)

    吊打Java面试官!整理了一周的Spring面试大全(附答案)

    这篇文章主要介绍了Spring面试资料(附答案)建议收藏留存,学Java的小伙伴都知道Spring是面试的必问环节,看完了一天就可掌握数据结构和算法的面试题,快来看看吧
    2021-08-08
  • 超细致讲解Spring框架 JdbcTemplate的使用

    超细致讲解Spring框架 JdbcTemplate的使用

    在之前的Javaweb学习中,学习了手动封装JdbcTemplate,其好处是通过(sql语句+参数)模板化了编程。而真正的JdbcTemplate类,是Spring框架为我们写好的。它是 Spring 框架中提供的一个对象,是对原始 Jdbc API 对象的简单封装。
    2021-09-09
  • IDEA设置允许一个类并行的方法

    IDEA设置允许一个类并行的方法

    这篇文章主要介绍了IDEA设置允许一个类并行的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Spring Boot项目部署命令java -jar的各种参数及作用详解

    Spring Boot项目部署命令java -jar的各种参数及作用详解

    这篇文章主要介绍了Spring Boot项目部署命令java -jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收器、线程栈大小、系统属性等,还介绍了SpringBoot专用参数,如修改端口、指定配置文件等,需要的朋友可以参考下
    2025-04-04
  • java8 stream多字段排序的实现

    java8 stream多字段排序的实现

    这篇文章主要介绍了java8 stream多字段排序的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03

最新评论