2010-06-16 7 views

risposta

68

Per disattivare la cache del browser per le pagine JSP, creare un Filter che viene mappato su un url-pattern di *.jsp e fondamentalmente fa la seguente nel metodo doFilter():

HttpServletResponse httpResponse = (HttpServletResponse) response; 
httpResponse.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1 
httpResponse.setHeader("Pragma", "no-cache"); // HTTP 1.0 
httpResponse.setDateHeader("Expires", 0); // Proxies. 

In questo modo non è necessario copypaste questo su tutte le pagine JSP e li ingombra con scriptlets.

Per abilitare la cache del browser per i componenti statici, come CSS e JS, metterli tutti in una cartella comune come /static o /resources e creare un Filter che viene mappato su un url-pattern di /static/* o /resources/* e fondamentalmente fa la seguente nel metodo doFilter() :

httpResponse.setDateHeader("Expires", System.currentTimeMillis() + 604800000L); // 1 week in future. 

Vedi anche:

+6

+ ∞ se potessi per il tuo post di blog link. Mi ha salvato COSÌ. MOLTI. ORE. –

+0

@Bears: Prego :) – BalusC

+2

grazie mi ha aiutato molto. Ma non c'è un errore nella seconda linea? Imho dovrebbe essere: httpResponse.setHeader ("Cache-Control", "no-cache, no-store, must-revalidate"); – Christian

8
<% 
    response.setHeader("Cache-Control", "no-cache"); 
    response.setDateHeader("Expires", 0); 
%> 
+0

OP dice che vuole una pagina che scade nel lontano futuro, tuttavia questa risposta gli dà il contrario. –

1

contenitori servlet come Tomcat sono dotati di una serie di filtri predefiniti. Vedi ad esempio Expires Filter. Potrebbe essere più facile usare quello esistente piuttosto che creare il tuo filtro simile.

2
<% 
    response.setHeader("Cache-Control", "no-cache"); //HTTP 1.1 
    response.setHeader("Pragma", "no-cache"); //HTTP 1.0 
    response.setDateHeader("Expires", 0); //prevents caching at the proxy server 
%> 
+0

Dovrebbero essere usati sia "Cache-Control" che "Pragma" o solo uno a seconda del container servlet? –

+0

OP dice che vuole una pagina che scade nel lontano futuro, tuttavia questa risposta gli dà il contrario. –