ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스프링 - DispatcherServlet과 web.xml 설정
    웹프로그래밍/spring 2018. 12. 1. 17:50

    -DispatcherServlet이란?

    스프링 MVC에서 DispatcherServlet은 다른 웹 프레임워크의 프론트 컨트롤러처럼 클라이언트의 request를 컨트롤러에 전달할 뿐만 아니라, 스프링 Ioc 컨테이너와 통합하여 스프링의 모든 기능을 제공한다.


    -스프링 DispatcherServlet 설정 방법

    DispatcherServlet은 httpServlet을 상속 받는 실제 서블릿이다. 그리고 code-based 또는 web.xml에서 설정한다. 아래는 WEB-INF 디렉토리 에 있는 web.xml 파일이며 DispatcherServlet이 처리할 url-mapping을 반드시 같이 작성해주어야 한다.


    <web-app>
            <servlet>
                    <servlet-name>example</servlet-name>
                    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
                    <load-on-startup>1</load-on-startup>
            </servlet>
    
            <servlet-mapping>
                    <servlet-name>example</servlet-name>
                    <url-pattern>/example/*</url-pattern>
            </servlet-mapping>
    
    </web-app>


    한 개의 웹 어플리케이션에서 여러 개의 DispatcherServlet이 정의될 수 있으며 각각의 WebApplicationContext와 namespace, context mapping을 갖는다. 그리고 그 서블릿들은 ContextLoaderListener에 의해 로드 된 한 개의 Root WebApplicationContext를 상속 받으면서 infrastructure bean(service, repositories)을 공유한다.

    WebApplicationContext에는 컨트롤러, view resolver, handler mapping 등의 빈을 포함해야 한다. 만약 위 예시대로 web.xml에서 example 이라는 서블릿을 정의하면 spring-MVC는 해당 웹 어플리케이션의 WEB-INF 디렉토리에서 example-servlet.xml 파일을 찾는다.

    그리고 그 파일에 정의된 빈들을 스프링 IoC 컨테이너에 생성한다. 


    /WEB-INF/'서블릿 이름'-servlet.xml


    <servlet> 엘리먼트에서 contextConfigLocation 파라미터로 경로를 직접 지정할 수 있다. 아래에 이름이 'dispatcher'인 서블릿은 <param-value>가 빈칸이다. 그리고 <context-param>으로 Root-context.xml 경로를 설정한다. 이 경우엔 Root WebApplicationConext가 단독으로 모든 빈 설정(controller, viewresolver, handler mapping, service, respositories)을 보관하게 된다. 


    <web-app>
            <context-param>
                    <param-name>contextConfigLocation</param-name>
                    <param-value>/WEB-INF/root-context.xml</param-value>
            </context-param>
            <servlet>
                    <servlet-name>dispatcher</servlet-name>
                    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
                    <init-param>
                            <param-name>contextConfigLocation</param-name>
                            <param-value></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>
            <listener>
                    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
            </listener>
    </web-app>



    -이클립스 STS에서 스프링 MVC 프로젝트 생성 후 web.xml의 기본 설정

    root-context.xml에는 프로젝트의 모든 웹 컴포넌트가 공유할 리소스(datasource, repository)를 설정하고

    servlet-context.xml에서는 request-processing infrastructure를 설정한다. 예를 들면 controller, viewresolver, 리소스(css, 이미지파일) 등이 있다.






    내용 출처: 

    https://docs.spring.io/spring/docs/5.0.0.RC3/spring-framework-reference/web.html#mvc-servlet