컨텐츠 바로가기

DispatcherServlet 설정과 ApplicationContext의 관계

http://iris2380.egloos.com/25062

right now,,, 나에게 중요한 내용 ㅠㅠ



3-2 DispatcherServlet 설정과 ApplicationContext의 관계

 DispatcherServlet 설정
  스프링 MVC는 1개 이상의 DispatcerServlet을 설정할 수 있으며, 또한 각 DispatcerServlet이 공유할 수 있는 빈을 설정할 수도 있다.
  • DispatcerServlet 설정

    • DispatcerServlet은 기본적으로 웹 어플리케이션의 /WEB-INF/ 디렉터리에 위치한 [서블릿이름]-servlet.xml 파일로부터 스프링 설정 정보를 읽어온다. 예를 들어, 다음과  같이 web.xml 파일을 설정했다면, dispatcer-servlet.xml 파일로부터 설정 정보를 읽어오게 된다.

      1. <servlet>
      2. <servlet-name>dispatcer</servlet-name>
      3. <servlet-class>
      4. org.springframework.web.servlet.DispatcerServlet
      5. </servlet-class>
      6. </servlet>
    •  하지만, 경우에 따라 한 개 이상의 설정 파일을 사용해야 하는 경우가 있다. 또는 기본 설정 파일 이름이 아닌 다른 이름의 설정 파일을 사용하고 싶은 경우에는 다음과 같이 DispatcerServlet을 설정할 때 contextConfigLocation 초기화 파라미터에 설정 파일 목록을 지정하면 된다.

      1. <servlet>
      2. <servlet-name>dispatcer</servlet-name>
      3. <servlet-class>
      4. org.springframework.web.servlet.DispatcerServlet
      5. </servlet-class>
      6. <init-param>
      7. <param-name>contextConfigLocation</param-name>
      8. <param-value>
      9. /WEB-INF/main.xml
      10. /WEB-INF/bbs.xml
      11. </param-value>
      12. </init-param>
      13. //contextConfigLocation 초기화 파라미터는 설정 파일 목록을 값으로 갖는데. 이때 각 설정파일은 콤마(",") , 공백문자(" "), 탭(\t), 줄 바꿈(\n), 세미콜론(";")을 이용하여 구분한다.
      14. </servlet>

 

  • 웹 어플리케이션을 위한 ApplicationContext 설정

    • DispatcerServlet은 그 자체가 서블릿이기 때문에 1개 이상의 DispatcerServlet을 설정하는 것이 가능하다.

      1. <servlet>
      2. <servlet-name>front</servet-name>
      3. <servlet-class>
      4. org.springframework.web.servlet.DiapatcerServlet
      5. </servlet-class>
      6. <init-param>
      7. <param-name>contextConfigLocation</param-name>
      8. <param-value>/WEB-INF/front.xml</param-value>
      9. </init-param>
      10. </servlet>
      11. <servlet>
      12. <servlet-name>rest</servlet-name>
      13. <servlet-class>
      14. org.springframework.web.servlet.DiapatcherServlet
      15. </servlet-class>
      16. <init-param>
      17. <param-name>contextConfigLocation</param-name>
      18. <param-value>/WEB-INF/rest.xml</param-value>
      19. </init-param>
      20. </servlet>
      • 두 DispatcherServlet은 각각 별도의 WebApplicationContext를 생성하게 된다. 예를 들어, 위 코드는 "front" DispatcherServlet은 front.xml 설정 파일을 사용하고, "rest" DispatcherServlet은 rest.xml 설정 파일을 사용하도록 설정하고 있는데, 이때, front.xml에서는 rest.xml에 설정된 빈 객체를 사용할 수 없게 된다.
      • 서로 다른 DispatcherServlet이 공통 빈을 필요로 하는 경우, ContextLoaderListener를 사용하여 공통으로 사용될 빈을 설정할 수 있게 된다. 다음과 같이 ContextLoaderListener를 ServletListener로 등록하고 contextConfigLocation 컨텍스트 파라미터를 이용하여 공통으로 사용될 빈 정보를 담고 있는 설정 파일 목록을 지정하면 된다.
      1. <context-param>
      2. <param-name>contextConfigLocation</param-name>
      3. <param-value>/WEB-INF/service.xml,/WEB-INF/persistence.xml</param-value>
      4. </context-param>
      5. <listener>
      6.  <listener-class>
      7. org.springframework.web.conext.ContextLoaderListener
      8. </listener-class>
      9. </listener>
      • ContextLoaderListner가 생성하는 WebApplicationContext는 웹 어플리케이션에서 루트 컨텍스트가 되며, DiapatcerServlet이 생성하는 WebApplicationContext는 루트 컨텍스트를 부모로 사용하는 자식 컨텍스트가 된다. 이때 자식은 root가 제공하는 빈을 사용할 수 있기 때문에 각각의 DispatcerServlet이 공통으로 필요로 하는빈을 ContextLoaderListener를 이용하여 설정하는 것이다.
      • ContextLoaderListener는 contextConfigLocation 컨텍스트 파라미터를 명시하지 않으면 /WEB-INF/applicationContext.xml을 설정 파일로 사용한다. 또한, 클래스 패스에 위치한 파일로부터 설정 정보를 읽어 오고 싶다면 다음과 같이 'classpath:'접두어를 사용하여 설정 파일을 명시하면 된다.
      1. <context-param>
      2. <param-name>contextConfigLocation</param-name>
      3. <param-value>
      4. classpath:kame/spring/config/service.xml
      5. classpath:kame/spring/config/persistence.xml
      6. /WEB-INF/config/message_conf.xml
      7. </param-value>
      8. </context-param>
      9. <listener>
      10. <listener-class>
      11. org.springframework.web.context.ContextLoaderListener
      12. </listener-class>
      13. </listener>
  • 캐릭터 인코딩 처리를 위한 필터 설정

    • 스프링은 요청 파라미터의 캐릭터 인코딩을 설정할 수 있는 필터 클래스인 CharacterEncodingFilter 클래스를 제공하고 있다.

      다음과 같이 web.xml 파일에 CharacterEncodingFilter 클래스를 설정함으로써 요청 파라미터의 캐릭터 인코딩을 손쉽게 설정할 수 있다.

      1. <filter>
      2. <filter-name>encodingFilter</filter-name>
      3. <filter-class>
      4. org.springframework.web.filter.CharacterEncodingFilter
      5. </filter-class>
      6. <init-param>
      7. <param-name>encoding</param-name>
      8. <param-value>EUC-KR</param-value>
      9. </init-param>
      10. </filter>
      11. <filter-mapping>
      12. <filter-name>encodingFilter</filter-name>
      13. <url-pattern>/-</url-pattern>
      14. </filter-mapping>

 


덧글|신고