原先,我们是这么配置拦截器的
<bean id="openSessionInViewInterceptor"class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
<property name="sessionFactory" ref="sessionFactory" />
</bean> <beanclass="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<list>
<ref bean="openSessionInViewInterceptor"/>
<bean class="com.jumbo.interceptor.MetaInfoInterceptor"/>
</list>
</property>
</bean>
原配置方式结合新命名空间mvc:interceptors配置方式:
<mvc:annotation-driven /> <!-- *************openSessionInViewInterceptor *************-->
<bean id="openSessionInViewInterceptor"class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
<property name="sessionFactory" ref="sessionFactory" />
</bean> <!--
**************interceptors **************************
-->
<beanclass="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<list>
<ref bean="openSessionInViewInterceptor" />
</list>
</property>
</bean> <mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**/*.htm" />
<bean id="metaInfoInterceptor" class="com.jumbo.web.interceptor.MetaInfoInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
这样对吗???
因为<mvc:annotation-driven />会自己主动注冊DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个实例,
<span style="color:#FF6666;"><beanclass="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></span>
这儿又注冊一次导致导致没有openSessionInViewInterceptor,产生了no session的 异常
所以:放弃原拦截器配置方式拥抱新的方法:
<mvc:annotation-driven />
<mvc:interceptors>
<!--*************openSessionInViewInterceptor ************* -->
<bean id="openSessionInViewInterceptor"class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
<property name="sessionFactory" ref="sessionFactory" />
</bean> <mvc:interceptor>
<mvc:mapping path="/**/*.htm" />
<bean id="metaInfoInterceptor" class="com.jumbo.web.interceptor.MetaInfoInterceptor"/>
</mvc:interceptor> </mvc:interceptors>