스프링 MVP 주요 구성 요소
구성 요소 | 설명 |
DispatcherServlet | 클라이언트 요청을 전달받는다. 컨트롤러에게 클라이언트의 요청을 전달하고, 컨트롤러가 리턴한 결과값을 View에 전달하여 알맞은 응답을 생성하도록 한다. |
HandlerMapping | 클라이언트의 요청 URL을 어떤 컨트롤러가 처리할지 결정한다. |
HandlerAdaptor | DispatcherServlet의 처리요청을 반환해서 컨트롤러에게 전달하고, 컨트롤러의 응답 결과를 DispatcherServlet이 요구하는 형식으로 변환한다. |
컨트롤러(Controller) | 클라이언트의 요청을 처리한 뒤, 결과를 리턴한다. 응답 결과에서 보여줄 데이터를 모델에 담아 전달한다. |
ModelAndView | 컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 담는다. |
ViewResolver | 컨트롤러의 처리 결과를 보여줄 뷰를 결정한다. |
View(뷰) | 컨트롤러의 처리 결과 화면을 생성한다. JSP나 Velocity 템플릿 파일 등을 이용해서 클라이언트에 응답 결과를 전송한다. |
DisDispatcherServlet은 스프링 MVC 프레임워크의 중심이 되는 서블릿 클래스
- 웹 브라우저의 요청을 DispatcherServlet 이 받게 되며, DispatcherServlet 은 컴포넌트를 이용해서 웹 브라우저의 요청을 처리한 결과를 전송하게 된다.
web.xml (DispatcherServlet 설정)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--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/mvc-quick-start.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!--dispathcer 서블릿에 대한 매핑을 '*.do' 로 지정한다.-->
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- 요청 파라미터를 UTF-8로 처리하기 위한 필터를 설정한다. -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
스프링 MVC 설정 기초
- HandlerMapping
- HanddlerAdapter
- ViewResolver
HandlerMapping, HanddlerAdapter는 <mvc:annotation-driven> 태그를 이용하면 설정이 끝난다. 따라서, ViewResolver만 추가로 설정해주면 된다.
mvc-quick-start.xml
<?xml version="1.0" encoding="UTF-8" ?>
<bean xmls ="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://wwww.w3.rog/2001/XMLSchema-instace"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/beans/mvc
http://www.springframework.org/schema/beans/mvc/spring-mvc.xsd">
<!-- RequesstMappingHandlerMapping과 RequestMappingHandlerAdapter를 빈으로 등록해준다.-->
<mvc:annotaion-driven/>
<!-- 뷰 이름을 실제 어떤뷰와 연결할지 결정하는 VeiwResolver를 설정
prefix + 뷰 이름 + suffix
- /WEB-INF/view/hello.jsp
-->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name = "prefix" value ="/WEB-INF/view/"/>
<property name ="suffix" value=".jsp"/>
</bean>
<bean class ="net.madvirus.spring4.chap07.quickstart.HelloController"/>
</bean>
InternalResourceViewResolver는 JSP를 이용해서 뷰를 생성할 때 사용되는 ViewResolver 구현체이다.
주의할 점 : ViewResolver의 이름이 "viewResolver"여야한다.
@Configuration 사용
@EnableWebMvc 어노테이션을 이용하여 @Configuration 자바 설정을 사용한다.
@EnableWebMvc 어노테이션을 사용하면 <mvc:annotation-driven>과 동일하게 스프링 MVC를 설정하는데 필요한 빈을 자동으로 등록하게 해준다.
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@Configuration
@EnableWebMvc
public class MvcQuickStartConfig {
@Bean
public InternalResourceViewResolver viewResolver(){
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/view/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
}
서블릿 매핑에 따른 컨트롤러 경고 매핑과 디폴트 서블릿 설정
DispatcherServlet을 web.xml에 설정할 때 *.do 패턴에 해당하는 요청을 처리하도록 매핑을 설정했었다.
<!--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/mvc-quick-start.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!--
web.xml
dispathcer 서블릿에 대한 매핑을 '*.do' 로 지정한다.
-->
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
위의 매핑은 확장자를 이용해서 클라이언트의 요청과 DispatcherServlet을 매핑한다. 이 경우 웹 브라우저에서 입력하는 URL은 아래와 같은 형태를 띄게 된다.
- http:://localhst:8080/spring4-chap07/hello.do
- http://somhost/board/article/read.do?articleId=100
'Spring > [실습] Spring FrameWork' 카테고리의 다른 글
Spring FrameWork - 스프링 MVC 기본기 (0) | 2021.03.03 |
---|---|
Spring FrameWork - 톰캣 설정 (0) | 2021.03.03 |
Spring FrameWork 개념 - 초기 설정(pom.xml) (0) | 2021.03.02 |
Spring FrameWork 개념 - MVC 설명 (0) | 2021.03.02 |
Spring FrameWork 개념 - 디렉토리 설명 (0) | 2021.03.02 |