서블릿3.0 비동기 기능

태량·2023년 7월 11일
0

@WebServlet(urlPatterns = "/hello", asyncSupported = true)

public class AsyncHelloWorldServlet extends HttpServlet {

private Logger logger = Logger.getLogger(getClass());

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException {

final AsyncContext asyncContext = req.startAsync();

new Thread(new Runnable() {

@Override

public void run() {

try {

Thread.sleep(5000);

} catch (InterruptedException e) {

}

HttpServletResponse response = (HttpServletResponse) asyncContext.getResponse();

response.setContentType("text/plain");

response.setCharacterEncoding("UTF-8");

try {

response.getWriter().println("HELLO");

} catch (IOException e) {

e.printStackTrace();

}

logger.info("complete response");

asyncContext.complete();

}

}).start();

logger.info("doGet return");

}

}

  1. 클라이언트로부터 요청이 들어오면 서블릿 컨텍스트 (WAS)는 url에 해당하는 서블릿을 찾고 하나의 쓰레드 T1에게 서블릿의 doGet() 메소드를 실행 시킨다.
  2. doGet() 메소드안에 또다른 T2의 쓰레드가 본인에게 주어진 로직을 수행한다.
  3. 여기서 중요한건 T1 쓰레드는 T2과는 별개로 서블릿 컨텍이너의 쓰레드풀로 반환된다.
profile
좋은 영향력과 교류를 위하여

0개의 댓글