2012-08-14 111 views
0

我有一个管理传入HttpPosts这种方式的tomcat6的servlet:如何通过HttpServletResponse的其他线程

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在我需要之前刷新?

回答

0

您需要使用Tomcat 7(或任何其他支持Servlet 3.0的容器)才能使用该类型的编程。查看Servlet 3.0规范的异步请求处理部分。

在Servlet 3.0之前,请求/响应处理是同步的。即你不能'停放'一个请求/响应对,然后在另一个线程中处理它们。只要您的doPost()方法退出,Tomcat就会回收请求和响应对象,以便使用它们来处理新的请求。

+0

Tomcat 6没有实现异步处理,因为Tomcat 6实现了Servlet规范的版本2.5,并且在Servlet 3.0之前没有添加异步请求处理。 为了回应那些花费大量时间在Tomcat 6上工作并继续在当前所有Tomcat版本上工作的人的有用答案,不会鼓励进一步的帮助。 – 2012-08-15 20:30:53