Search
Duplicate
🍃

DispatcherServlet

Created time
2023/04/12 01:25
Last edited time
2023/07/11 01:42
Status
Done
tag

들어가기 전에

참고한 자료를 바탕으로 비전문가가 정리한 글이므로 오류가 있을 수 있습니다.
오류에 대한 지적 사항은 언제든지 환영합니다. 부디 댓글로 알려주시길 바랍니다. 감사합니다.

DispatcherServlet

DispatcherServlet은 Dispatcher(전달자,분배자)라는 단어 뜻에서도 알 수 있듯이, HTTP요청을 처리할 서로 다른 핸들러나 컨트롤러에 보내는 역할을 한다. 또한, Spring MVC의 핵심 컴포넌트로서 HTTP요청을 최앞단에서 전부 처리함으로써, Front Controller라는 이름으로도 불린다.
DispatcherServlet은 클라이언트로부터 요청이 들어오면,요청을 분석하여 적절한 핸들러에게 요청을 전달한다. 핸들러는 요청을 처리한 후, 처리 결과를 Model 객체에 담아서 DispatcherServlet에게 반환한다. 이후, DispatcherServlet은 해당 View를 찾아서 모델 데이터를 전달하고, 클라이언트에게 반환한다.
출처 : 우아한테크 https://youtu.be/calGCwG_B4Y

DispatcherServlet 작성법

SpringBoot에서는 DispatcherServlet은 자동으로 설정되고 관리된다. 그러나, 프로젝트에서 SringBoot를 쓰지 않고 사용하려면 web.xml에 정의해줘야한다. 아래 작성 코드는 지금은 잘 안 쓰는 오래된 방식이지만, 처음 공부할 때는 DispatcherServlet을 이해하고 각 핸들러가 어떤 식으로 매핑되는지에 대한 전체적인 흐름을 이해하는데 도움이 된다.
다음은 web.xml에 작성한 DispatcherServlet 설정이다.
<servlet> <servlet-name>action</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>WEB-INF/config/presentation-layer.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
XML
복사
contextConfigLocation: DispatcherServlet이 로드하는 Spring MVC 애플리케이션의 설정 파일의 위치를 지정하는 매개변수. 위치는 presentation-layer.xml에 있으며, 해당 파일에 Spring MVC 애플리케이션의 컨트롤러, 뷰 리졸버, 인터셉터 등과 같은 MVC 구성 요소를 구성.
*.do: do 로 끝나는 url은 action 이라는 이름의 DispatcherServlet으로 보내겠다는 뜻. 즉, 1개 이상의 url 패턴을 서블릿 하나에 매핑 시킬 수 있다.
@Controller public class LoginController { @RequestMapping(value = "/login.do", method = RequestMethod.GET) public String loginView(UserVO vo) { System.out.println("로그인 화면 이동"); vo.setId("test"); vo.setPassword("1234"); return "login"; }
Java
복사
위에 작성한 코드는 localhost/login.do라는 url이 action이라는 DispatcherServlet에 매핑되어 처리된다.

결론

출처 : 우아한테크 https://youtu.be/calGCwG_B4Y
DispatcherServlet의 존재로 인해 개발자는 클라이언트의 다양한 요청에 해당하는 Servlet을 종류별로 작성하는 것이 아닌, 핸들러만 작성하면 됨으로써 비즈니스 로직을 처리하는 것이 훨씬 수월해지게 되었다. DispatcherServlet이 요청을 처리할 컨트롤러를 찾아서 위임하고, 그 결과를 받아온다는 것을 기억하자.

참고