【发布时间】:2014-03-29 08:44:12
【问题描述】:
我很少尝试一些 HttpServlet 的东西来更好地理解它。我想构建一个请求传入的场景,我需要尽可能快地相应地发送响应,然后在 servlet 中做更多的工作。根据我目前的理解,只有在 doGet 或 doPost 方法返回时才应将响应发送给客户端。但从我的示例中,响应已经在 servlet 中的命令处理过程中发送回客户端。所以它已经在我没想到的时候被退回了。
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
Thread.sleep(500);
} catch (InterruptedException ex) {
Logger.getLogger(DisplayHeader.class.getName()).log(Level.SEVERE, null, ex);
}
response.setContentType("text/plain; charset=ISO-8859-1");
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
final StringWriter sw = new StringWriter();
PrintWriter out = new PrintWriter(sw);
//TODO most be implemented SynchronizedStatusCodeDimo
out.println("StatusCode=0");
out.println("StatusText=Accepted");
out.println("paymentType=PaymentXY");
out = response.getWriter();
out.print(sw.toString());
out.flush();
out.close();
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(DisplayHeader.class.getName()).log(Level.SEVERE, null, ex);
} }
这里发生了什么,通过 Firebug 我看到我已经收到了 510 毫秒后生成的响应。由于睡眠,我认为我需要超过 1500 毫秒。我的理解是基于这里的这篇文章:Link
【问题讨论】:
-
这里有什么问题?那个 flush() 刷新?或者 close() 关闭?为什么会有这么大的惊喜?
-
我们能否在 request1 成功回调后不从客户端响应 request2。并且请求 2 可以根据 request1 的响应做进一步的处理..
-
是的,也许根本没有问题,我一开始只是错了,并期待在 Servlet 中完成所有操作后得到响应(所以当 doGet/doPost 返回时),不像正在处理中。
标签: java httpresponse