Pergunta

Estou fazendo modificações para /grails-app/views/index.gsp.

Quando eu salvo o arquivo e refresco http: // localhost: 8080/index.gsp No Firefox, estou recebendo uma versão antiga do arquivo.

Existe uma maneira de impedir que o Grails cache e renderize versões antigas do arquivo?

(Tentei reiniciar o servidor e limpar o cache do Firefox.)

Obrigado!

Foi útil?

Solução

Não parece haver uma maneira simples de fazer isso, mas não é muito trabalho. Minha solução subclasse o servlet que renderiza os GSPs (e também o controlador usado para solicitações não-GSP).

Aqui está a subclasse do 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);
   }
}

e você precisará substituir o original no web.xml (execute "grails install-templates" e edite src/modsates/war/web.xml):

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

E você provavelmente também desejará fazer o mesmo para respostas baseadas em controlador, para fazer isso, use esta subclasse do controlador:

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

E você precisará registrá-lo em Grails-App/Conf/Spring/Resources.groovy para substituir o feijão da primavera regular:

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

O código de definição de cabeçalho compartilhado provavelmente deve ser extraído para uma classe de utilidade em vez de ser copiado/colado como eu.

Outras dicas

Não podemos usar um filtro como este?

class CacheFilters{

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

            }
            afterView = {

            }
        }
    }

}

Há um plug -in para controlar o comportamento do cache em graxos chamados cabeçalhos de cache:http://grails.org/plugin/cache-deaders

Certifique-se de que você esteja executando no modo dev (ou seja, grails run-app e não em teste de graals | pic run-app, teste e produção permitirão o armazenamento em armazenamento nas páginas. Se você estiver no modo dev, tente manter a tecla Shift ao clicar no Atualização do Firefox.

Se você simplesmente deseja desativar o cache do seu navegador durante o desenvolvimento, pode usar o desenvolvedor da web adicionar para o Firefox:

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

Instale isso Adicionar e escolha "Desativar o cache". Lembre -se, isso desativará o armazenamento em cache para todos os sites.

Para fins apenas de desenvolvimento, tente pressionar Ctrl+F5, ele também atualizará a página e o cache. Para armazenar em cache as coisas na produção e melhorar o desempenho do plug-in de desempenho da pesquisa de página e pluitos de grails.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top