使用DispatcherServlet时,出现java.lang.IllegalStateException:没有找到WebApplicationContext:没有注册ContextLoaderListener吗?
使用DelegatingFilterProxy过滤器时发生错误。因此,我删除了DispatcherServlet,现在改用ContextLoaderListener,并且Spring应用程序可以正常加载。但是,我对一个非常重要的bean有问题:
<context:component-scan base-package="com.mydomain"/>
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<list>
<ref bean="openSessionInViewInterceptor" />
</list>
</property>
</bean>
这个bean不再起作用,我的@Controller都没有URL映射了。如果我切换回使用DispatcherServlet,则没有问题(除了我的过滤器再次无效)。我如何才能从ContextLoaderListener内正确加载此bean?
干杯
尼克
最佳答案
您同时需要ContextLoaderListener
和DispatcherServlet
-错误消息没有告诉您删除servlet。
为了阐明Spring在这里所做的事情,DispatcherServlet
创建了自己的ApplicationContext
(通常使用xxx-servlet.xml
),但是您在web.xml中配置的任何Spring过滤器都无法访问servlet的ApplicationContext
。ContextLoaderListener
创建第二个ApplicationContext
(与整个Web应用程序关联),并将其自身与servlet的ApplicationContext
链接,从而允许过滤器和servlet通过Spring进行通信。