ContextLoaderListener 和 RequestContextListener 有什么作用?
What do ContextLoaderListener and RequestContextListener do?
我有一个应用程序,我正在使用 Spring。
在我的 web.xml 中,我使用下面的行
<web-app>
....
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
....
</web-app>
它们是什么?
它们是强制性的吗?
一般来说,侦听器是容器通知您的应用事件的一种方式,而不仅仅是 Web 请求。
例如,要在会话即将超时时收到通知,您需要扩展 HttpSessionListener 并实现 sessionDestroyed() 方法。然后容器会在会话到期时调用它,您可以将它与该用户的登录时间一起记录下来。
对于 ContextLoaderListener,这让您可以在容器启动时启动应用程序的非 Web 相关部分,而不是等待某人点击您的 spring 组件之一。它使用您之前在 web.xml 中设置的上下文参数 contextConfigLocation 来了解要开始的内容。
对于 RequestContextListener,您会收到有关创建和删除请求的通知。
是否需要它们取决于您应用的架构。
org.springframework.web.context.ContextLoaderListener
是来自 Spring 框架的 class。由于它实现了 ServletContextListener
接口,servlet 容器会在 Web 应用程序启动 (contextInitialized
) 和关闭 (contextDestroyed
) 时通知它。
它专门负责引导(并有序关闭)Spring ApplicationContext。
参考:javadoc 说:
Bootstrap listener to start up and shut down Spring's root WebApplicationContext. Simply delegates to ContextLoader as well as to ContextCleanupListener.
org.springframework.web.context.request.RequestContextListener
是来自同一框架的另一个 class。它的 javadoc 说:
Servlet 2.4+ listener that exposes the request to the current thread, through both LocaleContextHolder and RequestContextHolder. To be registered as listener in web.xml.
Alternatively, Spring's RequestContextFilter and Spring's DispatcherServlet also expose the same request context to the current thread. In contrast to this listener, advanced options are available there (e.g. "threadContextInheritable").
This listener is mainly for use with third-party servlets, e.g. the JSF FacesServlet. Within Spring's own web support, DispatcherServlet's processing is perfectly sufficient.
因此它通常不在 Spring MVC 应用程序中使用,但允许在使用 Spring ApplicationContext
的 JSF 应用程序中请求或会话范围的 bean
我有一个应用程序,我正在使用 Spring。 在我的 web.xml 中,我使用下面的行
<web-app>
....
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
....
</web-app>
它们是什么? 它们是强制性的吗?
一般来说,侦听器是容器通知您的应用事件的一种方式,而不仅仅是 Web 请求。
例如,要在会话即将超时时收到通知,您需要扩展 HttpSessionListener 并实现 sessionDestroyed() 方法。然后容器会在会话到期时调用它,您可以将它与该用户的登录时间一起记录下来。
对于 ContextLoaderListener,这让您可以在容器启动时启动应用程序的非 Web 相关部分,而不是等待某人点击您的 spring 组件之一。它使用您之前在 web.xml 中设置的上下文参数 contextConfigLocation 来了解要开始的内容。
对于 RequestContextListener,您会收到有关创建和删除请求的通知。
是否需要它们取决于您应用的架构。
org.springframework.web.context.ContextLoaderListener
是来自 Spring 框架的 class。由于它实现了 ServletContextListener
接口,servlet 容器会在 Web 应用程序启动 (contextInitialized
) 和关闭 (contextDestroyed
) 时通知它。
它专门负责引导(并有序关闭)Spring ApplicationContext。
参考:javadoc 说:
Bootstrap listener to start up and shut down Spring's root WebApplicationContext. Simply delegates to ContextLoader as well as to ContextCleanupListener.
org.springframework.web.context.request.RequestContextListener
是来自同一框架的另一个 class。它的 javadoc 说:
Servlet 2.4+ listener that exposes the request to the current thread, through both LocaleContextHolder and RequestContextHolder. To be registered as listener in web.xml.
Alternatively, Spring's RequestContextFilter and Spring's DispatcherServlet also expose the same request context to the current thread. In contrast to this listener, advanced options are available there (e.g. "threadContextInheritable").
This listener is mainly for use with third-party servlets, e.g. the JSF FacesServlet. Within Spring's own web support, DispatcherServlet's processing is perfectly sufficient.
因此它通常不在 Spring MVC 应用程序中使用,但允许在使用 Spring ApplicationContext
的 JSF 应用程序中请求或会话范围的 bean