2016-04-12 36 views
1

我遇到了一些緩存問題,因爲Wildfly 8.2在默認情況下僅在服務靜態文件時包含Last-Modified響應標頭從部署的戰爭文件。我希望Wildfly包含ETag,響應頭文件,這將解決我的緩存問題。有誰知道可以在standalone.xml文件中配置嗎?如何配置Wildfly 8.2以包含靜態文件(html,js,css等)的ETag響應標頭

+0

看一看在:http://stackoverflow.com/questions/34133039/browser-cache-expiration-for-js-和-css-files-with-wildfly –

+0

已經看過了,但沒有看到答案。但似乎Undertow 1.2.x不支持靜態文件的etags。請參閱https://github.com/undertow-io/undertow/blob/07d0ccb1eefb04a3b712af4e2c8f3a303081b0b1/core/src/main/java/io/undertow/server/handlers/resource/PathResource.java和https://github.com/undertow -io/undertow/ blob/07d0ccb1eefb04a3b712af4e2c8f3a303081b0b1/core/src/main/java/io/undertow/server/handlers/resource/ResourceHandler.java –

+0

@FedericoSierra關於如何使用包含etag的任何想法可變大小,例如一些散列在文件的內容上。 –

回答

0

我已經使用特殊的「resource」servlet實現了帶ETag頭部的戰爭資源的解決方法。

Servlet從Omnifaces庫(http://showcase.omnifaces.org/servlets/FileServlet)中實現的FileServlet類擴展而來。 FileServlet實現正確處理所有的HTTP緩存頭,你只需要實現資源加載方法getFile()來爲戰爭資源文件提供服務。 這裏是從「應用程序」目錄服務的所有資源正確緩存的例子:

@WebServlet(value = {"/app/*"}) 
public class ApplicationResourceServlet extends FileServlet { 

    @Override 
    protected File getFile(HttpServletRequest request) throws IllegalArgumentException { 
    final String pathInfo = request.getPathInfo(); 
    if (pathInfo == null || pathInfo.isEmpty() || "/".equals(pathInfo)) { 
     return null; 
    } 
    final String realPath = getServletContext().getRealPath("/app" + pathInfo); 
    if (realPath != null && Paths.get(realPath).toFile().exists()) { 
     return new File(realPath); 
    } 
    return null; 
    } 
} 
相關問題