什么是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之间的映射关系
- RequestMappingHandlerMapping 基于@RequestMapping注解配置的映射关系
HandlerAdapter
用于接受HandlerMapping中找到的Handler,并判断该Handler是否受支持,如图:
将接收到的handler交由具体的HandlerAdapter执行,并返回视图(是否真的返回视图,需要由具体的的handler决定)
springMVC采用适配器模式来适配调用具体的Handler,根据Handler不同类别采用不同Adapter,Handler与Adapter具体的对应关系如下:
Handler类别 | 对应适配器 | 描述 |
Controller | SimpleControllerHandlerAdapter | 标准控制器,返回ModelAndView |
Servlet | SimpleServletHandlerAdapter | 基于servlet的处理,调用service方法 |
HttpRequestHandler | HttpRequestHandlerAdapter | 只处理逻辑,和Servlet#service方法一样,无方法返回值 |
HandlerMethod | RequestMappingHandlerAdapter | 基于@RequestMapping注解的处理,最常用的Handler的写法 |
HandlerExecutionChain
处理器执行链,这里面封装了具体的Handler和对应的HandlerInterceptor
找到对应的Handler的时候,也就意味着找到了对应的Interceptor
viewResolver
视图解析器,通过视图解析器解析出对应的视图(View)
HandlerExceptionResolver
处理器异常解析,处理整个Handler执行过程出出现的异常,出现异常之后,渲染指定的视图。
附一张草图