Spring Mvc源码架构

一,Spring MVC原理

原理解读,此篇博客已叙述详细,在此引用

二,Spring MVC架构
以下内容整理或引自《看透SpringMVC:源代码分析与实践》

 SpringMVC中Servlet一共有三个层次,分别是HttpServletBean、FrameworkServlet和DispatcherServlet。HttpServletBean直接继承自Java的HttpServlet,其作用是将Servlet中配置的参数设置到相应的属性;FrameworkServlet初始化了WebApplicationContext,DispatcherServlet初始化了自身的9个组件。
image
 三个Servlet的处理过程大致功能如下:
·HttpServletBean:没有参与实际请求的处理。
·FrameworkServlet:将不同类型的请求合并到了processRequest方法统一处理,processRequest方法中做了三件事:

·调用了doService模板方法具体处理请求。
·将当前请求的LocaleContext和ServletRequestAttributes在处理请求前设置到了LocaleContextHolder和RequestContextHolder,并在请求处理完成后恢复,
·请求处理完后发布了ServletRequestHandledEvent消息。  

·DispatcherServlet:doService方法给request设置了一些属性并将请求交给doDispatch方法具体处理。
 DispatcherServlet中的doDispatch方法完成SpringMVC中请求处理过程的顶层设计,它使用DispatcherServlet中的九大组件完成了具体的请求处理。

九个组件

1 HandlerMapping

它的作用是根据request找到相应的处理器Handler和Interceptors。

2 HandlerAdapter

可以理解为使用处理器干活的人。

3 HandlerExceptionResolver

此组件的作用是根据异常设置ModelAndView,之后再交给render方法进行渲染。

4 ViewResolver

ViewResolver用来将String类型的视图名和Locale解析为View类型的视图

5 RequestToViewNameTranslator

ViewResolver是根据ViewName查找View,但有的Handler处理完后并没有设置View也没有设置viewName,这时就需要从request获取viewName了,而如何从request获取viewName就是RequestToViewNameTranslator要做的事情。

6 LocaleResolver

解析视图需要两个参数:一个是视图名,另一个是Locale。视图名是处理器返回的(或者使用RequestToViewNameTranslator解析的默认视图名),LocaleResolver用于从request解析出Locale。

7 ThemeResolver

ThemeResolver从名字就可以看出是解析主题用的。

8 MultipartResolverMultipartResolver

用于处理上传请求,处理方法是将普通的request包装成MultipartHttpServletRequest,后者可以直接调用getFile方法获取到File,如果上传多个文件,还可以调用getFileMap得到FileName→File结构的Map,这样就使得上传请求的处理变得非常简单。

9 FlashMapManagerFlashMap

主要用在redirect中传递参数。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值