2011-06-08 79 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。如有疑问,请始终选择不缓存,然后逐步引入缓存!