SpringMVC原理学习

爱莲说 2016-02-19

SpringMVC框架的核心构件

1、Dispatcher Servlet

2、Controller

3、Handler Mapping

4、ViewResolver  & View

5、Interceptors

6、LocalResolver

7、Validate  

 

SpringMVC框架实现的功能

1. 以Controller为中心完成对系统流程的控制管理

2. 对请求数据的收集

3. 对传入的参数进行验证

4.更加请求调用相应的业务逻辑完成数据处理

5. 将处理结果返回给试图

6. 国际化的支持

7. 提供不同视图的支持方案

8. 标签库

9. 拦截器

10. 对文件上传、下载的支持

 

Spring MVC的原理框图

SpringMVC原理学习

 

整个处理过程从一个HTTP请求开始:
1)DispatcherServlet接收到请求后,根据对应配置文件中配置的处理器映射,找到对应的处理器映射项(HandlerMapping),根据配置的映射规则,找到对应的处理器(Handler)。
2)调用相应处理器中的处理方法,处理该请求,处理器处理结束后会将一个ModelAndView类型的数据传给DispatcherServlet,这其中包含了处理结果的视图和视图中要使用的数据。
3)DispatcherServlet根据得到的ModelAndView中的视图对象,找到一个合适的ViewResolver(视图解析器),根据视图解析器的配置,DispatcherServlet将视图要显示的数据传给对应的视图,最后给浏览器构造一个HTTP响应。
DispatcherServlet是整个Spring MVC的核心。它负责接收HTTP请求组织协调Spring MVC的各个组成部分。其主要工作有以下三项:
1)截获符合特定格式的URL请求。
2)初始化DispatcherServlet上下文对应的WebApplicationContext,并将其与业务层、持久化层的WebApplicationContext建立关联。
3)初始化Spring MVC的各个组成组件,并装配到DispatcherServlet中。

 

DispatcherServlet是怎么把请求映射到对应的处理器上的?

Spring MVC中的DispatcherServlet收到一个请求后经过HandlerMapping会得到一个处理器链(HandlerExecutionChain)对象。它包括了处理这个请求的处理器和若干个对请求进行拦截处理的拦截器(HandlerInterceptor)。

 

处理器链的工作原理如下图:

SpringMVC原理学习

 

通过图示我们可以发现,处理器链在处理请求的时候首先要经过所有的拦截器,然后通过HandlerAdapter来执行处理器。
HandlerExecutionChain定义了如下的两个接口方法:
Object getHandler():返回处理请求的处理器对象。
HandlerInterceptor[] getInterceptors():返回处理器调用前后的拦截器数组。
拦截器HandlerInterceptor接口定义了如下3个方法:
boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handler):在请求到达Handler之前,先执行这个前置方法。
void postHandle(HttpServletRequest request,HttpServletResponse response,Object handler,ModelAndView modelAndView):在请求被处理器执行后执行。
void afterCompletion(HttpServletRequest request,HttpServletResponse response,Object handler,Exception ex):在相应被渲染后执行。
HandlerAdapter接口定义如下:
ModelAndView handle(HttpServletRequest request,HttpServletResponse response,Object handler):使用处理器处理请求。
boolean supports(Object handler):判断处理器适配器是否支持这个Handler类型。
下面我们回过头来再来了解一下HandlerMapping。HandlerMapping的作用就是根据请求产生一个HandlerExecutionChain。具有如下几个属性:
interceptors:拦截器列表。
defaultHandler:默认处理器。
order:处理器的优先级。
alwaysUseFullPath:boolean类型,用于设定映射是绝对路径还是相对路径。默认值为false,相对路径。
urlPathHelper:指定分析URL时的UrlPathhelper。

相关推荐