概述
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts 2(一般老项目使用)等。
运行过程
- DispatcherServlet:分发器,所有的请求都由它来统一分发,请求会被分发给对应的Handler。
- HandlerMapping:处理器映射器,解析请求链接,根据请求链接找到执行这个请求的Handler。
- HandlerAdapter:处理器适配器,调用具体的Handler处理用户请求。
- Controller:页面控制器(Handler的一种),处理用户请求,处理完成后将 ModelAndView 对象返回给 DispatcherServlet。
- ViewResolver:视图解析器,用于解析 MdoelAndView,将 MdoelAndView 中的逻辑视图名变为一个真正的 View 对象,并将 MdoelAndView 中的 Model 取出。
逻辑运行过程:
- :Client发起请求到DispatcherServlet。
- :DispatcherServlet请求HandlerMapping查找对应Handler 。
- :HandlerMapping向DispatcherServlet返回Handler(HandlerMapping会把Handler映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象,多个HandlerInterceptor拦截器对象),通过这种策略模式,很容易添加新的映射策略)。
- :DispatcherServlet调用HandlerAdapter去执行Handler。
- :HandlerAdapter将会根据适配结果执行Handler(Controlelr)。
- :Handler执行完成后向HandlerAdapter返回ModelAndView。
- :HandlerAdapter向前端控制器返回ModelAndView。
- :DispatcherServlet请求ViewResolver去进行视图解析 (根据逻辑视图名解析成真正的视图(jsp)),通过这种策略很容易更换其他视图技术,只需要更改ViewResolver即可。
- :ViewResolver向DispatcherServlet返回View。
- :DispatcherServlet进行视图渲染 (视图渲染将模型数据(在ModelAndView对象中)填充到request域)。
- :DispatcherServlet向用户响应结果 。
物理运行过程:
- 客户端发送请求,被DispatcherServlet拦截,进入其service()。
- service()截取请求url的字符串获取有效的url。
- service用url去spring mvc的子容器handlerMpping中的map集合中寻找映射关系(读取方法),并将查找将结果返回给service()。
- service()用handlerMpping返回结果去springmvc的子容器中得到指定Controller对象, 并用HandlerAdaper反射调用映射指定的方法,把方法的返回值给service()。
- service()接收到了Model数据和View的页面名称,把ModelAndView(视图解析器)送给内部资源视图解析器中把Model数据渲染到页面上,view拼装响应的url,并把渲染后的数据返回service()。
- service()把数据响应给客户端,service()调用完毕,以后循环往复。