스프링 MVC는 스프링의 서브 프로젝트
→ 스프링은 하나의 기능을 위해서만 만들어진 프레임워크가 아닌 코어 프레임워크 + 여러 서브 프로젝트의 결합
서브 프로젝트 ?
→ 별도의 설정이 존재할 수 있다는 것
즉, Spring Legacy Project로 생성한 프로젝트에도 servlet-contex, root-context로 설정파일이 분리되어 있음. 이렇게...
root-context.xml
JAVA 영역 (POJO 영역)
servlet-context.xml
Web 영역
프로젝트 구동 시 관여하는 XML
우선, xml 파일은 모두 객체(Bean)를 정의한다.
Tomcat 구동 관련 설정
스프링 관련 설정
root-context.xml
servlet-context.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<listener>
root-context.xml이 처리되면 파일에 있는 빈 설정들이 동작한다. 이 파일에 정의된 빈들(객체들)은 스프링의 context영역 내부에 생성되고 객체들 간의 의존성이 처리됨
root-context.xml이 처리된 후 스프링 MVC에서 사용하는 DispatcherServlet이라는 서블릿 관련 설정이 동작한다.
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
내부적으로 웹 관련 처리 준비 작업을 진행할 때 사용하는 파일이 servlet-context.xml
DispatcherServlet에서 XmlWebApplicationContext를 이용하여 servlet-contex.xml을 로딩한다. 이 과정에서 등록된 객체들은 기존의 객체들과 연동된다.
스프링 MVC 이용 시 개발자는 HttpServletRequest/HttpSerlvetResponse 와 같은 Servlet/JSP API 사용해야하는 필요성이 적어지고 스프링이 중간에서 그 역할을 수행한다.
스프링 MVC는 내부적으로 Servlet API를 활용하며 모델 2 방식으로 처리한다.
로직과 화면을 분리하는 개발방식
DispatcherServlet
사용자의 모든 Request 처리
HandlerMapping
Request 처리를 담당하는 컨트롤러 찾기.
@RequestMapping
설정된 컨트롤러를 찾는다.
HandlerAdapter
HandlerMapping 단계에서 찾은 컨트롤러를 동작시킨다.
Controller
실제로 요청을 처리하는 로직 작성
다양한 타입의 결과 반환 가능하며 이를 ViewResolver가 처리한다.
ViewResolver
Controller가 반환한 결과를 어떤 view를 통해 처리할지 해석한다.
servlet-context.xml에 정의된 InternalResourceViewResolver가 대표적
View
실제로 응답을 보내야하는 데이터를 JSP 이용하여 생성
만들어진 응답은 DispatcherServlet을 통해 전달된다.