2012-09-10 64 views
0

是否可以拒絕對我的servlet的請求或不響應它?假如我在100毫秒內在同一個線程上收到2個請求,我可以完全忽略第二個請求嗎?或者是否可以中止第一個請求並僅處理第二個請求?幾乎同時HTTPServletRequests

回答

0

要拒絕後續請求,您需要在第一個時間段內記錄您願意處理的第一個請求的時間(對於任何請求返回錯誤的響應,而不是響應等)。 如:

private static final Object LOCK_OBJECT = new Object(); 
    private static long lastAokTime; 
    private static final long MIN_REQUEST_TIME_MILLIS = 100L; 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    { 
     synchronized(LOCK_OBJECT) { 
     final long now = System.currentTimeMillis(); 
     if (lastAokTime == 0 || (now - lastAokTime < MIN_REQUEST_TIME_MILLIS)) { 

      // reject the request 
      response.setStatus(500); // perhaps? 
      return;    
     } else { 
      lastAokTime = now; 
     } 

     // carry on and process request 
     } 
    } 

線程是有趣的,但你真的希望它的每線程或者你想把它當作一個全球性的屬性(應用服務器做了不少幕後工作線程的幫助你)?上面的示例是全局的,但如果要將其鎖定到線程,則可以使用ThreadLocal對象替換LOCK_OBJECT。

祝你好運。