2011-06-08 72 views
2

嗨,我有一個Google Web Toolkit項目。我想使用GWT:response.setHeader - howto?

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); 

但我不知道熱在GWT中設置標題。我有這樣的「啓動器」應用程序:

public class Starter extends HttpServlet { 

    @Override 
    public void init() throws ServletException { 
     //do something  
    } 
} 

但我怎麼能訪問「反應」?我需要一個「HttpServletResponse」。但是,我應該如何以及在哪裏放?我看到了這個請求:Client side caching in GWT,它和我的一樣,但它沒有幫助。

謝謝

+0

HttpServletResponse可用作doGet()/ doPost()方法中的參數。 init()方法並不是Servlet中實際工作的方法! – 2011-06-08 20:51:46

回答

0

是否使用GWT AJAX(AsyncCallback的等)?

如果您只是將您的GWT模塊嵌入到現有的JSP中,並通過AJAX調用服務器端方法,那麼您無權訪問響應對象。 GWT框架負責將請求作爲XmlHttpRequest發送並返回並重新繪製瀏覽器DOM。您對響應沒有細緻的控制。

+0

是的即時通訊使用gwt ajax,但我不知道你的文本中的其餘部分是什麼意思:) – Lissy 2011-06-08 19:51:44

0

一個選項可以設置一個過濾器,以便您的請求通過它。您可能可以更改響應標題。

1

我寫了一個答案here,這也解釋瞭如何設置使用過濾器頭(我的示例代碼應在所有的servlet容器的工作,如Tomcat,Jetty的,...)

這既可以靜態應用文件(如果你從你的Servlet容器中提供它們)以及你的Servlet(只要確保過濾器適用於你的Servlet的相同的路徑 - 那麼你的過濾器將「包裝」Servlet。比直接將標題代碼放入您的Servlets中更方便,這也可以在您的doGet()doPost()方法中使用。)

另一個選擇是將一個reverse proxy服務器放在Web服務器的前面,並讓它根據請求URI添加緩存頭(或者可能針對所有POST請求等)。

使用GWT,這非常重要以確保爲不同的資源設置了正確的緩存標頭 - 請參閱我的問題here。如有疑問,請始終選擇不緩存,然後逐步引入緩存!