当我使用 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?
干杯
的Nik
答案 0 :(得分:22)
您需要ContextLoaderListener
和 DispatcherServlet
- 错误消息没有告诉您删除servlet。
为了阐明Spring在这里做了什么,DispatcherServlet
创建了自己的ApplicationContext
(通常使用xxx-servlet.xml
),但是您在web.xml中配置的任何Spring Filter都没有访问servlet的ApplicationContext
。
ContextLoaderListener
创建第二个ApplicationContext
(与整个webapp相关联),并将自身与servlet的ApplicationContext
链接,允许过滤器和servlet通过Spring进行通信。
答案 1 :(得分:1)
Spring MVC基本应用程序的web.xml虽然没有ContextLoaderListener?请参阅https://src.springframework.org/svn/spring-samples/mvc-basic/trunk/src/main/webapp/WEB-INF/web.xml。
我问的原因是因为我的申请中出现以下错误:
错误[[Spring MVC Dispatcher Servlet]] servlet的Servlet.service()Spring MVC Dispatcher Servlet抛出异常 java.lang.IllegalStateException:找不到WebApplicationContext:没有注册ContextLoaderListener?
我没有ContextLoaderListener(可能导致问题)。
关于为什么MVC基本应用程序会起作用的任何想法?