DispatcherServlet是Spring MVC的前端控制器,要想在程序中使用DispatcherServlet,我们需要在web.xml中配置一个DispatcherServlet。配置的方法是,在web.xml文件中,配置一个<servlet>节点,它的子节点<servlet-name>可以自定义一个名字,例如sample,<servlet-class>指定为org.spring.springframework.web.servlet.DispatcherServlet。
当DispatcherServlet被载入后,它将从xml文件载入Spring的应用上下文,而从哪个xml文件载入呢?xml文件的名字取决于DispatcherServlet的名字。如果DispatcherServlet的名字为sample,那么它将从sample-servlet.xml的文件中载入应用上下文。
接下来,我们需要配置哪些URL需要由DispatcherServlet来处理,这是通过在web.xml中配置一个<servlet-mapping>节点来实现的。如下所示。
<servlet-mapping>
<servlet-name>sample</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
正如前面提到的DispatcherServlet将从<servlet-name>命名的xml中载入应用的上下文。那么这就要求我们把所有需要载入的Bean都定义在这个xml文件中。这显然是不利于对Bean的分类的管理的。例如,我们想把持久层的bean放在一个xml文件中,把服务层的bean放在另一个xml文件中,把web层的bean也单独放在一个xml文件中。那么DispatcherServlet如何载入多个xml文件呢?
为了把这些xml都载入进来,我们需要在web.xml文件中配置一个上下文载入器,上下文载入器用于载入除DispatcherServlet载入的xml文件之外的文件。最常用的上下文载入器就是一个servlet监听器,名称为ContextLoadListener。我们需要在web.xml中这样配置它。
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
默认情况下,上下文载入器将会在/WEB-INF/applicationContext.xml中载入配置,但如果想载入多个配置文件,我们需要改变它的默认行为。
可以通过在Servlet上下文中设置contextConfigLocation参数来为上下文载入器指定一个或多个Spring配置文件。如下。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/a.xml
/WEB-INF/b.xml
/WEB-INF/c.xml
</param-value>
</context-param>