我正在修改/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