我很少嘗試一些HttpServlet的東西來更好地理解它。我想構建一個請求傳入的場景,我需要相應地儘快發送響應,並稍後再處理servlet中的一些工作。根據我目前的理解,只有在doGet或doPost方法返回時纔會將響應發送給客戶端。但是從我的例子來看,響應在servlet中的命令處理過程中已經發送回客戶端。所以它在我沒有預料到的時候已經回來了。Java - HttpServlet:什麼時候發送給客戶端?
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);
} }
這到底是怎麼發生的,通過螢火我看到,我已經收到了510ms後生成的響應。因爲睡覺,我覺得我需要1500ms以上的時間。我的理解是基於這個職位:Link
這裏有什麼問題?該flush()刷新?或者關閉()關閉?爲什麼這樣的驚喜? – EJP
成功回調request1後,我們能不能從客戶端發起請求2。並且請求2可以根據request1響應做進一步的處理。 –
是的,也許根本沒有任何問題,我首先得到它只是錯誤,並期待在Servlet中完成所有事情之後的響應(所以當doGet/doPost被退回),而不是在這裏處理中。 – fryk9