Spring框架中的
DispatcherServlet
和ContextLoaderListener
有什么区别?在使用Spring框架时,我们需要在web.xml中同时配置它们吗?DispatcherServlet
和ContextLoaderListener
有什么区别?在使用Spring框架时,我们需要在web.xml中同时配置它们吗?DispatcherServlet
都会有一个WebApplicationContext
。默认情况下,DispatcherServlet
会在WEB-INF
文件夹下查找名为[appname]-servlet.xml
的Spring配置文件。
是的,每个Spring应用程序都应该配置我们需要配置
DispatcherServlet
吗?
DispatcherServlet
,因为所有请求都通过它路由。它决定控制器类处理请求的适当方法。一旦控制器返回model
和逻辑视图,DispatcherServlet
将借助ViewResolver
解析视图(通常是JSP),并将model
数据传递给视图,最终在浏览器上呈现。
不需要,这不是强制性的。Spring应用程序可以没有我们需要配置
ContextLoaderListener
吗?
ContextLoaderListener
。
通常,在构建多层应用程序时,我们不希望在一个配置文件为什么我们需要
ContextLoaderListener
?
[appname]-servlet.xml
中混杂所有bean。例如,如果您配置了spring security
,则需要在security-context.xml
中包含所有这些bean,同样,属于服务层的所有bean都配置在applicationContext.xml
中,有些人希望在dao-context.xml
中配置属于DAO层的bean。因此,当您在不同的上下文文件中配置所有这些bean时,需要让Spring知道这些文件存在,因为Spring只知道[appname]-servlet.xml
。 ContextLoaderListener
将帮助Spring识别所有其他上下文文件。当DispatcherServlet启动时,它创建了一个Spring应用程序上下文并开始使用在配置文件或给定的类中声明的bean进行加载。但是,在Spring Web应用程序中,通常还有另一个应用程序上下文。这个其他应用程序上下文是由ContextLoaderListener创建的。
而DispatcherServlet被期望加载包含Web组件(例如控制器、视图解析器和处理程序映射)的bean,ContextLoaderListener则被期望加载应用程序中的其他bean。这些bean通常是驱动应用程序后端的中间层和数据层组件。
祝你好运!