我要制作流式传输。我有.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,我希望有无限的开放请求)
我错在哪里,如果没有加载浏览器,如何才能发出此永久请求?
P.S。我试图直接从url(localhost ... / simple)访问我的servlet,然后我看不到页面上打印的内容。它一直装载到永远。
答案 0 :(得分:1)
你正试图实现不可能的事。
浏览器将显示页面正在加载,直到它知道它已通过以下方法之一收到完整请求:
由于您需要“无限”响应,因此上述三个选项都不会发生。