我有一个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();
}
}
但它无法刷新并且我得到NullPointerException,因为HttpResponse已经关闭。
如何在我想要之前阻止HttpResponse冲洗?
答案 0 :(得分:0)
您需要使用Tomcat 7(或任何其他支持Servlet 3.0的容器)来使用这种编程风格。查看Servlet 3.0规范的异步请求处理部分。
在Servlet 3.0之前,请求/响应处理是同步的。即你不能“停放”一个请求/响应对,然后在另一个线程中处理它们。几乎只要你的doPost()方法退出,Tomcat就会回收请求和响应对象,准备使用它们来处理新的请求。