JAVAEE之--------过滤器设置是否缓存(Filter)

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

参考文章:点击打开链接

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

时间: 2024-10-13 07:03:30

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

JavaWeb-过滤器Filter学习(二)设置全站编码与设置页面缓存

以前我们设置servlet的request和response的编码需要在每个servlet都设置,如果Servlet很多,显得很麻烦,现在我们可以用过滤器很简单的实现这个功能. 还有页面缓存,如果我们的网页是静态的,图片和内容基本上很少变化或者不变化的,我们就可以告诉客户端这个页面你缓存多久~以达到节省流量的目的. 设置全站编码: 先写好Filter:CharacterFilter.java: package cn.hncu.pubs; import java.io.IOException; i

设置常用的过滤器-不适用缓存、登陆过滤器

设置不使用缓存的过滤器 功能描述 将HTTP响应头信息中的缓存参数设置为不进行缓存. 使用方法 在 java web 项目的 web.xml 文件中添加如下代码. <!--设置不使用缓存的过滤器配置 开始 --> <filter> <filter-name>ClearCacheFilter</filter-name> <filter-class>com.hmw.filter.ClearCacheFilter</filter-class>

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

1.自定义过滤器属性 public class NoCacheAttribute : FilterAttribute, IActionFilter { public void OnActionExecuted(ActionExecutedContext filterContext) { //设置浏览器缓存 filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache); //设置接口跨域 fil

如何设置页面缓存或不用页面缓存

一.设置页面缓存 1.直接在页面上用<%@ OutputCache Duration="10" VaryByParam="None" %>声明来缓存页面 2.使用服务端方法: //将Cache-Control标头设置为HttpCacheAbility值 Response.Cache.SetCacheability(HttpCacheability.Public); //将页面的绝对过期时间 Response.Cache.SetExpires(DateTi

ubuntu中eclipse Javaee的安装设置

Ubuntu软件库中的Eclipse居然是基础版,只有JDT和PDE,无法开发J2EE程序,这一点不及fedora,所以只能手工安装Eclipse Java EE版. 1. 下载对应于系统的版本,我的是 eclipse-jee-helios-SR2-linux-gtk.tar.gz,下载的压缩包放在~/downloads目录下截图如下: 2. 解压缩eclipse到/usr/share目录: 进入终端窗口,输入命令sudo tar -zxvf eclipse-jee-kepler-SR1-lin

ArcGIS 缓存技巧[1] 设置发布缓存的进程数量

1.选择服务 假设:我们的地图服务已经发布好,名称为 test.如下图所示: 1.1.2 - 设置发布缓存的进程数量 右键上图 test 服务,先停止服务,选择服务属性(service property)->选择"池化"选项卡. 如下图所示,我们设置最大实例数即可,理论上讲最优是 cpu 线程数+1:但服务器上一般还有其他应用,一般比 cpu 线程数少几个,影响不大.

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

一个裸的优先级队列(最大堆)题,但也有其他普通队列的做法.这道题我做了两天,结果发现是输入输出太过频繁,一直只能A掉55%的数据,其他都是TLE,如果将输入输出的数据放入缓存区,然后满区输出,可以将IO时间消耗降到很低. 任务调度(Schedule) 描述 某高性能计算集群(HPC cluster)采用的任务调度器与众不同.为简化起见,假定该集群不支持多任务同时执行,故同一时刻只有单个任务处于执行状态.初始状态下,每个任务都由称作优先级数的一个整数指定优先级,该数值越小优先级越高:若优先级数相等

【转】busybox分析——arp设置ARP缓存表中的mac地址

[转]busybox分析--arp设置ARP缓存表中的mac地址 转自:http://blog.chinaunix.net/uid-26009923-id-5098083.html 1. 将arp缓存表中某一IP的MAC地址修改 [email protected]:/work/test/tcpip/busy/arp$ cat arp.c #include "utils.h" #include <net/if_arp.h> #include <linux/sockios

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

HTTP_CACHE_FILENAME为缓存地址根路径: private final String HTTP_CACHE_FILENAME = "HttpCache"; private static final Interceptor REWRITE_CACHE_CONTROL_INTERCEPTOR = new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { R