728x90
반응형

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, 이미지파일) 등이 있음

 

/WEB-INF/spring/appServlet/servlet-context.xml 

출처 및 참고자료

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

 

The Web

This part of the reference documentation covers Spring Framework’s support for WebSocket-style messaging in web applications including use of STOMP as an application level WebSocket sub-protocol. Introduction establishes a frame of mind in which to think

docs.spring.io

 

반응형

'프로그래밍 > Spring' 카테고리의 다른 글

11.23(MVC1 패턴과 MVC2 패턴)  (0) 2020.11.23
11.19(MyBatis 연동)  (0) 2020.11.19
11.17(MVC 뷰 구현)  (0) 2020.11.17
11.09(Spring Security - 사용자 인증)  (0) 2020.11.09
11.06(Spring Security - security 권한 생성)  (0) 2020.11.06
복사했습니다!