首先在web项目的web.xml文件中配置springMVC的前端控制器DispatcherServlet:

<web-app>
<!--  配置springMVC的前端控制器DispatcherServlet-->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--    初始化参数,配置springMVC的配置文件的位置及其名称-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
    <!--  表示容器在启动时立即加载dispatcherServlet-->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

以上配置的目的在于,让web容器使用SpringMVC的DispatcherServlet,并通过设置url-pattern为“/”,将用户的所有url请求都映射到这个DispatcherServlet。在配置DispatcherServlet的时候,通过设置contextConfiguration参数来指定SpringMVC配置文件的位置,通常springmvc.xml配置文件放在resource目录下。

下面来简单总结一下spring MVC的请求处理流程:
当用户发送URL请求时(例如:http://localhost:8080/hello)。根据web.xml中配置的springMVC前端控制器DispatcherServlet的配置,该请求被DispatcherServlet拦截,并根据HandlerMapping找到处理相应请求的Controller控制器类。Controller控制器类处理完成后,返回ModelAndView对象,DispatchServlet前端控制器经过一系列处理后,将根据视图解析器把Controller返回的逻辑视图名渲染成真正的试图并呈现给用户。

以下是SpringMVC的详细处理流程图:

spring请求排队 spring 请求过程_mvc


按流程图可以得知,springMVC的详细处理流程:

  1. 用户发起一个request请求,此请求被前端控制器DispatcherServlet拦截;
  2. 前端控制器请求处理器映射器HandlerMapping去查找Handler,可以通过XML配置或者注解去查找;
  3. 处理器映射器根据请求URL找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成),并返回给前端控制器;
  4. 前端控制器请求处理器适配器HandlerAdapter去执行相应的Handler(这些Handler就是Controller类);
  5. 处理器适配器会调用并执行Handler处理器(就是程序中编写的Controller控制器类)。在请求信息到达真正调用Handler的处理方法之前的这段时间内,springMVC还完成了许多工作:
  • 消息转换:将请求消息如json等数据转换成一个对象,将对象转换成指定的响应信息。
  • 数据类型转换:对请求的消息进行数据转换,例如把String转换成Integer、Boolean等。
  • 数据格式化:将请求的消息进行数据的格式化,例如将字符串格式化成日期类型等。
  • 数据验证:对数据的有效性进行检验,例如检验传入的数据的长度和格式等是否符合要求,验证结果会存储进入BindingResult或Error中。
  1. Controller执行完毕后会返回给处理器适配器一个ModelAndView对象,该对象中会包含View的视图信息或包含Model的数据模型和View视图信息;
  2. 处理器适配器接收到Controller返回的ModelAndView之后,将ModelAndView返回给前端控制器;
  3. 前端控制器接收到ModelAndView之后会选择一个合适的视图解析器ViewReslover对视图进行解析;
  4. 视图解析器解析之后,会根据View视图信息匹配到相应的视图结果,反馈给前端控制器;
  5. 前端控制器收到View视图后,进行视图渲染,将模型数据(在ModelAndView对象中)填充到request域中;
  6. 前端控制器response响应用户请求结果。

以上就是springMVC的请求处理结果。其中用到组件有前端控制器DispatcherServlet,处理器映射器HandlerMapping、处理器适配器HandlerAdapter、Handler处理器(Controller控制器类)、视图解析器ViewResolver、视图View和视图模型ModelAndView。其中前端控制器、处理器映射器、处理器适配器、视图解析器的工作都是由spring框架完成,程序员不需要关心这些对象内部的具体实现过程,只需要配置好DispatcherServlet,完成处理器Handler(Controller类)的业务逻辑,并在视图中展示页面信息即可。