【发布时间】:2012-05-08 04:22:43
【问题描述】:
我要制作流媒体。我有 .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,因为我想要无限打开请求)
我哪里错了,如何在不加载此浏览器的情况下发出此永久请求?
附:我试图直接从 url (localhost.../simple) 访问我的 servlet,然后我看到页面上没有打印任何内容。它会一直加载到永远。
【问题讨论】:
-
我已经纠正了。它是flush ='true'。我有:@javax.servlet.annotation.WebServlet( // servlet name name = "simple", // servlet url pattern value = {"/simple"}, // 需要异步支持 asyncSupported = true);而且我也试过 req.startAsync(req, res);没有任何帮助。