2013-03-12 49 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