17.2 Spring MVC的DispatcherServlet

17.2 Spring MVC的DispatcherServlet

回想一下,第16章建立了一个简单的MVC框架,包含一个充当调度员的Servlet。基于Spring MVC,则无须如此。Spring MVC中自带了一个开箱即用的DispatcherServlet,该Servlet的全名是org.springframework.web.servlet.DispatcherServlet
要使用这个Servlet,需要把它配置在部署描述符(web.xml文件)中,应用servletservlet-mapping元素,如下:

1
2
3
4
5
6
7
8
9
10
11
12
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- map all requests to the DispatcherServlet -->
<url-pattern>/</url-pattern>
</servlet-mapping>

servlet元素内的on-startup元素是可选的。如果它存在,则它将在应用程序启动时装载Servlet并调用该Servletinit方法。若它不存在,则在该servlet的第一个请求时加载。
DispatcherServlet将使用Spring MVC诸多默认的组件。此外,初始化时,它会寻找一个在应用程序的WEB-INF目录下的配置文件,该配置文件的命名规则如下:

1
servletName-servlet.xml

其中,servletName是在部署描述符中的DispatcherServlet的名称。如果这个DispatcherServlet的名字是SpringMVC,则在应用程序目录的WEB-INF下对应的文件是SpringMVC-servlet.xml

此外,也可以把Spring MVC的配置文件放在应用程序目录中的任何地方,你可以使用servlet定义的init-param元素,以便DispatcherServlet加载到该文件。init-param元素拥有一个值为contextConfigLocationparam-name元素,其param-value元素则包含配置文件的路径。例如,可以利用init-param元素更改默认的文件名和文件路径为WEB-INF/config/simple-config.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/config/simple-config.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>