-
서블릿은 request,response객체를 쉽게 조립, 완성하도록 해주는 java의 기술(클래스)
-
만약 개발자가 이를 직접 개발해야 한다면 의미있는 비즈니스 로직 외에 너무 많은 개발 로드
- 그래서 서블릿이 등장하고, 핵심에서 벗어난 개발로드를 서블릿이 간편하게 처리
- 이후 등장한 Controller는 내부적으로 서블릿 기능을 사용하여 사용자 요청을 더 간편하게 처리
-
서블릿을 통한 사용자 요청 처리

- urlPatterns(/hello)의 URL이 호출되면 서블릿 코드가 실행
- HTTP 요청/응답 정보를 쉽게 사용할 수 있는 HttpServletRequest와 HttpServletResponse 객체 생성
- HttpServletRequest객체
- ServletRequest인터페이스 상속
- 클라이언트 요청 데이터에 접근하는 메서드를 제공
- 사용자의 http 요청 header, body 등을 담고 있는 객체
- HttpServletResponse객체
- ServletResponse상속
- 해당객체에 응답값에 필요한 값만 세팅해주면 http스펙에 맞게 서블릿이 간편히 사용자에게 응답값 전달
-
WebServlet와 Controller의 차이
- webservlet 어노테이션
- class단위로만 url을 지정해야 함
- 기존의 url 맵핑은 web.xml을 사용하여 별도 매핑 파일을 만들어야 했으나, servlet 3.0이후부터는 어노테이션으로 대체 가능
- Controller
- 클래스 뿐만아니라, 메서드 단위로도 url지정가능
- Spring MVC에서의 모든 요청은 Servlet에 매핑하고 있으므로, 서블릿 기술은 Controller의 근간이고, Controller는 더 많은 편의를 제공
- 서블릿(Servlet) 기술은 코드상에서 사용하는 방식만 달라졌을 뿐 Spring MVC 및 RESTful API 서비스를 개발하는 데 중요한 근간이 되는 기술
-
서블릿컨테이너

- 서블릿 컨테이너는 서블릿객체를 생성, 초기화, 호출, 종료하는 생명주기 관리
- 정적 리소스는 Webserver에서 처리하고, WebApplicationServer(웹애플리케이션서버)에서 동적 리소스 처리
- 스프링부트는 tomcat프로그램을 was로 사용하고, 이 was는 서블릿 컨테이너 역할 수행하고 있다고 볼수 있음
- DispatcherServlet
- SpringMVC에서 핵심적인 역할을 수행하는 애플리케이션의 모든 요청을 처리하는 중앙 집중식 컨트롤러
- DispatcherServlet은 싱글톤으로 생성하여 재사용
- DispatcherServlet은 웹 요청을 받을때 요청정보를 담은 HttpServletRequest와 HttpServletResponse 객체를 생성
- HttpRequest, Response관련 서블릿 객체들은 매 요청마다 생성하여 스레드를 할당하여 작업수행
- 이후 작업은 Handler에 위임하여 비즈니스 로직 처리를 완료한뒤 response객체를 사용자에게 return