SpringMVC作为一种前端控制器的实现形式,
1.dispatcherServlet
就是它的前端控制器。浏览器端用户的请求正是通过DisPatcherServlet进行了分发 ,到达了合适的Controller,来生产所需的业务数据Model,这个Model再通过DispatcherServlet进行传递,传递给View,来完成最终页面呈现。SpringMVC对数据的业务逻辑与页面实现相分离就是通过DispatcherServlet来实现的。Controller就是调用业务逻辑生成Model的地方。
2.HandlerAdapter,
Handler是在DispatcherServlet内部实现的一个类,其实就是Controller的一个表现形式,在SpringMVC中并没有一个抽象类或接口叫Controller,但是有一个Annotation标签,这个标签就是为了去识别Controller而引入的,DispatcherServlet就是通过这个标签识别Controller,调用的Controller是以Handler形式出现的,HandlerAdapter是一个适配器模式,就是将各种不同类型的Handler适配成DispatcherServlet可以使用的Handler,这样DispatcherServlet就可以很轻松的调用控制器。
Handler是调用Controller的一种中间过渡对象
3.HandlerInterceptor(一个接口,有preHandle,postHandle,aftercompletion三个方法)
是一个拦截器,就是在需要被拦截对象的两侧,如果配置一个实现了它的类,就可以在真正调用Controller之前和之后加一些料,以及最终这个Model发送到View,完成呈现之后,可以做很多事情。
4.HandlerMapping
Mapping就是前端控制器(MVC)与uController之间映射关系的一种类,HandlerMapping就是告诉DispatcherServlet,请求到了之后,由哪个Controller来响应这个请求,在HandlerMapping工作网之后,可以给DispatcherServlet一个HandlerAdapter,这个HandlerAdapter就包括了核心的内容是某个具体的Controller的实例,在一个就是这个Controller需要被包裹的HandlerIntercept它们会构成一个执行的链条往下走。
5.HandlerExceptionChain,
HandlerMapping返回给我们东西其实包含了HandlerAdapter和HandlerIntercept,它们之间构成一个执行链,需要先执行所有的HandlerIntercept的prehandle,然后调用某个Controller下的业务方法,然后是postHandle,最后是afterCompletion,看源码的话,会发现这里用到了Java的反射机制,
6.ModelAndView
SpringMVC中对Model的一种表现形式,SpringMVC中还有其它的类,叫Model,当然也可以使用Map类实现Model的功能,在Controller使用Model或者Map,DispatcherServlet类都会将它转换ModelAndView,因此将ModelAndView看做Model的一个具体表现。
7.ViewResolver
帮助DispatcherServlet找出那一个我们需要的视图对象,像jstl,jsp,tiles
总的流程
浏览器的request到达DispatcherServlet,DispatcherServlet铜锅Mapping找到Controller,通过HandlerMapping配置Annotation来实现,通过Annotatioin来告诉HandlerMapping哪个Controller是我们需要的,找到Controllerza,找到了HandlerIntercepter,把它们形成了一个Handlerexceptionchain执行链条,然后作为Handler/HandlerAdapter返回给DispatcherServlet,选Controller的目的是生成模型ModelAndView,为页面的显示提供数据,模型生成之后被返还给DispatcherServlet,然后调用视图解析器ViewResolver的方法,返回View对象,然后模型数据ModelAndView就传给view。告诉DispatcherServlet哪个视图是用来解析当前这种场景的,