2015年(8)
分类: 架构设计与优化
2015-07-27 12:59:26
下面这张图是Spring mvc处理请求的整体流程,其中Front controller指的是DispatcherServlet类。
1.客户端所有的请求都会发送到DispatcherServlet,由DispacherServlet处理。
2.DispacherServlet将请求分发到不同的Controller类,由Controller类去处理对应的请求。
3.Controller类将对应的请求处理完后,将处理后对应的model或者视图信息给将DispatcherServlet类。
4.DispatcherServlet将这些信息交由视图模版解析。
5.视图模版解析到的对应视图信息等传给DispacherServlet。
6.最后由DispacherServlet将视图信息推送响应给客户端。
如果返回true,则继续往后处理,否则停止方法调用处理。(前置拦截方法执行调用)
5.调用HandlerAdapter适配器实例的handler方法去处理当前请求,并返回对应的ModelAndView对象。(调用目标对象的对应方法执行)
6.调用HandlerExecutionChain实例的applyPostHandler方法,去调用其拦截器的postHandler方法(后置拦截方法)执行。(后置拦截方法执行调用)
7.调用processDispatchResult方法去处理最后结果(ModelAndView或者异常),该方法调用render方法去渲染解析最后视图。在render方法中首先通过ViewResolver解析器去获取对应的视图名称的视图View对象,最后在调用对应View对象的render方法渲染处理视图,并响应对应结果给客户端。(调用对应View渲染视图)
如上,DispatcherServlet类实际分发处理请求主要有如下几个重要步骤。将HandlerMapping和对应的拦截器包装在一个HandlerExecution实例对象;然后获取该HandlerMapping想匹配的HandlerAdapter适配器;之后调用前置拦截器方法,如果返回true,则调用适配器去处理当前请求,并返回对应的ModelAndView对象;然后在调用后置拦截器方法;最后调用ViewResolver视图解析器解析出对应的视图View对象,并调用View对象去渲染视图,并响应对应结果给客户端。
如下列出Spring Mvc处理请求所设计到的重要接口和类。
HandlerMapping接口、HandlerInterceptor拦截器接口和其包装类MappedInterceptor、HandlerExecutionChain类、HandlerAdapter适配器接口、ViewResolver视图解析器接口、View接口、HttpMessageConvert消息转换接口
java企业级通用权限安全框架源码 SpringMVC mybatis or hibernate+ehcache shiro druid
bootstrap HTML5