2012-09-10 2 views
0

내 서블릿에 대한 요청을 거부하거나 응답하지 않을 수 있습니까? 동일한 스레드에서 100 밀리 초 내에 두 개의 요청을받는다면 두 번째 요청을 완전히 무시할 수 있습니까? 또는 첫 번째 요청을 중단하고 두 번째 요청 만 처리 할 수 ​​있습니까?거의 동시 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 
     } 
    } 

스레딩은 재미있다,하지만 당신은 정말이 당 스레드 원하거나 전역 속성 (응용 프로그램 서버가 당신을 도와 배후 스레드 작업을 꽤 할) 당신이 원하는해야합니까? 위의 샘플은 전역이지만 스레드에 잠금을 설정하려는 경우 LOCK_OBJECT를 ThreadLocal 객체로 바꿀 수 있습니다.

행운을 비네.