一.Web.xml的配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>Archetype Created Web Application</display-name>
<!-- 扫描resources目录下的文件-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/application*.xml</param-value>
</context-param>
<!-- 在启动Web 容器时,自动装配 application*.xml 的配置信息-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- 设置SpringMVC配置文件的位置,注意该位置默认是src文件夹下 -->
<param-value>classpath:spring/dispatcher-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
上一篇文章我们了解到Spring Mvc 中的三个context :
第一个上下文指的是ServletContext(Tomcate级别的)
第二个上下文指的的WebApplicationContext(IOC容器的上下文)由ContextLoaderListener创建的
第三个是 DispatcherServlet(SprinMVC级别的上下文)当DispatcherServlet启动的时候,它会创建Spring应用上下文,并加载配置文件或配置类中所声明的bean。
DispatcherServlet加载包含Web组件的bean,如控制器、视图解析器以及处理器映射,而ContextLoaderListener要加载 应用中的其他bean。这些bean通常是驱动应用后端的中间层和数据层组件。
SpringMVC的工作流程应该分为两个部分
第一部分为启动的SpringMVC
启动的时候DispatcherServlet加载包含Web组件的bean,如控制器、视图解析器以及处理器映射
第二部分为Spring MVC接受请求
DispatcherServlet的继承关系图
DispatchServlet本质上是一个Servlet,web容器启动的时候,servlet会初始化。下面是DispatchServlet的初始过程时序图。
总结:
SpringMVC启动的时候会加载dispatcher-servlet.xml启动IOC容器接着会加载SpringMVC的九大组件,其中最为重要的是HanderMapping,HandlerAdapter,
ViewResolver。
HanderMapping:用来保存Controller中配置的RequestMapping和Method的一个对应关系 HandlerAdapters 用来动态匹配Method参数,包括类转换,动态赋值 ViewResolvers:实现动态模板的解析 |
接受请求时
1.DispatcherServlet就是前端控制器接受请求,
2处理器映射(handler mapping) 处理器映射会根据请求所携带的URL信息来进行决策。(从初始化的list获取与URL匹配的handler)
3控制器(controller) 根据handler获取handlerAdapter,根据用户请求的参数信息,跟method中的参数信息进行动态匹配,通过反射invoke()方法进行调用返回ModelAndView,
4. 返回ModelAndView,
5.视图解析器(view resolver):根据返回的ModelAndView通过视图解析器解析成具体的视图返回结果