0
나는 다음과 같은 코드가 있습니다JavaEE 어플 asyncContext 객체는 파견 후 새 쓰레드를 생성
@WebServlet(urlPatterns="/Servlet1", asyncSupported=true)
public class Servlet1 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Servlet1 doGet ..");
AsyncContext ac = request.startAsync();
System.out.println(request.isAsyncStarted());
ac.dispatch("/Servlet2");
System.out.println("Servlet1 doGet after dispatch ..");
}
}
@WebServlet("/Servlet2")
public class Servlet2 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Servlet2 doGet ..");
}
}
주의 다음과 같은 출력 :
Servlet1 doGet ..
true
Servlet1 doGet after dispatch ..
Servlet2 doGet ..
공지 사항 지난 2 개 출력 라인을?
내가 (단지 앞으로 요청 디스패처처럼) 기다리고 있었다 ac.dispatch는 새로운 스레드를 생성 것처럼
Servlet2 doGet
Servlet1 doGet after dispatch ..
이 보인다.
이것에 대한 아이디어가 있으십니까?
감사합니다.
감사합니다. 두 번째 부분은 '이 메소드가 startAsync ..라는 컨테이너에서 시작한 디스패치 전에 호출되면'입니다. 제대로 읽는다면 디스패처 객체가 있고이 객체 (플러스 모든 다른 디스패처 객체)는 해당 컨테이너로 리턴해야합니다 이 특정 디스패치 코드가 asychnronous 모드에서 시작될 수 있으십니까? 나는이 권리를 얻었 는가? – yapkm01
@ yapkm01 제 이해는 : 요청을 다루는 원래 쓰레드 내에서'dispatch()'호출이 실행되었고 그 쓰레드가 처리를 완료하지 않았다면, 컨테이너는 요청을 처리하기 전에 그것이 끝나기를 기다립니다. AsyncContext. –
그래서 짧은 (내 코드를 기반으로) servlet1의 ac.dispatch()는 servlet1이 완료 될 때만 시작됩니다. 그렇지 않으면 servlet1이 완료 될 때까지 ac.dispatch()가 기다려야합니다. 의식? – yapkm01