跳至主要內容

2. SpringMVC 执行流程详解/三大核心组件和使用/头文件模板

安图新大约 3 分钟

2. SpringMVC 执行流程详解/三大核心组件和使用/头文件模板

1.1 SpringMVC 三大核心组件

  1. HandlerMapping 处理器映射器:建立地址与方法的映射。

HandlerMapping 负责根据用户请求 url 找到 Handler 即处理器,springmvc 提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。

  1. HandlerAdapter 处理器适配器:根据地址调用方法。

Handler 是继 DispatcherServlet 前端控制器的后端控制器,在 DispatcherServlet 的控制下 Handler 对具体的用户请求进行处理。

  1. ViewResolver 视图解析器:处理 ModelAndView 数据和视图。

ViewResolver 通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。

1.2 SpringMVC 执行流程图

 
 

1.3 Spring 执行流程具体步骤(参考图)

  1. 用户发送请求至前端控制器 DispatcherServlet。
  2. DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。
  3. 处理器映射器根据请求 url 找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet。
  4. DispatcherServlet 通过 HandlerAdapter 处理器适配器调用处理器。
  5. 执行处理器(Controller 层,也叫后端控制器)。
  6. Controller 执行完成返回数据和视图(ModelAndView)。
  7. HandlerAdapter 将 controller 执行结果 ModelAndView 返回给 DispatcherServlet。
  8. DispatcherServlet 将 ModelAndView 传给 ViewReslover 视图解析器。
  9. ViewReslover 解析后返回具体的 View 视图(JSP / HTML)。
  10. DispatcherServlet 对 View 进行渲染视图(即将模型数据填充至视图中)。
  11. DispatcherServlet 响应用户,用户看到界面和数据。

1.4 总结流程

Spring MVC所有的请求都经过 DispatcherServlet 来统一分发。DispatcherServlet 将请求分发给 Controller 之前,需要借助于 Spring MVC 提供的HandlerMapping 定位到具体的 Controller
HandlerMapping 接口负责完成客户请求到 Controller 映射。
Controller 接口将处理用户请求,这和 Java Servlet 扮演的角色是一致的。一旦 Controller 处理完用户请求,则返回 ModelAndView(数据和视图)对象给 DispatcherServlet 前端控制器。从宏观角度考虑,DispatcherServlet 是整个 Web 应用的控制器;从微观考虑,Controller 是单个 Http 请求处理过程中的控制器,而 ModelAndView 是 Http 请求过程中返回的模型(Model)和视图(View)。
返回的视图需要通过ViewResolver 接口(视图解析器)在 Web 应用中负责查找 View 对象,从从而将相应结果渲染给客户。

2. 创建 SpringMVC 的三大组件

SpringMVC 中默认提供的三大组件有可能过时,我们可以手动设置这三大组件,一般只需要设置ViewResolver 视图解析器,设置它的前缀prefix和后缀suffix

2.1 手动一个个的设置处理器映射器(不推荐)

<!--方式1:手动一个个设置 -->
  <!-- 处理器映射器 -->
  <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>

  <!--处理器适配器-->
  <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

2.2 模型驱动配置处理器映射器和处理器适配器,配置视图解析器【***】
<!--方式2:配置处理器映射器和处理器适配器 -->
  <!-- 在选择mvc标签时,一定要选择最后的路径是/mvc的选项 -->
  <!-- 这行配置可以替换掉上边的两行配置(一步步设置) -->
  <mvc:annotation-driven/>

  <!-- 配置视图解析器 -->
  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<!-- 前缀和后缀 相当于 //WEB-INF/jsp/Xxx.jsp--><!--定义页面路径的前缀--><property name="prefix" value="/WEB-INF/jsp/"/><!--定义页面路径的后缀--><property name="suffix" value=".jsp"/>
  </bean>

2.3【注意】如果 mvc 标签无效,头文件模板。

<mvc:annotation-driven/>无效,可能是头文件不对,下面是一个参考。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
​    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
​    xmlns:context="http://www.springframework.org/schema/context"
​    xmlns:mvc="http://www.springframework.org/schema/mvc"
​    xsi:schemaLocation="http://www.springframework.org/schema/beans
​    http://www.springframework.org/schema/beans/spring-beans.xsd
​    http://www.springframework.org/schema/context
​    http://www.springframework.org/schema/context/spring-context.xsd
​    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
上次编辑于:
贡献者: Andy