반응형

스프링 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

 

반응형

+ Recent posts