'spring 3.0'에 해당되는 글 1

  1. 2010.05.25 :: Spring2.5 MVC 와 Spring 3.0 MVC의 ViewResolver 사용차이 :: 3

역시 버전을 바꿔서 개발하는건 알 수 없는 문제와의 싸움이군요..

스프링 3.0 사용 첫날 ViewResolver로 몇시간을 그냥 날렸네요.

우선 기존 사용법을 보면

<bean     id="viewResolver" 
            class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
           
        <property name="prefix" value="/WEB-INF/jsp/"/> 
        <property name="suffix" value=".jsp"/> 
</bean>


3.0의 사용법의 경우 레퍼런스의 의하면 다음과 같습니다.

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
        <property name="mediaTypes">
            <map>
                <entry key="atom" value="application/atom+xml"/>
                <entry key="html" value="text/html"/>
                <entry key="json" value="application/json"/>
            </map>
        </property>
        <property name="viewResolvers">
            <list>
                <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
                <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                    <property name="prefix" value="/WEB-INF/jsp/"/>
                    <property name="suffix" value=".jsp"/>
                </bean>
            </list>
        </property>
        <property name="defaultViews">
            <list>
                <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
            </list>
        </property>
</bean>

뭔가 많이 길어진것 같지만 ContentNegotiatingViewResolver에 사용할 ViewResolver를 리스트로 사용순으로 넣어두고
기본적으로 사용될 ViewResolver를 등록합니다.
위의 소스에 나와있는 MappingJacksonJsonView를 등록할 경우 http://jackson.codehaus.org/ 에서
Jackson core와 mapper jar파일을 라이브러리에 추가해야 정상적으로 json관련 view가 작동합니다.

위와 같이 레퍼런스에서 제시한 방법말고 기존방법으로 사용하려면 간단합니다.

<bean     id="viewResolver" 
            class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
           
        <property name="prefix" value="/WEB-INF/jsp/"/> 
        <property name="suffix" value=".jsp"/> 
        <property name="order" value="1"/> 
</bean>

간단합니다. 순서를 넣어주면 됩니다 --;


하지만!!! 중요한건

web.xml에 servlet-mapping의 url-pattern을 다음과 같이 /*로 하면 2.5에서는 동작하지만 3.0에서는 동작하지 않습니다.
이유는 찾아보지 않았지만 서블릿에서 해당경로를 찾을 수 없다는 상콤한? 메시지가 반겨줍니다.

<!-- 서블릿 설정 -->
    <!-- 스프링 MVC 사용시 필수 -->
      <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/config/controller/controllerContext.xml
                /WEB-INF/config/service/serviceContext.xml
            </param-value>
        </init-param>
    </servlet>
   
    <!-- 서블릿 설정 끝 -->
   
    <!-- 서블릿 매핑 설정 -->
   
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>
   
    <!-- 서블릿 매핑 설정 끝 -->

그러니 위와 같이 url-pattern을 확장자를 포함해서 넣어줍니다. html이든 htm이든 do든 확장자는 상관없는듯 합니다.

3.0... 이제 시작인데 벌서부터 나를 낚는구나.. 에러라도 내달라구!!!!