怎么在只使用tomcat的情况上,自动缓存js和css或者image等文件
2个回答
展开全部
给网址后面添加一个随机数(或者是任意的字符串)即可,比如原来的网址是这样的:
http....../.../1.htm
改为
http....../.../1.htm?1234
即可(注意问号不能省)。
浏览器是根据网址来缓存的,所以只要给网址接个尾巴,浏览器就会认为是新网址,就会从网上重新下载数据了。当然,如果下次再次改变了网页内容,这个尾巴就要再次修改。
给css和js添加所谓版本号其实也是同一个原理。这个版本号其实就是给css和js的网址接个尾巴而已。
这个也同样适用网页里面的图片、音乐等资源,事实上只要是http协议的元素都可以利用这个办法来避开缓存实时刷新。
http....../.../1.htm
改为
http....../.../1.htm?1234
即可(注意问号不能省)。
浏览器是根据网址来缓存的,所以只要给网址接个尾巴,浏览器就会认为是新网址,就会从网上重新下载数据了。当然,如果下次再次改变了网页内容,这个尾巴就要再次修改。
给css和js添加所谓版本号其实也是同一个原理。这个版本号其实就是给css和js的网址接个尾巴而已。
这个也同样适用网页里面的图片、音乐等资源,事实上只要是http协议的元素都可以利用这个办法来避开缓存实时刷新。
2017-03-06 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
关注
展开全部
该方法分为以下3个步骤
第一步:写一个filter,可以根据路径的正则来判断该路径的请求是否需要设置max-age:
Java代码
/**
*
* @author ahuaxuan
* @date 2008-12-4
* @version $id$
*/
public class CacheFilter implements Filter{
private static transient Log logger = LogFactory.getLog(CacheFilter.class);
private Integer cacheTime = 3600 * 24;
private List<Pattern> patternList = new ArrayList<Pattern>();
private static ResourceBundle rb = ResourceBundle.getBundle("cache-pattern");
public void destroy() {
}
public void doFilter(ServletRequest rq, ServletResponse rqs,
FilterChain fc) throws IOException, ServletException {
fc.doFilter(rq, rqs);
if (rq instanceof HttpServletRequest && rqs instanceof HttpServletResponse) {
HttpServletRequest request = (HttpServletRequest) rq;
HttpServletResponse response = (HttpServletResponse) rqs;
if (matchPattern(request.getRequestURI())) {
response.setHeader("Cache-Control", "max-age=" + cacheTime);
if (logger.isDebugEnabled()) {
StringBuilder sb = new StringBuilder();
sb.append(" set cache control for uri = ").append
(request.getRequestURI());
sb.append(" and the cache time is ").append(cacheTime).append("
second");
logger.debug(sb.toString());
}
}
} else {
if (logger.isWarnEnabled()) {
logger.warn("---- the request instance is not instanceof
HttpServletRequest ---");
logger.warn("---- the response instance is not instanceof
HttpServletResponse ---");
}
}
}
第二步:在classpath路径下创建一个cache-pattern.properties文件,内容如下:
Java代码
1 = .*ext-all.js
2 = .*prototype.js
3 = .*/css/.*\\.css
1 = .*ext-all.js
2 = .*prototype.js
3 = .*/css/.*\\.css
在这个配置文件中,您可以根据js和css的路径来配置哪些目录,或者哪些文件需要设置max-age.
第三步:
在web.xml添加如下内容:
Java代码
<filter>
<filter-name>cache-filter</filter-name>
<filter-class>com.tudou.tudouadsales.component.web.filter.CacheFilter</filter-
class>
<init-param>
<param-name>cache-time</param-name>
<param-value>86000</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>cache-filter</filter-name>
<url-pattern>*.js</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>cache-filter</filter-name>
<url-pattern>*.css</url-pattern>
</filter-mapping>
第一步:写一个filter,可以根据路径的正则来判断该路径的请求是否需要设置max-age:
Java代码
/**
*
* @author ahuaxuan
* @date 2008-12-4
* @version $id$
*/
public class CacheFilter implements Filter{
private static transient Log logger = LogFactory.getLog(CacheFilter.class);
private Integer cacheTime = 3600 * 24;
private List<Pattern> patternList = new ArrayList<Pattern>();
private static ResourceBundle rb = ResourceBundle.getBundle("cache-pattern");
public void destroy() {
}
public void doFilter(ServletRequest rq, ServletResponse rqs,
FilterChain fc) throws IOException, ServletException {
fc.doFilter(rq, rqs);
if (rq instanceof HttpServletRequest && rqs instanceof HttpServletResponse) {
HttpServletRequest request = (HttpServletRequest) rq;
HttpServletResponse response = (HttpServletResponse) rqs;
if (matchPattern(request.getRequestURI())) {
response.setHeader("Cache-Control", "max-age=" + cacheTime);
if (logger.isDebugEnabled()) {
StringBuilder sb = new StringBuilder();
sb.append(" set cache control for uri = ").append
(request.getRequestURI());
sb.append(" and the cache time is ").append(cacheTime).append("
second");
logger.debug(sb.toString());
}
}
} else {
if (logger.isWarnEnabled()) {
logger.warn("---- the request instance is not instanceof
HttpServletRequest ---");
logger.warn("---- the response instance is not instanceof
HttpServletResponse ---");
}
}
}
第二步:在classpath路径下创建一个cache-pattern.properties文件,内容如下:
Java代码
1 = .*ext-all.js
2 = .*prototype.js
3 = .*/css/.*\\.css
1 = .*ext-all.js
2 = .*prototype.js
3 = .*/css/.*\\.css
在这个配置文件中,您可以根据js和css的路径来配置哪些目录,或者哪些文件需要设置max-age.
第三步:
在web.xml添加如下内容:
Java代码
<filter>
<filter-name>cache-filter</filter-name>
<filter-class>com.tudou.tudouadsales.component.web.filter.CacheFilter</filter-
class>
<init-param>
<param-name>cache-time</param-name>
<param-value>86000</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>cache-filter</filter-name>
<url-pattern>*.js</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>cache-filter</filter-name>
<url-pattern>*.css</url-pattern>
</filter-mapping>
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询