使用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>