什么是springmvc

springMVC 是基于servlet api构建的web框架,和spring相辅相成,springMVC被包含在spring-web-MVC模块中

spring mvc 有什么特点

  • 基于注解的URL映射
  • 参数封装,包括http参数表达转换
  • 全局统一异常处理
  • 提供拦截器,基于框架本身的拦截器
  • 方便开发restful风格的api

springMVC中的组件

DispatchServlet

核心控制器,也叫前端控制器,spring中核心的组件,基于servlet实现。负责处理请求逻辑。处理方法DispatchServlet#doDispatch

HandlerMapping

处理器映射,根据url可以找到具体的Controller(在spring中被称为Handler)。提供了几种不同的实现

  • BeanNameUrlHandlerMapping 基于ioc容器中以"/"开头的Bean映射
  • SimpleUrlHandlerMapping 手动配置url与Controller之间的映射关系
  • springmvc 响应忽略_springmvc 响应忽略

  • RequestMappingHandlerMapping 基于@RequestMapping注解配置的映射关系

HandlerAdapter

用于接受HandlerMapping中找到的Handler,并判断该Handler是否受支持,如图:

springmvc 响应忽略_MVC_02

将接收到的handler交由具体的HandlerAdapter执行,并返回视图(是否真的返回视图,需要由具体的的handler决定)

springmvc 响应忽略_java_03

springMVC采用适配器模式来适配调用具体的Handler,根据Handler不同类别采用不同Adapter,Handler与Adapter具体的对应关系如下:

Handler类别

对应适配器

描述

Controller

SimpleControllerHandlerAdapter

标准控制器,返回ModelAndView

Servlet

SimpleServletHandlerAdapter

基于servlet的处理,调用service方法

HttpRequestHandler

HttpRequestHandlerAdapter

只处理逻辑,和Servlet#service方法一样,无方法返回值

HandlerMethod

RequestMappingHandlerAdapter

基于@RequestMapping注解的处理,最常用的Handler的写法

springmvc 响应忽略_spring boot_04

HandlerExecutionChain

处理器执行链,这里面封装了具体的Handler和对应的HandlerInterceptor

springmvc 响应忽略_java_05

找到对应的Handler的时候,也就意味着找到了对应的Interceptor

springmvc 响应忽略_MVC_06

springmvc 响应忽略_java_07

springmvc 响应忽略_MVC_08

viewResolver

视图解析器,通过视图解析器解析出对应的视图(View)

springmvc 响应忽略_MVC_09

springmvc 响应忽略_spring_10

springmvc 响应忽略_spring_11

HandlerExceptionResolver

处理器异常解析,处理整个Handler执行过程出出现的异常,出现异常之后,渲染指定的视图。

springmvc 响应忽略_springmvc 响应忽略_12

附一张草图

springmvc 响应忽略_spring boot_13