使用Filter快速对网页资源进行缓存,在网页资源没有改变的情况下避免多次HTTP调用!
我们可以通过Filter快速对网页资源进行缓存。你可以在你的web.xml设置一个拦截器,并可以指定特定的内容类型,它可以拦截response,并且可以编辑HTTP头。
代码如下:
package com.xyz import java.io.IOException; 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 CacheFilter implements javax.servlet.Filter { FilterConfig filterConfig = null; public void init(FilterConfig filterConfig){ this.filterConfig = filterConfig; } public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { String sCache = filterConfig.getInitParameter("Cache"); if(sCache != null){ ((HttpServletResponse)res).setHeader("Cache-Control", sCache); } chain.doFilter(req, res); } public void destroy(){ this.filterConfig = null; } }
现在,假设我们要使这个filter对所有的jpg请求起作用,那么,你就需要在你的web.xml里增加下面的内容:
<filter> <filter-name>Cache</filter-name> <filter-class>com.xyz.CacheFilter</filter-class> <init-param> <param-name>cache</param-name> <param-value>public, max-age=2592000</param-value> </init-param> </filter> <filter-mapping> <filter-name>Cache</filter-name> <url-pattern>*.jpg</url-pattern> </filter-mapping>
这个filter现在会指示客户端缓存存贮特定的内容(jpg),时间是2592000秒。
这个filter也可以作用于.css和.js文件。事实上,这个filter可以作用于你指定的任何文件类型。只需要简单改变url-pattern 属性或者新增一个。
例如:
<filter> <filter-name>Cache</filter-name> <filter-class>com.xyz.CacheFilter</filter-class> <init-param> <param-name>cache</param-name> <param-value>public, max-age=2592000</param-value> </init-param> </filter> <filter-mapping> <filter-name>Cache</filter-name> <url-pattern>*.css</url-pattern> </filter-mapping>
或者
<filter> <filter-name>Cache</filter-name> <filter-class>com.xyz.CacheFilter</filter-class> <init-param> <param-name>cache</param-name> <param-value>public, max-age=2592000</param-value> </init-param> </filter> <filter-mapping> <filter-name>Cache</filter-name> <url-pattern>*.jpg</url-pattern> </filter-mapping> <filter-mapping> <filter-name>Cache</filter-name> <url-pattern>*.css</url-pattern> </filter-mapping>