2014-01-29 165 views
0

假設這種情況:我從瀏覽器(firefox)發送請求到我的服務器(apache tomcat)。響應來自服務器大約2分鐘後。我怎樣才能以我的服務器不會繼續響應的方式取消此請求?
當用戶向服務器發送請求時,通常會轉到應用程序的另一個鏈接(或菜單或取消請求),開發人員取消這種情況非常重要,因此減少服務器負載。
好吧,我想要一種技術來檢測發送到我的服務器的這樣的傳入請求,並取消所有爲客戶端做出響應的動作(因爲客戶端不再等待服務器響應)。
我在google和堆棧中找不到有用的信息。 我還設置了保持活動超時在我的server.xml,但什麼也沒有發生! 我也讀過這個主題cancle request,但它沒有幫助我。取消請求瀏覽器

所以,請幫我解決這個問題...

+0

對不起隊友,你不能做到這一點。一旦服務器代碼的骯髒的手在請求。 –

回答

0

您可以取消該請求發送內容到它的OutputStream(並衝)。 如果用戶取消請求,servlet將丟失與瀏覽器的連接,然後向輸出流發送內容將拋出ClientAbortException,從而導致進程停止。

試試這個:

protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    ServletOutputStream out = response.getOutputStream(); 
    try { 
     out.println("<!DOCTYPE html>"); 
     out.println("<html><body>"); 
     out.println("<h1 id=\"count\"></h1>"); 
     for (int i = 0; i < 60; i++) { 
      Thread.sleep(1000); 
      out.print("<script>document.getElementById(\"count\").innerHTML=\"" + i + "\";</script>"); 
      out.flush(); 
      System.out.println(i); 
     } 
     out.println("</body></html>"); 
    } catch (Exception ex) { 
     System.out.println("Stoped due to " + ex.toString()); 
    } finally { 
     out.close(); 
    } 
}