::Java Platform::/::Spring::
|
2010. 5. 25. 22:41
:: Spring2.5 MVC 와 Spring 3.0 MVC의 ViewResolver 사용차이 ::
역시 버전을 바꿔서 개발하는건 알 수 없는 문제와의 싸움이군요..
스프링 3.0 사용 첫날 ViewResolver로 몇시간을 그냥 날렸네요.
우선 기존 사용법을 보면
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"/>
뭔가 많이 길어진것 같지만 ContentNegotiatingViewResolver에 사용할 ViewResolver를 리스트로 사용순으로 넣어두고
기본적으로 사용될 ViewResolver를 등록합니다.
위의 소스에 나와있는 MappingJacksonJsonView를 등록할 경우 http://jackson.codehaus.org/ 에서
Jackson core와 mapper jar파일을 라이브러리에 추가해야 정상적으로 json관련 view가 작동합니다.
위와 같이 레퍼런스에서 제시한 방법말고 기존방법으로 사용하려면 간단합니다.
간단합니다. 순서를 넣어주면 됩니다 --;
하지만!!! 중요한건
web.xml에 servlet-mapping의 url-pattern을 다음과 같이 /*로 하면 2.5에서는 동작하지만 3.0에서는 동작하지 않습니다.
이유는 찾아보지 않았지만 서블릿에서 해당경로를 찾을 수 없다는 상콤한? 메시지가 반겨줍니다.
그러니 위와 같이 url-pattern을 확장자를 포함해서 넣어줍니다. html이든 htm이든 do든 확장자는 상관없는듯 합니다.
3.0... 이제 시작인데 벌서부터 나를 낚는구나.. 에러라도 내달라구!!!!
스프링 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>
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>
<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"/>
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>
<!-- 서블릿 매핑 설정 끝 -->
<!-- 스프링 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... 이제 시작인데 벌서부터 나를 낚는구나.. 에러라도 내달라구!!!!