2009-03-30 11 views
4

Ich möchte verhindern, dass meine CSS auf der Seite des Browsers zwischengespeichert werden. Wie kann ich es in der eingebetteten Jetty-Instanz machen?Wie verhindert man die Zwischenspeicherung von statischen Dateien in der eingebetteten Jetty-Instanz?

Wenn ich XML-Konfigurationsdatei verwenden, möchte ich hinzufügen, Zeilen wie:

<init-param> 
    <param-name>cacheControl</param-name> 
    <param-value>max-age=0,public</param-value> 
</init-param> 

Wie kann ich das drehen in den Code?

Gerade jetzt beginne ich Jetty auf diese Weise:

BasicConfigurator.configure(); 

Server server = new Server(); 
SocketConnector connector = new SocketConnector(); 
// Set some timeout options to make debugging easier. 
// 1 hour 
connector.setMaxIdleTime(1000 * 60 * 60); 
connector.setSoLingerTime(-1); 
connector.setPort(8081); 
server.setConnectors(new Connector[] { connector }); 

WebAppContext bb = new WebAppContext(); 
bb.setServer(server); 
bb.setContextPath("/"); 
bb.setWar("src/webapp"); 

server.addHandler(bb); 

Ich glaube, ich setControlCache irgendwo im WebAppContext Verantwortungsbereich suchen soll.

Irgendwelche Ratschläge?

Antwort

4

ich normalerweise einen ServletHolder verwenden, wie folgt aus:

WebAppContext context = new WebAppContext(); 
ServletHolder servletHolder = new ServletHolder(MyServlet.class); 
servletHolder.setInitParameter("cacheControl","max-age=0,public"); 
context.addServlet(servletHolder, "myservletpath"); 

Während dies nicht der Fall ist genau Code übereinstimmen sollten Sie in der Lage sein, es von dort, um herauszufinden?

1

Und hier ist nur ein funktionierender Code ohne Notwendigkeit, herauszufinden, zu erraten und zu versuchen. Es ist in Bezug auf Code in Frage und Anlegesteg 6 zur Verfügung gestellt. Für Anlegesteg 7 und höher müssen Context zu ServletContextHandler ändern.

BasicConfigurator.configure(); 

Server server = new Server(); 
SocketConnector connector = new SocketConnector(); 
// Set some timeout options to make debugging easier. 
// 1 hour 
connector.setMaxIdleTime(1000 * 60 * 60); 
connector.setSoLingerTime(-1); 
connector.setPort(8081); 
server.setConnectors(new Connector[] { connector }); 

//--- The difference with code in question starts here 

DefaultServlet defaultServlet = new DefaultServlet(); 
ServletHolder holder = new ServletHolder(defaultServlet); 
holder.setInitParameter("useFileMappedBuffer", "false"); 
holder.setInitParameter("cacheControl", "max-age=0, public"); 

Context bb = new Context(); 
bb.setResourceBase("src/webapp"); 
bb.addServlet(holder, "/"); 

//--- Done. Caching is off! 

server.addHandler(bb); 
// Run server as usual with server.run(); 

Meine Probe setzt auch useFileMappedBuffer auf false, die für nicht blockierenden Dateien auf einem Datenträger benötigt, wenn Sie unter Windows aus irgendeinem Grunde entwickeln.

0

Ich benutze resourceHandler für statische Inhalte. Hier ist ein Code funktioniert gut auf Jetty 9.

ResourceHandler rh = new ResourceHandler(); 
    rh.setResourceBase([your_resource_base_dir]); 
    rh.setCacheControl("no-store,no-cache,must-revalidate"); 
Verwandte Themen