모든 컨트롤러가 Forwarding 기능을 하는 Dispatcher를 구현했어야 했다. => 비효율적
컨트롤러를 따로 빼주고 하나의 Dispatcher만 사용한다.
Dispatcher는 요청을 받아 어떤 Controller를 호출할 지 정하고 해당 Controller에 전달하고 반환 값을 받아 View에 전달한다.
매핑 정보를 따로 설정해 주어야한다.
변수, 객체 등 순수 자바 파일만으로 처리할 수 있게 전달해주는 역할 역시 수행
서블릿 기능을 Dispatcher만 수행하게 구현해야한다.
결합력을 낮춰서 실행환경이 달라져도 기능을 유지하기 위함.
pom.xml에 해당 dependency 추가
(Maven Repositories > Global Repositories > central > update index 후에는 Dependencies에서 추가해도 됨)
Dispatcher와 Controller를 Mapping 해주는 정보를 담고 있는 xml 파일
web.xml
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet.class</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
매핑을 위해 web.xml 파일에 해당 코드 추가
url-pattern이 모든 URL을 받는 /
이기 때문에 실행도니다.
web.xml
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet.class</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
변경 시 오류가 발생한다.
/
로 시작 /
로 끝나는 패턴 path로 인식*.
로 시작하는 확장자 매칭/
만 정의한 경우 디폴트 서블릿/*
으로 매핑했을 경우 위의 패턴에 존재하지 않지만 요청 받는 모든 URL을 처리한다는 의미
jsp 호출 역시 DispatcherServlet이 처리하려고 하기 때문에 jsp에 해당하는 url을 찾을 수 없어 오류가 발생하게 된다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="/index" class="com.kim.web.controller.IndexController">
<!-- collaborators and configuration for this bean go here -->
</bean>
</beans>