web.xml (servlet)

Language/JSP 2012. 10. 31. 17:32

프링 MVC 를 사용하려면, 가장 먼저 해야 할일이 웹어플리케이션 설정 파일인 web.xml 을 설정하는 것으로 부터 출발한다.

우선 개략적으로 흐름을 살펴보자.

1. 클라이언트로 부터 요청이 들어오면, 이는 DispatcherServlet 으로 전달되고,

2. 이 DispatcherServlet 은 HandlerMapping 을 사용하여 적당한 Controller 객체를 구하게된다.

3. 다시 DispatcherServlet 은 Cotroller 객체의 메소드를 호출하여 요청을 처리한다음에,

4. Cotroller 객체의 메소드가 리턴한 결과를 담은 ModelAndView 객체를 보내주면,

5. 다시 DispatcherServlet 은 ViewResolver로 부터 결과를 만들 View 객체를 구한다.

6. View 객체는 최종 응답을 생성하고.

여기서 우리는 Controller의 개발, View 객체 정도 이다.

이제 본론으로 들어가면,

DispatcherServlet 이 요청을 처리하게 하려면, 이 서블릿의 존재를 웹 어플리케이션에 설정해 주어야지.

web.xml 에서 해당 서블릿 정보를 추가해주자.

....

<servlet>
<servlet-name>goDispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>


<servlet-mapping>
<servlet-name>goDispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

....

이렇게 해놓으면,

WEB-INF/web.xml

/goDispatcher-servlet.xml <-- 이 설정파일을 읽게된다.

자동으로 <서블릿이름>-servlet.xml 형태의 설정파일을 읽도록 된다.

goDispatcher-servlet.xml 에는 스프링이 사용할 설정들이 들어가게된다.

예) HandlerMapping , ViewResolver, ExceptionResolver, 등.

근데,,

한개 이상의 설정파일을 읽어야 한다거나, <서블릿이름>-servlet.xml 와 다른이름의 설정파일을

하고싶을땐?

<servlet>
<servlet-name>spring-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:/config/spring/web-mvc.xml

classpath:/config/spring/bus-mvc.xml --설정파일의 경로는 웹어플리케이션 루트 디렉토리를 기준으로 한다.
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>spring-dispatcher</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>

그럼.. 1개이상의 DispatcherServlet 을 설정하려고 할떄는? 하나는 web 페이지용, 하나는 REST 서비스용..

<servlet>
<servlet-name>goWebDispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/webpage.xml</param-value>

</init-param>
</servlet>

<servlet>
<servlet-name>goRestDispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/rest.xml</param-value>

</init-param>
</servlet>

이렇게 해도 상관없다..

하지만, 이렇게 하면, webpage.xml 여기에 선언된 Bean 을 rest.xml 에서 사용하지는 못한다.

그럼... DAO,SERVICE 등의 공통적으로 사용되는 Bean 을 양쪽에 다 선언해줘야 하나?

아니다..

공통적으로 사용되는 Bean 은

ContextLoaderListener를 Servlet Linstener 로 등록하여 공통으로 사용되는 설정파일들의 목록을 지정해주면 된다.

...

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:/company-core-context.xml
classpath:/comp-control-context.xml
</param-value>
</context-param>

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

....

이런식으로.

그래서 종합해보면,

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:/company-core-context.xml
classpath:/comp-control-context.xml
</param-value>
</context-param>

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
<servlet-name>goWebDispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/webpage.xml</param-value>

</init-param>
</servlet>

<servlet>
<servlet-name>goRestDispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/rest.xml</param-value>

</init-param>
</servlet>

이렇게 하게 되면, webpage.xml 과, rest.xml 에서는 서로 참조 될 필요가 없는 Bean 만 등록이 되고, 공통 설정은 classpath:/company-core-context.xml classpath:/comp-control-context.xml

에 등록하면 되는 것이다..

*classpth: 이게 있으면, 클래스패스에 위치한 설정파일, 이런 접두어가 없으면, 웹어플리케이션 루트 디렉토리에서 찾는다.

*contextConfigLocation 에서 param-value 의 경로를 지정하지 않으면, WEB-INF/applicationContext.xml 에서 값을 참조한다.


출처 : http://jejoong76.blog.me/70134608484

'Language > JSP' 카테고리의 다른 글

ServletContext와 RequestDispatcher  (0) 2012.11.02
스프링 MVC - 뷰 영역 구현  (0) 2012.10.31
Spring MVC  (0) 2012.10.31
MyBatis-Spring  (0) 2012.10.31
tiles :: 2.2.2 버전 web.xml 설정 세 가지 방법  (0) 2012.10.29
: