2010-06-24 106 views
0

我试图使用servlet 3.0 API实现以下行为:的Servlet 3.0包含HTML页面

  • 发送inital HTML页面
  • 发送更新页面

后续响应除了唯一可以发送初始页面而没有得到响应的唯一方式是通过使用HttpResponse Writer进行手动书写...

我很好如果有一种方法可以使用类似于RequestDispatcher#include和HTML页面的方式,而不会遇到AsyncContext的问题。有些事情我试着到现在为止,并没有工作:

  • 使用AsyncContext#调度:就像我在互联网上阅读时,就注定了以使其
  • 发送最终响应的容器
  • 使用RequestDispatcher#forward:由于尝试在OutputStream中写入更多内容而导致IllegalStateException
  • use RequestDispatcher#include:如果我在调用此方法之前初始化AsyncContext,request.isAsyncSupported返回true,调用该方法后返回false 。我读它调用flushBuffer(),并将提交标志为true的响应

而且,在Servlet 3.0规范也有一些线路提的是异步的servlet正常的servlet调度是可能的,但将提交回答。我相信一个静态的HTML页面属于这个类别...

如果你有任何想法如何可以完成优雅包括而不影响仍然发送流回应客户端的能力,请让我知道。

感谢

回答

0

一个解决方案(不是唯一的一个):如果它只是一个HTML页面,然后写html页面本身的HTML和做需要提供更新serrvlet Ajax调用。

+0

感谢您的回答。我试图专门使用Servlet 3.0 API来实现服务器推送。所以,我只能发送异步响应。这将是对servlet的一次调用,并且该servlet将返回多个响应(这是通过不提交响应来实现的,只是将其刷新)。 – fmoga 2010-06-24 08:36:10

+0

我还没有玩过异步API。但有https://atmosphere.dev.java.net/彗星实施!也许值得一看 – Redlab 2010-06-24 09:22:19

0

在页面上使用静态元素存储数据并使用requestdispatcher。

或者你也可以只使用response.setHeader(“refresh”,“5; URL = officer.html”)来简单刷新整个页面。

我真的不明白你需要发送多个请求而没有将响应提交给servlet。你是否尝试多次与服务线程交互?