ContextLoaderListener和RequestContextListener之间的区别?

时间:2013-09-10 17:43:13

标签: java spring

我用google搜索但没有找到满意的答案,如果你们能解释ContextLoaderListenerRequestContextListener之间的区别,那就太好了。

4 个答案:

答案 0 :(得分:14)

contextloaderlistener: - Bootstrap监听器启动Spring的根WebApplicationContext。只需委托ContextLoader。

requestcontextlistener :- 此侦听器主要用于第三方servlet,例如JSF FacesServlet。在Spring自己的Web支持中,DispatcherServlet的处理就足够了。

答案 1 :(得分:2)

如果您使用Servlet 2.5 Web容器,请求处理之外的请求 你需要Spring的DispatcherServlet(例如,当使用JSF或Struts时) 注册 org.springframework.web.context.request.RequestContextListener ServletRequestListener。对于Servlet 3.0+,可以通过以编程方式完成 WebApplicationInitializer接口。或者,或者对于旧容器,添加以下内容 声明到您的Web应用程序的web.xml文件:

  

    <listener>
        <listener-class>
            org.springframework.web.context.request.RequestContextListener
        </listener-class>
    </listener>

</web-app>

答案 2 :(得分:1)

我已经读过如果您使用ContextLoaderListener,则不需要RequestContextListener或Filter。它将当前请求(属性)注册到本地线程中,以便作用域代理可以使用它。

答案 3 :(得分:0)

ContextLoaderListener是启动Spring的根WebApplicationContext的引导侦听器。

当您希望请求线程中的属性保持活动时,使用RequestContextListener。

这里需要注意的是,RequestContextListener中的inheritable标志设置为false。

http://docs.spring.io/spring/docs/4.0.6.RELEASE/javadoc-api/org/springframework/web/context/request/RequestContextListener.html

因此,如果您希望子线程继承请求属性,那么您应该尝试使用RequestContextFilter或RequestContextHolder。

http://docs.spring.io/spring/docs/4.0.6.RELEASE/javadoc-api/org/springframework/web/filter/RequestContextFilter.html