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

參考文章:点击打开链接

HTTP1.1中启用Cache-Control 来控制页面的缓存与否。这里介绍几个经常使用的參数:

  • no-cache,浏览器和缓存server都不应该缓存页面信息;
  • public。浏览器和缓存server都能够缓存页面信息。
  • no-store。请求和响应的信息都不应该被存储在对方的磁盘系统中;
  • must-revalidate,对于客户机的每次请求,代理server必须想server验证缓存是否过时;

Last-Modified仅仅页面的最后生成时间,GMT格式;

Expires过时期限值。GMT格式,指浏览器或缓存server在该时间点后必须从真正的server中获取新的页面信息。

上面两个值在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 {
// 过滤器有非常多作用。这个用来设置client是否设置缓存的问题,我们这里採用response通知client设置不缓存
chain.doFilter(request, response);
HttpServletResponse res=(HttpServletResponse) response;
res.setHeader("expries", "-1");
res.setHeader("pragma", "no-cache");
res.setHeader("cache-control", "no-cache"); /*上面的已经能够设置不缓存,可是还能够设置全面一点:
//不同意浏览器端或缓存server缓存当前页面信息。 /* response.setHeader( "Pragma", "no-cache" );
response.setDateHeader("Expires", "-1");
response.addHeader( "Cache-Control", "no-cache" );//浏览器和缓存server都不应该缓存页面信息
response.addHeader( "Cache-Control", "no-store" );//请求和响应的信息都不应该被存储在对方的磁盘 response.addHeader( "Cache-Control", "must-revalidate" );*///于客户机的每次请求,代理server必须想server验证缓存是否过时。 } @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 {
// 过滤器有非常多作用。这个用来设置client是否设置缓存的问题,我们这里採用response通知client设置缓存
//这里设置缓存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:浏览器和缓存server都能够缓存页面信息;
response.setHeader("Pragma", "Pragma"); //Pragma:设置页面是否缓存,为Pragma则缓存,no-cache则不缓存
*/
}

	@Override
public void init(FilterConfig arg0) throws ServletException { } }

上面的filter文件生效须要在web.xml中配置,依据配置的路径来进行过滤。

JAVAEE之--------过滤器设置是否缓存(Filter)的更多相关文章

  1. 在asp.net web api中利用过滤器设置输出缓存

    介绍 本文将介绍如何在asp.net web api中利用过滤器属性实现缓存. 实现过程 1,首先在web.config文件下appsettings下定义“CacheEnabled”和“CacheTi ...

  2. Servlet过滤器——使用过滤器禁止浏览器缓存页面

    1.概述 IE缓存虽然能提高已储存网站的访问速度,但是过度的IE缓存会影响浏览器的响应速度.同时还可能为网站的运行带来一些不必要的麻烦.例如:可能会因为浏览器缓存的应用,而导致Web服务器不能准确的计 ...

  3. Tomcat性能调优 通过ExpiresFilter设置资源缓存

    转自 http://www.cnblogs.com/daxin/p/3995287.html [简介] ExpiresFilter是Java servlet API 当中的一部分,它负责控制设置res ...

  4. Tomcat性能优化(二) ExpiresFilter设置浏览器缓存

    Tomcat性能调优 通过ExpiresFilter设置资源缓存 [官方文档] http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#E ...

  5. Fiddler之常用操作(过滤器设置,代理设置,手机抓包设置,手机代理配置)

    记录下,工作中常用的一些设置和操作~ 1.过滤“脏”请求 两个下拉框的名词解释: A.内外网过滤 No Zone Filter:不分区域过滤(内网外网都显示) Show only Intranet H ...

  6. .net设置浏览器缓存和跨域的几种方法

    .自定义过滤器属性 public class NoCacheAttribute : FilterAttribute, IActionFilter { public void OnActionExecu ...

  7. ACM/ICPC 之 优先级队列+设置IO缓存区(TSH OJ-Schedule(任务调度))

    一个裸的优先级队列(最大堆)题,但也有其他普通队列的做法.这道题我做了两天,结果发现是输入输出太过频繁,一直只能A掉55%的数据,其他都是TLE,如果将输入输出的数据放入缓存区,然后满区输出,可以将I ...

  8. arcgis server账号需要设置地图缓存的访问权限

    如果gis服务起不来,那么可以看看arcgis server账号有没有设置地图缓存的访问权限,有可能arcgis server账号没有这个文件夹的访问权限.  本文用菊子曰发布

  9. Okhttp设置http缓存,在没有网络的情况下加载http缓存里面的内容

    HTTP_CACHE_FILENAME为缓存地址根路径: private final String HTTP_CACHE_FILENAME = "HttpCache"; priva ...

随机推荐

  1. C语言 - .c和.h文件的困惑

    本质上没有任何区别. 只不过一般:.h文件是头文件,内含函数声明.宏定义.结构体定义等内容. .c文件是程序文件,内含函数实现,变量定义等内容.而且是什么后缀也没有关系,只不过编译器会默认对某些后缀的 ...

  2. hdoj--1864--最大保险额(背包)

    最大报销额 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  3. 关于Spring中的<context:annotation-config/>配置作用

    转自:https://www.cnblogs.com/iuranus/archive/2012/07/19/2599084.html 当我们需要使用BeanPostProcessor时,直接在Spri ...

  4. 自定义django的Template context processors

    简要步骤: 1.编辑一个函数: def media_url(request): from django.conf import settings return {'media_url': settin ...

  5. SwiftUI 官方教程(八)

    8. 动态生成预览 接下来,我们会在 LandmarkList_Previews 中添加代码以在不同的设备尺寸上渲染列表.默认情况下,预览会以当前的 scheme 中设备的大小进行渲染.我们可以通过调 ...

  6. ps -aux ,ps aux ,ps -ef 的区别

    Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...

  7. express搭建一个web服务器

    npm install express -g                           express这个库可以使用了. npm install express-generator -g   ...

  8. echarts 圆形图、柱状图

    首先引入echarts的js包 <script type="text/javascript" src="js/esl.js"></script ...

  9. sql多表关联

    inner join(等值连接) 只返回两个表中联结字段相等的行 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有 ...

  10. 位姿检索PoseRecognition:LSH算法.p稳定哈希

    位姿检索使用了LSH方法,而不使用PNP方法,是有一定的来由的.主要的工作会转移到特征提取和检索的算法上面来,有得必有失.因此,放弃了解析的方法之后,又放弃了优化的方法,最后陷入了检索的汪洋大海. 0 ...