静态资源的缓存
1.tomcat上面的方式
- 在web.xml配置过滤器
-
<filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>CacheFilter</filter-name> <filter-class>com.hand.hap.winShare.utils.EasyCacheFilter</filter-class> <!-- 配置要缓存的web资源以及缓存时间,以小时为单位 --> <init-param> <param-name>css</param-name> <param-value>7</param-value> </init-param> <init-param> <param-name>jpg</param-name> <param-value>7</param-value> </init-param> <init-param> <param-name>js</param-name> <param-value>7</param-value> </init-param> <init-param> <param-name>png</param-name> <param-value>7</param-value> </init-param> <init-param> <param-name>woff</param-name> <param-value>7</param-value> </init-param> <init-param> <param-name>woff2</param-name> <param-value>7</param-value> </init-param> <init-param> <param-name>ttf</param-name> <param-value>7</param-value> </init-param> </filter> <!-- 配置要缓存的web资源的后缀--> <filter-mapping> <filter-name>CacheFilter</filter-name> <url-pattern>*.jpg</url-pattern> </filter-mapping> <filter-mapping> <filter-name>CacheFilter</filter-name> <url-pattern>*.css</url-pattern> </filter-mapping> <filter-mapping> <filter-name>CacheFilter</filter-name> <url-pattern>*.js</url-pattern> </filter-mapping> <filter-mapping> <filter-name>CacheFilter</filter-name> <url-pattern>*.png</url-pattern> </filter-mapping> <filter-mapping> <filter-name>CacheFilter</filter-name> <url-pattern>*.ttf</url-pattern> </filter-mapping> <filter-mapping> <filter-name>CacheFilter</filter-name> <url-pattern>*.woff</url-pattern> </filter-mapping> <filter-mapping> <filter-name>CacheFilter</filter-name> <url-pattern>*.woff2</url-pattern> </filter-mapping>
在写一个过滤器缓存数据
package com.hand.hap.winShare.utils;
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;
/**
* 一个简单的使用静态缓存的过滤器
* @author 鲁竹红
*/
public class EasyCacheFilter implements Filter{
private FilterConfig filterConfig;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("----过滤器初始化----");
this.filterConfig = filterConfig;
}
//过滤器功能在这里实现
@Override
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
//1.获取用户想访问的资源
String uri = request.getRequestURI();
//2.得到用户想访问的资源的后缀名
String ext = uri.substring(uri.lastIndexOf(".")+1);
//得到资源需要缓存的时间
String time = filterConfig.getInitParameter(ext);
if(time!=null){
long t = Long.parseLong(time)*3600*1000*24;
//设置浏览器缓存
response.setDateHeader("expires", System.currentTimeMillis() + t);
response.setHeader("Pragma","public");
response.setHeader("Cache-Control","public");
}
chain.doFilter(request, response);
}
@Override
public void destroy() {
System.out.println("----过滤器销毁----");
}
}
2. Nginx上面的方式
详情看http://blog.csdn.net/xyr05288/article/details/68928403
location ~ .(gif|jpg|png|htm|html|css|js|flv|ico|swf)(.*) {
proxy_pass http://cluster; #如果没有缓存则通过proxy_pass转向请求
proxy_redirect off;
proxy_set_header Host $host;
proxy_cache cache_one;
proxy_cache_valid 200 302 1h; #对不同的HTTP状态码设置不同的缓存时间,h小时,d天数
proxy_cache_valid 301 1d;
proxy_cache_valid any 1m;
expires 30d;
}