2016-04-12 16 views
1

Ich stoße auf einige Caching Probleme, da Wildfly 8.2 standardmäßig nur den Last-Modified Response Header enthält, wenn statische Dateien geliefert werden aus einer bereitgestellten Kriegsdatei. Ich möchte, dass Wildfly ETag, Response-Header, einfügt, der meine Caching-Probleme lösen würde. Weiß jemand, wenn möglich, in der Datei standalone.xml zu konfigurieren?Wie man Wildfly 8.2 konfiguriert, um ETAG Response Header für statische Dateien (html, js, css, etc) einzubinden

+0

in Werfen Sie einen Blick: http://stackoverflow.com/questions/34133039/browser-cache-expiration-for-js- und-css-files-with-wildfly –

+0

Hab schon mal geschaut, aber keine Antwort gesehen. Es scheint jedoch, dass Undertow 1.2.x Etags für statische Dateien nicht unterstützt. Siehe https://github.com/undertow-io/undertow/blob/07d0ccb1eefb04a3b712af4e2c8f3a303081b0b1/core/src/main/java/io/undertow/server/handlers/resource/PathResource.java und https://github.com/undertow -io/underth/blob/07d0ccb1eefb04a3b712af4e2c8f3a303081b0b1/core/src/main/java/io/undertow/server/handlers/resource/ResourceHandler.java –

+0

@FedericoSierra Eine Idee, wie zu und zu einem Etag von variable Größe, z etwas Hash auf den Inhalt einer Datei. –

Antwort

0

Ich habe Umgehung mit speziellen "Ressource" Servlet implementiert, die Kriegsressourcen mit ETag-Header dienen.

Das Servlet erstreckt sich von der FileServlet-Klasse, die in der Omnifaces-Bibliothek implementiert ist (http://showcase.omnifaces.org/servlets/FileServlet). Die FileServlet-Implementierung behandelt alle HTTP-Caching-Header korrekt. Sie benötigen lediglich die Ressourcenlademethode getFile(), um WAR-Ressourcendateien bereitzustellen. Hier ist das Beispiel für die korrekte gecached dienen alle Ressourcen aus „app“ Verzeichnis:

@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; 
    } 
}