一、工作流程
通过第一节入门案例的学习,我们对SpringMVC的使用已经有了一个初步的了解。对于上篇博客中涉及到的各种组件,在文字中或许有些难理解,那我们就用图片来展示SpringMVC程序的执行情况。
- SpringMVC的工作原理:
- SpringMVC程序的完整执行流程如下:
- )用户通过浏览器向服务器发送请求,请求会被 Spring MVC 的前端控制器 DispatcherServlet 所拦截。
- DispatcherServlet 拦截到请求后,会调用 HandlerMapping 处理器映射器。
- )处理器映射器根据请求 URL 找到具体的处理器,生成处理器对象及处理器拦截器(如 果有则生成)一并返回给 DispatcherServlet。
- DispatcherServlet 会通过返回信息选择合适的 HandlerAdapter (处理器适配器)。
- HandlerAdapter 会调用并执行 Handler (处理器),这里的处理器指的就是程序中编写 的 Controller 类,也被称之为后端控制器。
- Controller 执行完成后,会返回一个 ModelAndView 对象,该对象中会包含视图名或包含模型和视图名。
- HandlerAdapter 将 ModelAndView 对象返回给 DispatcherServlet。
- DispatcherServlet 会根据 ModelAndView 对象选择一个合适的 ViewReslover (视图解 析器)。
- ViewReslover 解析后,会向 DispatcherServlet 中返回具体的 View (视图)。
- DispatcherServlet 对 View 进行渲染(即将模型数据填充至视图中)。
- 视图渲染结果会返回给客户端浏览器显示。
注意: 在上述执行过程中, DispatcherServlet、 HandlerMapping、 HandlerAdapter 和 ViewResolver 对象的工作是在框架内部执行的,开发人员并不需要关心这些对象内部的实现过程,只需要配置 前端控制器( DispatcherServlet ),完成 Controller 中的业务处理,并在视图中 (View) 中展示 相应信息即可。
二、DispatcherServlet讲解
DispatcherServlet 的全名是 org.spri ngframework. web .servlet. DispatcherServlet ,它在程序中,充当着前端控制器的角色。 在使用时,只需将其配置在项目的 web.xml 文件中,其配置代码如下:
<servlet>
<!--配置前端过滤-->
<serv1et-name>springmvc</servlet-name>
<serv1et-c1ass> org.springframework.web.servlet.DispatcherServlet </servlet-class>
<!--初始化时加载配置文件-->
<init-param>
<param-name>ContextConfigLocation</param-name>
<param-value>classpath:springmvc-config.xml</param-value>
</init-param>
<!--表示容榕在启动时立即加载 Servlet -->
<load-on-startup>l</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
在上述代码中, <load-on-startup>
元素和<init-param>
元素都是可选的。 如果<load-onstartup>
元素的值为 1 ,则在应用程序启动时会立即加载该 Servlet。如果<load-on-startup>
元素不存在,则应用程序会在第一个 Servlet 请求时加载该 Servlet。 如果<init-param>
元素存在并且通过其子元素配置了 Spring MVC 配置文件的路径,则应用程序在启动时会加载配置路径下的配置文件。如果没有通过<init-param>
元素配置,则应用程序会默认到 WEB-INF 目录下寻找如 下方式命名的配置文件。
servletName-servlet.xml
其中, servletName 指的是部署在 web.xml 中的 DispatcherServlet 的名称,在上面 web.xml 中的配置代码中即为 springmvc ,而-servlet.xml 是配置文件名的固定写法,所以应用程序会在 WEB-INF 下寻找 springmvc-servlet.xml。