2013-03-16 2 views

답변

6

자바 서블릿 3.0 유지 관리 릴리스가 읽

이 메소드를 호출 - ServletRequest.startAsync(ServletRequest req, ServletResponse res)은 - 응답이 커밋되지 않도록 할 때 서비스 방법 중 응용 프로그램이 종료됩니다. 반환 된 AsyncContext에 AsyncContext.complete가 호출되거나 또는 AsyncContext가 시간 초과되고 시간 제한을 처리하는 리스너가 없을 때 커밋됩니다. 비동기 시간 제한을위한 타이머는 요청과 관련 응답이 컨테이너에서 반환 될 때까지 시작되지 않습니다. 비동기 스레드에서 응답에 쓰는 데 AsyncContext를 사용할 수 있습니다. 또한 응답이 닫히고 커밋 된 이 아니라는 것을 알리는 데에도 사용할 수 있습니다.

the javadoc of the javax.servlet.AsyncContext interface에서 :

경우에 비동기 작업이 시간 초과했다고는 컨테이너는 다음 단계를 실행해야합니다

  1. 호출, 자신의 onTimeout 방법에서, 모든 AsyncListener을 이 비동기 작업을 시작한 ServletRequest에 등록 된 인스턴스.
  2. complete() 또는 dispatch() 메서드를 호출 한 리스너가없는 경우 상태 코드가 이고 HttpServletResponse.SC_INTERNAL_SERVER_ERROR 인 오류 디스패치를 ​​수행하십시오.
  3. 것은 일치 오류 페이지를 찾을 수 없습니다, 또는 오류 페이지 (전체) 또는 파견의() 메소드를 호출) (완전 호출하지 않은 경우. "

마지막 행 위입니다 대부분의 중요성 - AsyncContext.complete()에 대한 호출이있을 것 The javadoc says :.

이 AsyncContext를 초기화하는 데 사용 된 응답 를 폐쇄,이 AsyncContext을 initialze하는 데 사용 된 요청 에 시작된 비동기 작업을 완료

닫으면 대부분의 메서드 호출은 IllegalStateException을 반환합니다.

+0

답장을 보내 주셔서 감사합니다 .-) – xwinus

+0

@xwinus 응답이 마음에 들면 승인하십시오. –

+0

@JacekLaskowski : +1. 나는 또한 당신이 간접적으로 포스터에게 다른 질문 [여기] (http://stackoverflow.com/questions/15228031/java-lang-illegalstateexception-not-suspended-when-asynccontextcomplete)에 답변했다고 생각합니다! – brainOverflow