我正在使用WebSphere Application Server v7.0的<enable-file-serving value="true" />
功能爲我的Java Web應用程序提供靜態內容(圖像,CSS,JavaScript)。WebSphere 7:修改靜態內容文件服務的HTTP頭
如何修改此靜態內容的HTTP標頭(例如,添加Cache-Control
或Expires
標頭)?
我正在使用WebSphere Application Server v7.0的<enable-file-serving value="true" />
功能爲我的Java Web應用程序提供靜態內容(圖像,CSS,JavaScript)。WebSphere 7:修改靜態內容文件服務的HTTP頭
如何修改此靜態內容的HTTP標頭(例如,添加Cache-Control
或Expires
標頭)?
我最終編寫了一個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>
根據規範(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
@jambriz你是對的。我習慣於JavaScript,其中標準單位是毫秒。我已經糾正了答案。 – user113215 2013-04-16 21:23:23
我正在嘗試做類似的事情。但它不起作用。我仍然看到沒有緩存。你認爲我錯過了什麼嗎?我有完全相同的代碼像你。 – webdev 2013-10-10 17:05:11
你好,建議的方法是移動靜態內容IHS(IBM HTTP服務器 - 只是實際上是一個apache 2),如果需要,它將在WAS doind負載均衡和故障轉移之前。檢查:http://www-01.ibm.com/software/webservers/httpservers/ – 2013-03-15 03:35:55
@MarcosMaia我已經在使用IHS,但難以提取/分發/同步靜態內容,以便從Web服務器提供服務,而不是應用程序服務器在我的環境中是不值得頭痛的。 – user113215 2013-03-15 15:37:37