SpringMVC整体结构介绍!
SpringMVC整体结构介绍!
月伴飞鱼SpringMVC是一个基于Servlet容器的Web应用框架。
- Servlet容器通常指Tomcat等服务容器。
Servlet容器会负责监听端口消息并映射为Request/Response对象,然后交给Servlet实例去处理。
SpringMVC框架的作用核心就是Servlet实例。
- 这个实例在Spring中默认是DispatcherServlet。
客户端(浏览器)发送请求,直接请求到 DispatcherServlet。
DispatcherServlet 根据请求信息调⽤ HandlerMapping,解析请求对应的 Handler。
解析到对应的 Handler (也就是 Controller 控制器)后,开始由HandlerAdapter 适配器处理。
HandlerAdapter 会根据 Handler 来调⽤真正的处理器开处理请求,并处理相应的业务逻辑。
处理器处理完业务后,会返回⼀个 ModelAndView 对象, Model 是返回的数据对象。
ViewResolver 会根据逻辑 View 查找实际的 View。
DispaterServlet 把返回的 Model 传给 View(视图渲染)。
把 View 返回给请求者(浏览器)。
核心组件DispatcherServlet
在Spring容器启动阶段读取映射规则,如RequestMapping。
在请求到来的时候,按照加载的请求映射规则找到合适的处理方法。
当处理请求的过程中出现了异常,对异常进行处理,如返回合适的界面或状态码。
解析返回View的主题、时区等信息。
渲染返回的视图。
请求映射HandlerMapping
请求映射用于根据请求找到该请求需要调用的所有方法,包含过滤器和处理方法等。
比较常用的一种请求映射是RequestMappingHandlerMapping。
- 从名称上可以看出来这个HandlerMapping是用于处理
@RequestMapping
注解请求映射的类。该类的主要作用是在收到请求之后,按顺序拿到所有需要调用的方法(主要包含拦截器和处理方法),然后一一调用这些方法。
拦截器HandlerInterceptor
Spring的拦截器可以灵活的在请求处理前、请求处理后和请求完成三个阶段自定义操作,比如用户权限校验等。
处理方法Handler
处理方法在DispatcherServlet定义为Object类型,如果使用了
@RequestMapping
来根据请求查找处理方法,那么查找到的处理方法就是HandlerMethod
类型,对应于Controller中添加了对应RequestMapping的方法。
处理方法适配器HandlerAdapter
DispatcherServlet从HandlerMapping中获取到的处理方法是Object类型,意味着不同的处理方法可能返回不同的对象。
DispatcherServlet本身是一个调度器,不应该关注如何调用不同的处理方法。
- 所以Spring提供了HandlerAdapter列表用户处理不同的调度方法。
异常处理HandlerExceptionResolver
HandlerExceptionResolver用于处理请求过程中出现的异常。
- 日常开发中使用比较多的是ExceptionHandlerExceptionResolver,也就是
@ExceptionHandler
注解。
@ExceptionHander
可以放在@ControllerAdvice
注解的类中,表示对所有的Controller都会生效。