
Dispatch Servlet은 Spring mvc에서 모든 요청을 받아 컨트롤러 -> 서비스 -> 뷰로 흐름을 조율하는 중앙 관제탑이다.
클라이언트 요청을 받아 어떤 컨트롤러가 처리할지 결정하고, 결과를 화면(view)으로 연결해 주는 중심 허브라고 생각하면 된다.자바 서블릿은, 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말한다.
자바 기반 웹 어플리케이션 개발을 위한 스프링 프레임워크의 핵심 모듈로 MVC(Model, View, Controller)로 되어 있고 디자인 패턴을 기반으로 클라이언트의 요청을 효율적으로 처리하고 화면을 구성하는 역할을 한다.

역할
동작과정
Client 요청
DispatcherServlet이 요청 수신
HandlerMapping
-이 URL을 처리할 Controller가 누군이지 찾음
Controller 실행
-비즈니스 로직 수행(service 호출 등)
ModelAndView 반환
-데이터(Model) + 화면이름(View)
ViewResolver
-실제 JSP/Thymleaf/HTML 파일 위치 찾기
7.View 렌더링
8.Response 반환
Spring이 없는 JAVA 런타임에서는 컨트롤러가 존재하지 않는다. 따라서 우리는 서블릿 객체를 생성하고, 그것을 web.xml에다 일일히 다 등록해줘야했다.
<!-- 서블릿1 등록 -->
<servlet>
<servlet-name>서블릿1</servlet-name>
...
</servlet>
<servlet-mapping>
<servlet-name>서블릿1</servlet-name>
...
</servlet-mapping>
<!-- 서블릿2 등록 -->
<servlet>
<servlet-name>서블릿2</servlet-name>
...
</servlet>
<servlet-mapping>
<servlet-name>서블릿2</servlet-name>
...
</servlet-mapping>
<!-- 서블릿3 등록 -->
<servlet>
<servlet-name>서블릿3</servlet-name>
...
</servlet>
<servlet-mapping>
<servlet-name>서블릿3</servlet-name>
...
</servlet-mapping>
하지만 웹 사이트를 이용했다면, 우리가 접속하는 페이지는 한두개가 아니고 메뉴페이지, 로그인 페이지, 관리자 페이지 등 최소 10개이다. 게다가 컨트롤러와는 달리 서블릿 객체 하나는 하나의 경로만 담당한다. 이렇게되면 10개보다 더 늘어날 것이고 온통 서블릿 객체로 넘쳐날 것이다.
Servlet 객체는 HttpServlet을 확장한 객체이다. 이렇게 되면 HttpServlet 기능을 필수로 override 해야 하고, 더이상 일반 객체로 사용할 수 없다.
모든 서블릿이 공통으로 처리하는 작업이나, 가장 우선시 되야하는 작업이 분명 있을 것이다. 이런 것을 서블릿 객체로 처리하기란 불가능하고, 매우 까다롭다.
Dispatcher Servlet은 이러한 단점들을 모두 해소해주고, 간편하게 사용할 수 있다.
서블릿을 더이상 HttpServlet을 확장하지 않고, POJO를 사용한다.
@Controller 어노테이션을 붙여서 간편히 사용할 수 있으며, 의존성이 낮아져서 다른 객체들과 연계가 자유롭다.
Controller가 생겨났음에도 불구하고, 여전히 web.xml에 일일히 드록해야 했다. 하지만 컨트롤러가 다음과 같은 구조를 띄면서 문제가 사라졌다.

원래라면 web.xml에 각 컨트롤러를 모두 등록해야 하지만, DispatcherServlet이 모든 요청을 받고 세부 경로는 각 Controller에게 뿌려주는 프론트 컨트롤러의 역할을 함으로써, 서블릿을 일일히 등록할 필요가 없어짐.
공통적으로 진행되어야 할 작업들을 우선적으로 처리해준다.
대표적으로는 한글 인코딩같은 것이 있다.
