2013-03-12 140 views
1

我正在使用WebSphere Application Server v7.0的<enable-file-serving value="true" />功能为我的Java Web应用程序提供静态内容(图像,CSS,JavaScript)。WebSphere 7:修改静态内容文件服务的HTTP头

如何修改此静态内容的HTTP标头(例如,添加Cache-ControlExpires标头)?

+0

你好,建议的方法是移动静态内容IHS(IBM HTTP服务器 - 只是实际上是一个apache 2),如果需要,它将在WAS doind负载均衡和故障转移之前。检查:http://www-01.ibm.com/software/webservers/httpservers/ – 2013-03-15 03:35:55

+0

@MarcosMaia我已经在使用IHS,但难以提取/分发/同步静态内容,以便从Web服务器提供服务,而不是应用程序服务器在我的环境中是不值得头痛的。 – user113215 2013-03-15 15:37:37

回答

2

我最终编写了一个Filter以基于请求的资源的URL添加HTTP标头。下面是一个简化版本:

CacheFilter.java

public class CacheFilter implements Filter { 
    private static long maxAge = 86400 * 30; // 30 days in seconds 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, 
      FilterChain chain) throws IOException, ServletException { 
     HttpServletResponse httpResponse = (HttpServletResponse) response; 
     httpResponse.setHeader("Cache-Control", "max-age=" + maxAge); 
     chain.doFilter(request, response); 
    } 

    @Override 
    public void init(FilterConfig filterConfig) throws ServletException { 
    } 

    @Override 
    public void destroy() { 
    } 
} 

的web.xml

<filter> 
    <filter-name>cache</filter-name> 
    <filter-class>com.example.CacheFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>cache</filter-name> 
    <url-pattern>*.png</url-pattern> 
</filter-mapping> 
<filter-mapping> 
    <filter-name>cache</filter-name> 
    <url-pattern>*.jpg</url-pattern> 
</filter-mapping> 
<filter-mapping> 
    <filter-name>cache</filter-name> 
    <url-pattern>*.gif</url-pattern> 
</filter-mapping> 
+0

根据规范(http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html)max-age是以毫秒为单位给出的,所以它应该是私有静态long maxAge = DateUtils.SECONDS_PER_DAY * 30;(我不知道这个常数是否存在)否则很好的答案 – jambriz 2013-04-16 21:01:43

+0

@jambriz你是对的。我习惯于JavaScript,其中标准单位是毫秒。我已经纠正了答案。 – user113215 2013-04-16 21:23:23

+0

我正在尝试做类似的事情。但它不起作用。我仍然看到没有缓存。你认为我错过了什么吗?我有完全相同的代码像你。 – webdev 2013-10-10 17:05:11