Spring中的DispatcherServlet和ContextLoaderListener

时间:2016-05-16 12:07:05

标签: spring configuration

Spring框架中public Form1() { InitializeComponent(); } void txtSearch_TextChanged(object sender, EventArgs e) { cmboxCountry.SelectedIndex = 1; } DispatcherServlet之间有什么区别?当我们使用spring框架时,是否需要在 web.xml 中配置它们?

3 个答案:

答案 0 :(得分:13)

每个DispatcherServlet的AFAIK都会有一个WebApplicationContext。默认情况下,DispatcherServlet会在[appname]-servlet.xml文件夹下查找名为WEB-INF的弹簧配置文件。

  

我们是否需要配置DispatcherServlet

是的,每个Spring应用程序都应配置DispatcherServlet,因为它是通过其路由所有请求的应用程序。它决定控制器类的适当方法来处理请求。一旦控制器返回model以及逻辑视图,DispatcherServlet将获得ViewResolver的帮助来解析view(通常是JSP)并将通过model数据到视图,最后在浏览器上呈现。

  

我们是否需要配置ContextLoaderListener

不,这不是强制性的。 Spring应用程序可以使用ContextLoaderListener

  

为什么我们需要ContextLoaderListener

通常,当我们构建多层应用程序时,我们不希望在一个配置文件[appname]-servlet.xml中混淆所有bean。例如,如果您配置spring security,您希望在security-context.xml中包含所有这些bean,就像在applicationContext.xml中配置属于服务层的所有bean一样,并且有些人想要配置bean属于dao-context.xml中的DAO图层。因此,当您在不同的上下文文件中配置所有这些bean时,您需要知道这些文件存在,因为spring只知道[appname]-servlet.xmlContextLoaderListener将帮助Spring识别所有其他上下文文件。

希望这有帮助!

答案 1 :(得分:4)

根WebApplicationContext是在应用程序中共享的Spring Application Context。

  

DispatcherServlet实例实际上有自己的实例   的WebApplicationContext。

一个应用程序中可以有多个DispatcherServlet实例,每个实例都有自己的WebApplicationContext。

  

根WebApplicationContext是共享的   应用程序,所以如果你有一个根WebApplicationContext和   多个DispatcherServlets,DispatcherServlets将共享   root WebApplicationContext。

但是,对于一个简单的Spring MVC应用程序,人们甚至可能会遇到不需要root WebApplicationContext 的情况。 DispatcherServlet仍然有自己的WebApplicationContext,但它实际上不需要父根WebApplicationContext。

那么,哪些bean应该放在根Web应用程序上下文中,哪些bean应该放在DispatcherServlet的Web应用程序上下文中? 好吧,服务和DAO等通用bean在根Web应用程序上下文中出现,而DispatcherServlet的Web应用程序上下文中包含更多特定于Web的bean,如控制器。

答案 2 :(得分:0)

DispatcherServlet启动时,它将创建一个Spring应用程序上下文并启动 使用在配置文件或给定的类中声明的bean加载该文件。 但是在Spring Web应用程序中,通常会有另一个应用程序上下文。这个 其他应用程序上下文是由ContextLoaderListener创建的

鉴于DispatcherServlet有望加载包含Web组件的bean 例如控制器,视图解析器和处理程序映射,ContextLoaderListener是 预期会在您的应用程序中加载其他bean。这些豆通常是 驱动应用程序后端的中间层和数据层组件。

祝你好运!