서블릿(servlet)이란
- 자바 웹 어플리케이션의 구성 요소 중 JAVA 언어를 사용하여 동적인 처리를 하는 역할을 담당한다. 서블릿(servlet)은 WAS에 동작하는 JAVA 클래스이며,
HttpServlet을 상속받는다.
Spring을 사용하지 않을 경우, 주소마다 Servlet 객체를 생성해주고, web.xml에 각각 매핑해주어야 한다. 이때 접속하는 페이지(메뉴, 로그인, 관리자 페이지 등)가 많으므로 한 프로젝트에 너무 많은 서블릿 객체가 생성되게 된다.
이를 해결하기 위해 DispatcherServlet이 모든 요청을 받고, 각각 해당하는 Controller을 연결해주는 프론트 컨트롤러의 역할을 함으로써, web.xml에 서블릿을 일일히 등록할 필요가 없어졌다. 또한 공통적으로 처리해주어야하는 일들을 DispatcherServlet으로 간단히 처리할 수 있게 되었다.
💡 HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러 (Front Controller)
즉, 모든 요청을 받아 처리할 컨트롤러를 찾아 위임하고, 처리 결과를 응답해주는 역할
- 처리 순서
- 클라이언트로부터 어떤 요청이 들어오면 서블릿 컨테이너(ex. 톰캣)이 요청을 받는다.
- 이때 공통 작업은 DispatcherServlet에서 처리하고
- 이외 작업은 적절한 세부 컨트롤러로 위임한다.
- 특징
- Front Controller, 즉 주로 서블릿 컨테이너의 제일 앞에서 서버로 들어오는 클라이언트의 모든 요청을 받아서 처리해주는 컨트롤러이다.
- DispatcherServlet도 Servlet이다. DispatcherServlet -> FrameworkServlet -> HttpServletBean ->
HttpServlet상속 구조를 갖고 있다.
- 장점
-
서블릿을 web.xml에 모두 등록해줄 필요가 없다.
과거에는 모든 서블릿을 URL 매핑을 위해 web.xml에 모두 등록해주어야 했지만, dispatcher-servlet이 해당 어플리케이션으로 들어오는 모든 요청을 핸들링해주고 공통 작업을 처리면서 상당히 편리하게 이용할 수 있게 되었다.
-
공통 요청 사항을 컨트롤할 수 있다.
사용자의 모든 요청에 대한 인코딩 처리, 에러페이지 처리 등을 한 곳에서 처리할 수 있다.
-
역할
HandlerMapping: Request를 분석하여 해당되는 Controller를 찾는다.HandlerAdapter: 결정된 Controller의 메서드를 호출한다.ViewResolver: 해당하는 view를 선택하여 리턴한다.
동작 과정
- 클라이언트의 요청을
DispatcherServlet이 받음 HandlerMapping으로 요청을 위임할Controller를 찾음HandlerAdapter가 결정된Controller로 요청을 위임함- 비지니스 로직을 처리함 (Controller -> Service -> Repository 동작)
- 로직 처리 결과를 리턴
HandlerAdapter가Controller실행결과를 ModelAndView로 변환해서DispatcherServlet에 리턴함ViewResolver객체를 이용해서 결과를 보여줄 뷰를 검색한다ViewResolver가 리턴한 View객체에게 응답 결과 생성을 요청한다.- 서버의 응답을 클라이언트로 반환함
- JSP일 경우, View 객체는 JSP를 실행함으로서 브라우저에게 전송할 응답 결과를 생성한다.
Reference

