为JBOSS服务器设置静态内容的cache header
来源:互联网 发布:南京田家炳中学知乎 编辑:程序博客网 时间:2024/05/22 01:28
为jboss服务器的静态内容如js,css,gif等设置cache header,特别是expire header,可以大大提高web服务的效率,使浏览器充分利用缓存。
首先增加一个java类,用于设置response的http header。
package org.foundation.servlet.filter; import java.io.IOException;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.Locale;import java.util.TimeZone; 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.HttpServletResponse; /** * The Class CacheHeaderFilter. * * @author */public class CacheHeaderFilter implements Filter { /** * The Constant MILLISECONDS_IN_SECOND. */ private static final int MILLISECONDS_IN_SECOND = 1000; /** The Constant POST_CHECK_VALUE. */ private static final String POST_CHECK_VALUE = "post-check="; /** The Constant PRE_CHECK_VALUE. */ private static final String PRE_CHECK_VALUE = "pre-check="; /** The Constant MAX_AGE_VALUE. */ private static final String MAX_AGE_VALUE = "max-age="; /** The Constant ZERO_STRING_VALUE. */ private static final String ZERO_STRING_VALUE = "0"; /** The Constant NO_STORE_VALUE. */ private static final String NO_STORE_VALUE = "no-store"; /** The Constant NO_CACHE_VALUE. */ private static final String NO_CACHE_VALUE = "no-cache"; /** The Constant PRAGMA_HEADER. */ private static final String PRAGMA_HEADER = "Pragma"; /** The Constant CACHE_CONTROL_HEADER. */ private static final String CACHE_CONTROL_HEADER = "Cache-Control"; /** The Constant EXPIRES_HEADER. */ private static final String EXPIRES_HEADER = "Expires"; /** The Constant LAST_MODIFIED_HEADER. */ private static final String LAST_MODIFIED_HEADER = "Last-Modified"; /** The Constant CACHE_TIME_PARAM_NAME. */ private static final String CACHE_TIME_PARAM_NAME = "CacheTime"; /** The Static HTTP_DATE_FORMAT object. */ private static final DateFormat HTTP_DATE_FORMAT = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US); static {HTTP_DATE_FORMAT.setTimeZone(TimeZone.getTimeZone("GMT"));} /** The reply headers. */ private String[][] mReplyHeaders = { {} }; /** The cache time in seconds. */ private Long mCacheTime = 0L; /** * Initializes the Servlet filter with the cache time and sets up the unchanging headers. * * @param pConfig the config * * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) */ public void init(final FilterConfig pConfig) { final ArrayList<String[]> newReplyHeaders = new ArrayList<String[]>(); this.mCacheTime = Long.parseLong(pConfig.getInitParameter(CACHE_TIME_PARAM_NAME)); if (this.mCacheTime > 0L) { newReplyHeaders.add(new String[] { CACHE_CONTROL_HEADER, MAX_AGE_VALUE + this.mCacheTime.longValue() }); newReplyHeaders.add(new String[] { CACHE_CONTROL_HEADER, PRE_CHECK_VALUE + this.mCacheTime.longValue() }); newReplyHeaders.add(new String[] { CACHE_CONTROL_HEADER, POST_CHECK_VALUE + this.mCacheTime.longValue() }); } else { newReplyHeaders.add(new String[] { PRAGMA_HEADER, NO_CACHE_VALUE }); newReplyHeaders.add(new String[] { EXPIRES_HEADER, ZERO_STRING_VALUE }); newReplyHeaders.add(new String[] { CACHE_CONTROL_HEADER, NO_CACHE_VALUE }); newReplyHeaders.add(new String[] { CACHE_CONTROL_HEADER, NO_STORE_VALUE }); } this.mReplyHeaders = new String[newReplyHeaders.size()][2]; newReplyHeaders.toArray(this.mReplyHeaders); } /** * Do filter. * * @param pRequest the request * @param pResponse the response * @param pChain the chain * * @throws IOException Signals that an I/O exception has occurred. * @throws ServletException the servlet exception * * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, * javax.servlet.FilterChain) */ public void doFilter(final ServletRequest pRequest, final ServletResponse pResponse, final FilterChain pChain) throws IOException, ServletException { // Apply the headers final HttpServletResponse httpResponse = (HttpServletResponse) pResponse; for (final String[] replyHeader : this.mReplyHeaders) { final String name = replyHeader[0]; final String value = replyHeader[1]; httpResponse.addHeader(name, value); } if (this.mCacheTime > 0L) { final long now = System.currentTimeMillis(); final DateFormat httpDateFormat = (DateFormat) HTTP_DATE_FORMAT.clone(); httpResponse.addHeader(LAST_MODIFIED_HEADER, httpDateFormat.format(new Date(now))); httpResponse.addHeader(EXPIRES_HEADER, httpDateFormat.format(new Date(now + (this.mCacheTime.longValue() * MILLISECONDS_IN_SECOND)))); } pChain.doFilter(pRequest, pResponse); } /** * Destroy all humans! * * @see javax.servlet.Filter#destroy() */ public void destroy() { } }
然后在需要使用的应用中,设置web.xml,增加对于静态内容的过滤器,设置缓存时间。
<filter> <filter-name>CacheFilterOneWeek</filter-name> <filter-class>org.foundation.servlet.filter.CacheHeaderFilter</filter-class> <init-param> <param-name>CacheTime</param-name> <param-value>604800</param-value> </init-param> </filter> <filter> <filter-name>CacheFilterOneDay</filter-name> <filter-class>org.foundation.servlet.filter.CacheHeaderFilter</filter-class> <init-param> <param-name>CacheTime</param-name> <param-value>86400</param-value> </init-param> </filter> <filter> <filter-name>CacheFilterOneHour</filter-name> <filter-class>org.foundation.servlet.filter.CacheHeaderFilter</filter-class> <init-param> <param-name>CacheTime</param-name> <param-value>3600</param-value> </init-param> </filter> ....... <filter-mapping> <filter-name>CacheFilterOneDay</filter-name> <url-pattern>*.js</url-pattern> </filter-mapping> <filter-mapping> <filter-name>CacheFilterOneDay</filter-name> <url-pattern>*.css</url-pattern> </filter-mapping> <filter-mapping> <filter-name>CacheFilterOneWeek</filter-name> <url-pattern>*.jpg</url-pattern> </filter-mapping> <filter-mapping> <filter-name>CacheFilterOneWeek</filter-name> <url-pattern>*.gif</url-pattern> </filter-mapping>
重新部署相应的war包,重启jboss即可。
- 为JBOSS服务器设置静态内容的cache header
- 三种典型web服务器Header设置内容过期方法
- 三种典型web服务器Header设置内容过期方法
- 为Linux服务器设置静态IP的方法
- 为Linux服务器设置静态IP的方法
- 服务器设置Cache-Control的方法
- php header()设置页面Cache缓存
- JBoss Cache的standalone用法
- Nginx服务器中静态文件cache的处理流程
- header如何设置为图片
- 修改squid的Header中的X-Cache为Powered-By-LinuxTone
- header(头域)中缓存设置的详解(关于Cache-control和Pragma)
- header(头域)中缓存设置的详解(关于Cache-control和Pragma)
- jboss cache
- JBoss Cache
- centos7 为服务器设置静态内网IP
- Prefix Header 的设置
- 设置静态文本框的背景为透明
- 基本类的数组利用Arrays.asList方法转换成list
- Peersim模拟器的安装和运行
- Vmware 8里运行冒险岛097——提取Vmware Tools源文件
- 稀疏矩阵的压缩存储及转置
- 用安卓玩aiwi等于做运动
- 为JBOSS服务器设置静态内容的cache header
- 玩aiwi等于做运动
- 对称矩阵压缩存储
- 【Android】JSON应用
- C++笔试面试宝典
- 敏捷大会感言
- 编程时的一点小知识
- 玩aiwi后的感受
- 在Linux系统中获取字符串的MD5值