2009-08-30 15 views

Odpowiedz

8

Wydaje się, że nie ma prostego sposobu, aby to zrobić, ale to nie jest dużo pracy.Moje rozwiązanie podklasy serwlet, który renderuje GSPs (a także kontroler, który jest używany do non-GSP . kupna)

Tutaj jest podklasą servlet:

package com.burtbeckwith; 

import java.io.IOException; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.codehaus.groovy.grails.web.pages.GroovyPagesServlet; 

public class CachingPageServlet extends GroovyPagesServlet { 

    private static final String HEADER_PRAGMA = "Pragma"; 
    private static final String HEADER_EXPIRES = "Expires"; 
    private static final String HEADER_CACHE_CONTROL = "Cache-Control"; 

    @Override 
    public void doPage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     response.setHeader(HEADER_PRAGMA, "no-cache"); 
     response.setDateHeader(HEADER_EXPIRES, 1L); 
     response.setHeader(HEADER_CACHE_CONTROL, "no-cache"); 
     response.addHeader(HEADER_CACHE_CONTROL, "no-store"); 
     super.doPage(request, response); 
    } 
} 

i trzeba zastąpić oryginał w web.xml (Uruchom "grails install-szablony" i edytować src/templates/war/web.xml):

<servlet> 
    <servlet-name>gsp</servlet-name> 
    <servlet-class>com.burtbeckwith.CachingPageServlet</servlet-class> 
</servlet> 

i ty pewnie też chcą zrobić to samo dla odpowiedzi opartych na kontroler, tak zrobić, że stosowanie tej podklasy kontrolera:

package com.burtbeckwith; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsController; 
import org.springframework.web.servlet.ModelAndView; 

public class CachingSimpleGrailsController extends SimpleGrailsController { 

    private static final String HEADER_PRAGMA = "Pragma"; 
    private static final String HEADER_EXPIRES = "Expires"; 
    private static final String HEADER_CACHE_CONTROL = "Cache-Control"; 

    @Override 
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { 
     response.setHeader(HEADER_PRAGMA, "no-cache"); 
     response.setDateHeader(HEADER_EXPIRES, 1L); 
     response.setHeader(HEADER_CACHE_CONTROL, "no-cache"); 
     response.addHeader(HEADER_CACHE_CONTROL, "no-store"); 
     return super.handleRequest(request, response); 
    } 
} 

i musisz go zarejestrować w grails-app/conf/wiosna/resources.groovy zastąpić regularne Wiosna ziarno:

mainSimpleController(com.burtbeckwith.CachingSimpleGrailsController) { 
    grailsApplication = ref('grailsApplication', true) 
} 

Kod wspólnego zestawu nagłówków powinien zostać wyodrębniony do klasy narzędziowej zamiast kopiowania/wklejania, tak jak tutaj.

+0

Dzięki za szczegółową odpowiedź. Jak długo domyślnie buforowane są strony gsp? Ponadto - co poleciłbyś robić w środowisku produkcyjnym? – Emmett

2

Upewnij się, że działasz w trybie deweloperskim (np. Grails run-app, a nie grails test | prod run-app, testowanie i produkcja umożliwi buforowanie stron.) Jeśli jesteś w trybie deweloperskim, spróbuj przytrzymać przesunięcie klucz po kliknięciu odświeża Firefox

1

Jeśli chcesz po prostu wyłączyć pamięć podręczną w przeglądarce podczas rozwoju, można użyć Web Developer dodatek do Firefoksa:

https://addons.mozilla.org/en-US/firefox/addon/60

zainstalować ten dodatek na & wybrać „Wyłącz pamięć podręczną”. Pamiętaj, że wyłączymy buforowanie dla wszystkich stron.

15

Nie możemy użyć takiego filtra?

class CacheFilters{ 

    def filters = { 
     all(controller: '*', action: '*') { 
      before = { 
       ((HttpServletResponse) response).setHeader("Cache-Control", "no-store, no-cache, must-revalidate"); 
      } 
      after = { 

      } 
      afterView = { 

      } 
     } 
    } 

} 
+0

To jest o wiele bardziej rozsądne i proste rozwiązanie. –

+0

to powinna być właściwa odpowiedź! +1 człowiek!dobry! –

-1

Za jedyne cele rozwojowe spróbuj nacisnąć klawisze Ctrl + F5, będzie odświeżyć stronę i cache zbyt .. rzeczy buforowania w sprawie produkcji i poprawy wydajności wtyczki do wyszukiwania stron i wtyczek zasobów grails.

Powiązane problemy