Spring MVC体系概述
Spring MVC框架围绕DispatcherServlet这个核心展开,DispatcherServlet是Spring MVC的总导演、总策划,它负责截获请求并将其分派给相应的处理器处理。Spring MVC框架包括注解驱动控制器、请求及响应的信息处理、视图解析、本地化解析、上传文件解析、异常处理及表单标签绑定等内容。
Spring MVC体系结构
Spring MVC是基于Model 2实现的技术框架,Model 2是经典的MVC(Model、View、Control)模型在Web应用中的变体,这个改变主要源于HTTP协议的无状态性。Model 2的目的和MVC一样,也是利用处理器分离模型、视图和控制,达到不同技术层级间松散层耦合的效果,提高系统灵活性、复用性和可维护性。
从接收请求到返回相应,Spring MVC框架的众多组件通力配合、各司其职,有条不紊地完成分内工作。在整个框架中,DispatcherServlet处于核心的位置,它负责协调和阻止不同组件以完成请求处理并返回相应的工作。和大多数Web MVC框架一样,Spring MVC通过一个前端Servlet接受所有的请求,并将具体工作委托给其他组件进行处理,DispatcherServlet就是Spring MVC的前端Servlet。
- 整个处理过程始于客户端发出一个HTTP请求,Web应用服务器接受到这个请求。如果匹配DispatcherServlet的请求映射路径(在web.xml)中指定,则Web容器将该请求转交给DispatcherServlet处理。
- DispatcherServlet接受到请求后,将根据请求的信息(包括URL、HTTP方法、请求报文头、请求参数、Cookie等)及HandlerMapping的配置找到处理请求的处理器(Handler),可将HandlerMapping看作路由控制器,将Handler看作目标主机。在Spring MVC中并没有定义一个Handler接口,实际上,任何一个Object都可以成为请求处理器。
- 在DispatcherServlet根据HandlerMapping得到对应当前请求的Handler后,通过HandlerAdapter对Handler进行封装,再以统一的适配器接口调用Handler。HandlerAdapter是Spring MVC的框架级接口,顾名思义,HandlerAdapter是一个适配器,它用统一的接口对各种Handler方法进行调用。
- 处理器完成业务逻辑的处理后将返回一个ModelAndView给DispatcherServlet,ModelAndView包含了视图逻辑名和模型数据信息。
- ModelAndView中包含的是“逻辑视图名”而非真正的视图对象,DispatcherServlet借由ViewResolver完成逻辑视图名到真实视图对象的解析工作。
- 当得到真实视图对象View以后 ,DispatcherServlet就使用这个View对象对ModelAndView中的模型数据进行视图渲染。
- 最终客户端得到的响应信息可能是一个普通的HTML页面,也可能是XML或JSON串。
DispatcherServlet
DispatcherServlet是Spring MVC的核心,它负责接收HTTP请求并协调SpringMVC的各个组件完成请求处理工作。和其他Servlet一样,用户必须在web.xml中配置好DispatcherServlet。
Spring如何将上下文中的Spring MVC组件装配到DispatcherServlet中
DispatcherServlet的initStategies()方法将在WebApplicationContext初始化后自动执行,此时Spring上下文中的Bean已经初始化完毕。该方法的工作原理是:通过反射机制查找并装配Spring容器中用户显式自定义的组件Bean,如果找不到就装配默认的组件实例。