4.Spring MVC

Spring MVC的核心组件

九大核心组件:

  1. MultipartResolver:附件解析器
  2. LocaleResolver:
  3. ThemeResolver
  4. HandlerMapping
  5. HadnlerAdpater
  6. HandlerExceptionResolver
  7. RequestToViewNameTranslator
  8. ViewResolver
  9. FlashMapManager

最关键的四HandlerMapping+HandlerAdapter+HandlerExceptinResolver

描述一下DispatcherServlet的工作流程

  1. 客户端发起请求:请求被Spring MVC的DispatcherServlet捕获
  2. 映射处理器:DispatcherServlet根据请求的URL,调用HandleMapping获取到该Handler配置的所有相关对象,最后以HandlerExcutionChain对象的形式返回(HandlerExcutionChain对象中包含对应的Handler对象和拦截器们)
  3. 处理适配器:DispatcherServlet根据获取到的Handler,选择一个合适的HandlerAdapter (成功获取HandlerAdapter后,执行拦截器的preHandler()方法)
    然后根据请求Request中的模型数据,填充Hadnler入参,开始执行Handler(Controller)。这个时候在填充Handler的入参过程中,可以根据配置,Spring提供做一些额外的工作:比如数据转换、数据格式化、数据校验
    Handler(Controller)执行完后,会向DispatcherServlet返回一个ModelAndView对象
  4. 解析视图:根据返回的ModelAndView,选择一个适合ViewResolver(必须是已注册到spring容器中的),解析出View对象后,返回给DispatcherServlet
  5. 渲染视图+响应请求

注:由于现在的前后分离,spring只会负责Model和Controller两块,而将View交给前端做。所以4,5步骤可能不会做了。如果方法上有@ResponseBody注解,则会将解析到的结果直接写回客户端

WebApplicationContext

WebApplicationContext是实现ApplicationContext接口饿子类,专门为WEB应用准备:

  1. 它允许从相对于web根目录的路径中加载配置文件,完成初始化spring mvc自检的工作
  2. 从WebApplicationContext中,可以获取ServletContext引用,整个web应用上下文对象将作为属性放置在ServletContext中,以便应用环境可以访问spring上下文

Spring MVC的异常处理?

Spring mvc提供了异常解析器HandlerExceptionResolver接口,将处理器Hander执行时发生的异常解析成对应的ModelAndView

Spring MVC优点

  1. 使用方便,可以使用注解的方式添加一些类HTTP请求方法映射的方法,和不同数据格式的响应
  2. 提供拦截器机制,可以方便的对请求进行拦截
  3. 提供异常机制,可以统一异常处理
  4. 可以使用不同的视图技术

Spring MVC的Controller是不是单例?

绝大多数情况下,是单例,但这个需要考虑到Spring Bean的生命周期

Spring MVC的拦截器和Filter过滤器的区别?

  1. 功能相同
  2. 容器不同:拦截器是构建spring mvc体系中,filter构建在servlet容器上
  3. 使用便利度不同:拦截器提供三个方法,在不同时机执行;过滤器仅提供一个方法

猜你喜欢

转载自blog.csdn.net/qq_37629227/article/details/112916912