案例二:控制浏览器缓存静态资源的时间

控制浏览器缓存页面中的静态资源的过滤器:

场景:有些动态页面中引用了一些图片或css文件以修饰页面效果,这些图片和css文件经常是不变化的,所以为减轻服务器的压力,可以使用filter控制浏览器缓存这些文件,以提升服务器的性能。

如何控制缓存的时间?

  • cache-control: max-age=3600  缓存 1个 小时
  • expires:  当前的时间 + 1个小时

代码如下:

package blog.csdn.net.web.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;
/**
 * 控制静态资源缓存时间的filter
 * @author mChenys
 *
 */
public class CacheFilter implements Filter {

	public void init(FilterConfig filterConfig) throws ServletException {
	}
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		
		// 强制 类型 转换 
		HttpServletRequest httpServletRequest = (HttpServletRequest) request;
		HttpServletResponse httpServletResponse = (HttpServletResponse) response;
		
		// 设置缓存多长时间就可以了 .......
		httpServletResponse.setHeader("cache-control", "max-age=3600");
		
		// 为了 避免 这里的 数字的乘积 过大溢出 , 所以 最好 将 这个时间 值 后 加上 一个 L, 声明 为 一个 long 值 .单位毫秒
		httpServletResponse.setDateHeader("expires", System.currentTimeMillis()+1000L*3600);
		
		// 放行
		chain.doFilter(httpServletRequest, httpServletResponse);
	}
	public void destroy() {
	}
}

注册filter:

<filter>
	<filter-name>CacheFilter</filter-name>
	<filter-class>blog.csdn.net.web.filter.CacheFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>CacheFilter</filter-name>
	<url-pattern>*.png</url-pattern>
	<url-pattern>*.jpg</url-pattern>
	<url-pattern>*.bmp</url-pattern>
        <url-pattern>*.gif</url-pattern>
	<url-pattern>*.css</url-pattern>
</filter-mapping>

 测试:

首次请求某个图片:

再次请求:

猜你喜欢

转载自blog.csdn.net/mchenys/article/details/81214446