1

我要做流媒体。我有 .jsp 文件,在 .jsp 文件的末尾,我使用以下代码包含了我的 Async Servlet:

<jsp:include page = '/simple' flush = 'true' />

因此,我希望在加载整个页面时打开一个无限的异步请求,该请求将处理异步响应。

这是我的 Servlet 代码:

public class SimpleAsyncServlet extends HttpServlet {
    public static AsyncContext ctx;
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        req.setAttribute("org.apache.catalina.ASYNC_SUPPORTED", true);
        ctx = req.startAsync();
        ctx.setTimeout(0);
    }
}

从其他 java 类中,我使用静态 SimpleAsyncServlet.ctx.getResponse.getWriter() 将一些 javascript 代码打印到当前页面。它工作没有任何问题,但浏览器一直显示它正在加载。根据异步想法页面应该被加载并且这个异步请求应该在后台保持活动状态并且..就是这样,但是没有..浏览器一直加载页面直到永远(超时为0,因为我想要无限打开请求)

我在哪里错了,如何在不加载此浏览器的情况下发出此永久请求?

PS 我试图直接从 url (localhost.../simple) 访问我的 servlet,然后我在页面上看不到任何内容。它一直加载到永远。

4

1 回答 1

1

你正在努力实现不可能。

浏览器将显示页面正在加载,直到它通过以下方法之一知道它已收到完整请求:

  • 它已收到 Content-Length 标头中规定的字节数
  • 连接关闭
  • 它在使用分块编码时收到了一个结束块

由于您想要“无限”响应,因此上述三个选项都不会发生。

于 2012-05-07T20:22:43.573 回答