Java Servlet 3.0包含html页面

Java Servlet 3.0包含html页面,java,html,servlets,include,asynchronous,Java,Html,Servlets,Include,Asynchronous,我尝试使用Servlet 3.0 API实现以下行为: 发送初始html页面 发送更新页面的后续响应 这一切工作,除了唯一的方法,我可以发送初始页面,而不得到响应提交是通过手动编写使用HttpResponse编写器 我想知道是否有一种方法可以在html页面中使用类似于RequestDispatcher#include的东西,而不会在AsyncContext中遇到问题。有些事情我一直尝试到现在都没有成功: 使用AsyncContext#dispatch:正如我在Internet上读到的一样,

我尝试使用Servlet 3.0 API实现以下行为:

  • 发送初始html页面
  • 发送更新页面的后续响应
这一切工作,除了唯一的方法,我可以发送初始页面,而不得到响应提交是通过手动编写使用HttpResponse编写器

我想知道是否有一种方法可以在html页面中使用类似于RequestDispatcher#include的东西,而不会在AsyncContext中遇到问题。有些事情我一直尝试到现在都没有成功:

  • 使用AsyncContext#dispatch:正如我在Internet上读到的一样,它注定要向容器发送最终响应以呈现它
  • 使用RequestDispatcher#forward:由于尝试在OutputStream中写入更多内容而获取非法状态异常
  • 使用RequestDispatcher#include:如果在调用此方法之前初始化AsyncContext,request.isAsyncSupported将返回true,在调用此方法后,将返回false。我了解到它调用flushBuffer()并在响应中将提交标志设置为true
另外,在Servlet3.0规范中,有几行提到从异步Servlet到普通Servlet的调度是可能的,但会提交答案。我相信静态html页面属于这一类

如果您对如何在不影响将流式响应发送回客户的能力的情况下完成优雅的包含有任何想法,请让我知道


感谢一个解决方案(不是唯一的):如果它只是一个html页面,那么就用html编写html页面本身,并对需要提供更新的serrvlet进行ajax调用。

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

或者,您也可以使用response.setHeader(“refresh”,“5;URL=officer.html”)以这种方式简单地刷新整个页面


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

谢谢您的回答。我试图专门使用Servlet3.0API来实现服务器推送。因此,我只能发送异步响应。这将是对servlet的一次调用,servlet将返回多个响应(这是通过不提交响应,只是刷新响应来实现的)。但是有comet实现!也许值得一看