【发布时间】:2011-03-07 16:33:21
【问题描述】:
我正在尝试使用 Servlet 3.0 API 实现以下行为:
- 发送初始 html 页面
- 发送更新页面的后续响应
这一切都有效,除了我可以发送初始页面而不提交响应的唯一方法是使用 HttpResponse Writer 手动编写...
我想知道是否有一种方法可以在 html 页面中使用类似于 RequestDispatcher#include 的内容,而不会遇到 AsyncContext 的问题。到目前为止我尝试过的一些事情并没有奏效:
- 使用AsyncContext#dispatch:据我在网上看到的,它注定是为了将最终响应发送到容器以进行渲染
- 使用 RequestDispatcher#forward:由于尝试在 OutputStream 中写入更多内容而出现 IllegalStateException
- 使用RequestDispatcher#include:如果我在调用该方法之前初始化AsyncContext,request.isAsyncSupported返回true,调用该方法后返回false。我读到它调用了 flushBuffer() 并在响应中将提交标志设置为 true
此外,在 Servlet 3.0 规范中,有几行提到从异步 servlet 分派到普通 servlet 是可能的,但会提交答案。我相信静态 html 页面属于这一类...
如果您对如何在不影响仍将流式响应发送回客户端的能力的情况下完成优雅的包含有任何想法,请告诉我。
谢谢
【问题讨论】:
标签: java html servlets include asynchronous