(서블릿은 스프링과 관련이 없음?)
스프링 부트가 톰캣 서버를 내장하고 있음
톰캣 서버 설치 없이 서블릿 코드 작성 가능
@ServletComponentScan
스프링 부트가 서브릿을 자동 등록
@WebServlet
HTTP 요청 url과 urlPatterns가 맞은 서블릿을 찾아서
protected void service(HttpServletRequest request, HttpServletResponse response)
매핑된 서블릿의 해당 메서드를 실행
HttpServletRequest, HttpServletresponse는 interface다.
WAS도 여러 가지(Tomcat, Jetty 등)가 있는데 이러한 vendor(?)들이 Servlet의 표준 spec을 구현한다.
얘는 Tomcat이 구현한 HttpServletRequest다.
https://www.programcreek.com/2013/04/what-is-servlet-container/
WAS는 Web Server + WebC Container(Servlet Container)로 되어있다.
Web Server를 통해 정적 리소스를 제공하고 동적 데이터가 필요하면 경우 Web Container로 요청을 보내 해당 요청을 처리(비지니스 로직 실행)하고 동적으로 데이터를 생성해서 응답으로 보낸다.
자바는 웹 구현 기술로 Servlet을 사용하고 Servlet을 관리하고 jsp 파일을 실행하게 해주는 것이 Servlet Container다.
Servlet Container가 Servlet 객체를 생성
클라이언트로부터 http 요청이 오면 Serlvet Container가 http 요청 메시지 작업을 파싱하고 HttpServletRequest, Response 객체를 생성한다.
(HTTP 스펙에 맞춰서 요청, 응답을 다 만드려면 너무 힘들다. Servlet 기술은 HTTP 요청, 응답을 알아서 파싱해서 우리가 쓰기 좋게 만들어준다)
생성한 HttpServletRequest, Response 객체를 요청과 매핑된 Servlet 객체의 service 메소드를 호출하면서 파라미터로 넘겨준다.
로직 실행 후 Response 객체에 응답 결과를 담고 Servlet Container에 전달
Servlet Container가 응답 메세지 생성 후 클라이언트에게 전달