- 上张图
DispatcherServlet是SpringMVC的核心控制类,wiliam-me写到:SpringMVC的整个运行体系,是由DispatcherServlet、组件和容器三者共同构成的。在这个运行体系中,DispatcherServlet是逻辑处理的调度中心,组件则是被调度的操作对象。而容器在这里所起到的作用,是协助DispatcherServlet更好地对组件进行管理。三者的关系如下:
DispatcherServlet - 容器 —— DispatcherServlet对容器进行初始化
容器 - 组件 —— 容器对组件进行全局管理
DispatcherServlet - 组件 —— DispatcherServlet对组件进行逻辑调用
- 使用SpringMVC时,先要在web.xml里配置DipatcherServlet,它本质是servlet(jar包里已经写好了的),跟普通的servlet一样配置,可以用load-on-startup指定其何时初始化,区别在于,servlet-mapping时,指定的url-pattern,为*.do,由于它匹配所有的servlet文件,因此相当于访问servlet文件时都先被它拦截了,它拦截这些请求做什么?它首先会初始化容器,默认是根据WEB-INFO目录下的DipatcherServletName-servlet.xml初始化的,也可以通过在配置Dispatcher时指定init-param自定义位置。如下为基本配置内容:
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 中央控制器 -->
<!-- 配控制器时,一定要导入commons-logging包,否则tomcat启动时出现Failed to start component --><!--
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>0</load-on-startup> 服务器启动时初始化该实例
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
-->
<!-- 自定义位置 -->
<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/custom.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
springMVC-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
<!-- 映射 -->
<bean name="/hello.do" class="com.controller.HelloController"></bean>
<bean name="/hello2.do" class="com.controller.HelloController2"></bean>
</beans>
其次,它会调度相应的组件进行处理,经过多个组件后,最终响应到用户视图。