ContextLoaderListener和RequestContextListener之间的区别是什么?

27
我已经搜索了,但没有找到满意的答案。如果你们能解释一下 ContextLoaderListenerRequestContextListener 之间的区别,那就太好了。请注意不要改变原来的意思,只需提供最终的中文结果即可。
4个回答

16

contextloaderlistener这是一种引导监听器,用于启动Spring的根WebApplicationContext。它简单地委托给ContextLoader。

requestcontextlistener:这个监听器主要用于与第三方servlet(例如JSF FacesServlet)一起使用。在Spring自己的Web支持中,DispatcherServlet的处理已经足够了。


1
你能解释一下哪个更好用吗?为什么? - Vivek Agrawal21

5
如果您使用的是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>

1

我读到过,如果你使用ContextLoaderListener,那么你就不需要RequestContextListener或Filter。它会在本地线程中注册当前请求(属性),以便作用域代理可以使用它。


1
只是以防万一 - 我无法在使用基于WebApplicationInitializer的Spring初始化方法时使请求范围的bean正常工作,除非添加RequestContextListener。 - XZen

0

ContextLoaderListener是一个引导监听器,用于启动Spring的根WebApplicationContext。

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

需要注意的是,在RequestContextListener中,继承标志被设置为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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接