0

我有一个 tomcat6 servlet,它以这种方式管理传入的 HttpPosts:

public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        if (request.getParameter("cmd") != null) {
        eventPool.addEvent(new CommandEvent(new String[] { request.getParameter("cmd"),
                request.getParameter("json") }, response));
    }
}

现在将处理该请求。完成后,我想以这种方式将结果写入请求客户端:

protected void sendResponse(HttpServletResponse httpResponse, String content){
    try {
        httpResponse.getWriter().println(CMD + "#" + content);
        httpResponse.getWriter().close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

但它无法刷新,我得到一个 NullPointerException 因为 HttpResponse 已经关闭。

如何防止 HttpResponse 在我想要之前刷新?

4

1 回答 1

0

您需要使用 Tomcat 7(或任何其他支持 Servlet 3.0 及更高版本的容器)来使用这种编程风格。查看 Servlet 3.0 规范的异步请求处理部分。

在 Servlet 3.0 之前,请求/响应处理是同步的。即,您不能“停放”请求/响应对,然后稍后在不同的线程中处理它们。几乎只要您的 doPost() 方法退出,Tomcat 就会回收请求和响应对象,准备使用它们来处理新请求。

于 2012-08-14T21:33:25.920 回答