文章目录
Spring MVC的核心组件
九大核心组件:
- MultipartResolver:附件解析器
- LocaleResolver:
- ThemeResolver
- HandlerMapping
- HadnlerAdpater
- HandlerExceptionResolver
- RequestToViewNameTranslator
- ViewResolver
- FlashMapManager
最关键的四HandlerMapping+HandlerAdapter+HandlerExceptinResolver
描述一下DispatcherServlet的工作流程
- 客户端发起请求:请求被Spring MVC的DispatcherServlet捕获
- 映射处理器:DispatcherServlet根据请求的URL,调用HandleMapping获取到该Handler配置的所有相关对象,最后以HandlerExcutionChain对象的形式返回(HandlerExcutionChain对象中包含对应的Handler对象和拦截器们)
- 处理适配器:DispatcherServlet根据获取到的Handler,选择一个合适的HandlerAdapter (成功获取HandlerAdapter后,执行拦截器的preHandler()方法)
然后根据请求Request中的模型数据,填充Hadnler入参,开始执行Handler(Controller)。这个时候在填充Handler的入参过程中,可以根据配置,Spring提供做一些额外的工作:比如数据转换、数据格式化、数据校验
Handler(Controller)执行完后,会向DispatcherServlet返回一个ModelAndView对象 - 解析视图:根据返回的ModelAndView,选择一个适合ViewResolver(必须是已注册到spring容器中的),解析出View对象后,返回给DispatcherServlet
- 渲染视图+响应请求
注:由于现在的前后分离,spring只会负责Model和Controller两块,而将View交给前端做。所以4,5步骤可能不会做了。如果方法上有@ResponseBody注解,则会将解析到的结果直接写回客户端
WebApplicationContext
WebApplicationContext是实现ApplicationContext接口饿子类,专门为WEB应用准备:
- 它允许从相对于web根目录的路径中加载配置文件,完成初始化spring mvc自检的工作
- 从WebApplicationContext中,可以获取ServletContext引用,整个web应用上下文对象将作为属性放置在ServletContext中,以便应用环境可以访问spring上下文
Spring MVC的异常处理?
Spring mvc提供了异常解析器HandlerExceptionResolver接口,将处理器Hander执行时发生的异常解析成对应的ModelAndView
Spring MVC优点
- 使用方便,可以使用注解的方式添加一些类HTTP请求方法映射的方法,和不同数据格式的响应
- 提供拦截器机制,可以方便的对请求进行拦截
- 提供异常机制,可以统一异常处理
- 可以使用不同的视图技术
Spring MVC的Controller是不是单例?
绝大多数情况下,是单例,但这个需要考虑到Spring Bean的生命周期
Spring MVC的拦截器和Filter过滤器的区别?
- 功能相同
- 容器不同:拦截器是构建spring mvc体系中,filter构建在servlet容器上
- 使用便利度不同:拦截器提供三个方法,在不同时机执行;过滤器仅提供一个方法