我正在修改/grails-app/views/index.gsp。如何防止Grails缓存旧版本的gsp文件?
当我在Firefox中保存文件并刷新http://localhost:8080/index.gsp时,我收到了旧版本的文件。
有没有办法阻止Grails缓存和渲染旧版本的文件?
(我试过重新启动服务器并清除Firefox的缓存。)
谢谢!
我正在修改/grails-app/views/index.gsp。如何防止Grails缓存旧版本的gsp文件?
当我在Firefox中保存文件并刷新http://localhost:8080/index.gsp时,我收到了旧版本的文件。
有没有办法阻止Grails缓存和渲染旧版本的文件?
(我试过重新启动服务器并清除Firefox的缓存。)
谢谢!
似乎并没有一种简单的方法可以做到这一点,但它并没有太多的工作,我的解决方案的子类是呈现GSP的servlet(以及用于非GSP的控制器。请求)
这里的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);
}
}
,你就需要更换原来在web.xml(运行“的Grails安装模板”和编辑的src /模板/战争/ web.xml中):
<servlet>
<servlet-name>gsp</servlet-name>
<servlet-class>com.burtbeckwith.CachingPageServlet</servlet-class>
</servlet>
和你可能也想做基于控制器的反应一样,所以要做到这一点,使用这个控制器子类:
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);
}
}
,你就需要在grails-app/conf目录/弹簧将其注册/ resources.groovy覆盖普通的Spring豆:
mainSimpleController(com.burtbeckwith.CachingSimpleGrailsController) {
grailsApplication = ref('grailsApplication', true)
}
共享的头文件设置代码可能应该被提取到工具类中,而不是像我在这里那样进行复制/粘贴。
确保你在开发模式下运行(例如,grails run-app,而不是grails test | prod run-app,测试和生产将启用页面的缓存,如果你处于开发模式,点击火狐浏览器刷新时的关键点
如果你只是想禁用缓存为您的浏览器而开发,你可以使用Web开发人员添加对Firefox:
https://addons.mozilla.org/en-US/firefox/addon/60
安装此插件在&选择“禁用缓存”。请记住,这将禁用所有网站的缓存。
我们不能使用这样的过滤器吗?
class CacheFilters{
def filters = {
all(controller: '*', action: '*') {
before = {
((HttpServletResponse) response).setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
}
after = {
}
afterView = {
}
}
}
}
这是一个更加理智和简单的解决方案。 – 2013-08-01 15:26:20
这应该是正确的答案! +1男子!一个好的! – 2014-11-04 07:30:27
有用于Grails中称为缓存头控制缓存行为插件: http://grails.org/plugin/cache-headers
对于刚刚发展的宗旨尝试按CTRL + F5,将刷新页面,缓存太..缓存的东西在生产和改善页面查找UI性能插件和grails资源插件的性能。
感谢您的详细解答。 gsp页面默认缓存多久?另外 - 你会推荐为生产环境做些什么? – Emmett 2009-08-31 22:35:46