Servlets 如何将HttpServletResponse传递给其他线程

Servlets 如何将HttpServletResponse传递给其他线程,servlets,httpresponse,Servlets,Httpresponse,我有一个tomcat6 servlet,它通过以下方式管理传入的HTTPPOST: public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if (request.getParameter("cmd") != null) { eventPool.addEvent(new Co

我有一个tomcat6 servlet,它通过以下方式管理传入的HTTPPOST:

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();
    }
}
现在将处理该请求。完成此操作后,我希望通过以下方式将结果写入请求客户端:

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刷新?

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


在Servlet3.0之前,请求/响应处理是同步的。i、 e.您不能“停放”请求/响应对,然后稍后在另一个线程中处理它们。只要doPost()方法退出,Tomcat就会回收请求和响应对象,以便使用它们来处理新请求。

Tomcat 6不实现异步处理,因为Tomcat 6实现了Servlet规范的2.5版,并且直到Servlet 3.0才添加异步请求处理。有人花了很多时间在Tomcat 6上,并继续在所有当前的Tomcat版本上工作,他给出了一个有用的答案,而对Tomcat 6嗤之以鼻,这不会鼓励进一步的帮助。