JAVAEE之--------过滤器设置是否缓存(Filter)
在网页中。每次的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)的更多相关文章
- 在asp.net web api中利用过滤器设置输出缓存
介绍 本文将介绍如何在asp.net web api中利用过滤器属性实现缓存. 实现过程 1,首先在web.config文件下appsettings下定义“CacheEnabled”和“CacheTi ...
- Servlet过滤器——使用过滤器禁止浏览器缓存页面
1.概述 IE缓存虽然能提高已储存网站的访问速度,但是过度的IE缓存会影响浏览器的响应速度.同时还可能为网站的运行带来一些不必要的麻烦.例如:可能会因为浏览器缓存的应用,而导致Web服务器不能准确的计 ...
- Tomcat性能调优 通过ExpiresFilter设置资源缓存
转自 http://www.cnblogs.com/daxin/p/3995287.html [简介] ExpiresFilter是Java servlet API 当中的一部分,它负责控制设置res ...
- Tomcat性能优化(二) ExpiresFilter设置浏览器缓存
Tomcat性能调优 通过ExpiresFilter设置资源缓存 [官方文档] http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#E ...
- Fiddler之常用操作(过滤器设置,代理设置,手机抓包设置,手机代理配置)
记录下,工作中常用的一些设置和操作~ 1.过滤“脏”请求 两个下拉框的名词解释: A.内外网过滤 No Zone Filter:不分区域过滤(内网外网都显示) Show only Intranet H ...
- .net设置浏览器缓存和跨域的几种方法
.自定义过滤器属性 public class NoCacheAttribute : FilterAttribute, IActionFilter { public void OnActionExecu ...
- ACM/ICPC 之 优先级队列+设置IO缓存区(TSH OJ-Schedule(任务调度))
一个裸的优先级队列(最大堆)题,但也有其他普通队列的做法.这道题我做了两天,结果发现是输入输出太过频繁,一直只能A掉55%的数据,其他都是TLE,如果将输入输出的数据放入缓存区,然后满区输出,可以将I ...
- arcgis server账号需要设置地图缓存的访问权限
如果gis服务起不来,那么可以看看arcgis server账号有没有设置地图缓存的访问权限,有可能arcgis server账号没有这个文件夹的访问权限. 本文用菊子曰发布
- Okhttp设置http缓存,在没有网络的情况下加载http缓存里面的内容
HTTP_CACHE_FILENAME为缓存地址根路径: private final String HTTP_CACHE_FILENAME = "HttpCache"; priva ...
随机推荐
- Juniper路由器
Juniper路由器入门之一:需要子接口的端口配置 set interfaces fe-2/0/1 vlan-tagging ――――在配置接口启用封装VLAN set in ...
- shp系列(五)——利用C++进行shp文件的写(创建)
之前介绍了shp文件.dbf文件和shx文件的的读取,接下来将分别介绍它们的创建过程.一般来说,读和写的一一对应的,写出的文件就是为了保存数据供以后读取的.写的文件要符合shapefile的标准.之前 ...
- Oracle 11g RAC for LINUX rhel 6.X silent install(静默安装)
一.前期规划 1.硬件环境 CPU: Intel(R) Xeon(R) CPU E7-4820 v4 @ 2.00GHz 8*10核 内存:512GB OCR:2147*5 MB DATA1:2TB ...
- 第6章 服务模式 Service Interface(服务接口)
Service Interface(服务接口) 上下文 您正在设计企业应用程序,并且需要能够通过网络使用其部分功能.此功能需要能够被各类系统使用,因此互操作性是设计的重要方面.除互操作性之外,可能还需 ...
- 第5章分布式系统模式 使用客户端激活对象通过 .NET Remoting 实现 Broker
正在 .NET 中构建一个需要使用分布式对象的应用程序,并且分布式对象的生存期由客户端控制.您的要求包括能够按值或按引用来传递对象,无论这些对象驻留在同一台计算 机上,还是驻留在同一个局域网 (LAN ...
- 企业级时间轴插件Vue-timelinepick
简介 时间范围选择插件 取当前时间之前一段时间范围 按刻,小时,天分类 在线演示及下载 在线演示:https://yelingfeng.github.io/vue-timelinepick/ 本地下载 ...
- JavaScript实现数字时钟功能
<html> <head> <meta charset="utf-8"> <title>无标题文档</title> &l ...
- MFC常用控件之列表视图控件(List Control)
近期学习了鸡啄米大神的博客,对其中的一些知识点做了一些自己的总结.不过,博客内容大部分来自鸡啄米.因此,这个博客算是转载博客,只是加了一些我自己的理解而已.若想学习鸡啄米大神的博客总结,请点击连接:h ...
- 【Oracle】查询当前SCN
介绍两种方式: 一.sys用户下: select current_scn from v$database; select dbms_flashback.get_system_change_number ...
- RAP开发入门-开发笔记-bug记录
NamespaceException: The alias '/rwt-resources' is already in use 该bug发生的第一种情况是: This means that more ...