SpringMVC #
Spring Web MVC,Spring七大功能之一,就是这里springMVC框架,它主要是一种采用MVC设计模式的表现层框架
它同样跟Servlet一样,遵循:请求 - 响应模式;同样使用HTTP通讯协议,完成前后端的数据交互
Servlet存在的缺陷 #
-
太过于依赖Servlet API,强制要求必须继承HTTPServlet
-
太过于依赖tomcat容器了,这就导致开发或测试非常的麻烦
-
太过于依赖具体的页面技术,例如:JSP
Spring MVC的优点 #
- 采用MVC架构模式,以及服务到工作者的架构模式,将表现层同过多种内置组件定义得更加清晰,让页面控制器显示的更加精炼
- Spring MVC是Spring框架的7大功能之一,天然支持Spring
- 由于Spring MVC配置多,但更简单、独立(按需配置)
- 代码的可重用性很高。通常Spring MVC的配置文件,几乎可以支持任何系统的配置)
- 扩展性高。Spring MVC依旧是免费开源的产品,如果功能不够,可以修改源码
MVC设计模式 #
MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。MVC模式最早为Trygve Reenskaug提出,为施乐帕罗奥多研究中心(Xerox PARC)的Smalltalk语言发明的一种软件设计模式。MVC可对程序的后期维护和扩展提供了方便,并且使程序某些部分的重用提供了方便。而且MVC也使程序简化,更加直观。
- 控制器(Controller):对请求进行处理,负责请求转发;
- 视图(View):界面设计人员进行图形界面设计;
- 模型(Model):程序编写程序应用的功能(实现算法等等)、数据库管理;
Spring MVC的主要组件 #
DispatcherServlet(前端、核心控制器)- Spring的MVC框架是围绕DispatcherServlet来设计的,它用来处理所有的HTTP请求和响应。此模块不需要程序员开发。
- 是整个流程控制的中心,由它调用其它组件处理用户的请求
- 的存在降低了组件之间的耦合性,系统扩展性提高。由框架实现
HandlerMapping(处理器映射器)- HandlerMapping负责根据用户请求的url找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,根据一定的规则去查找,例如:xml配置方式,实现接口方式,注解方式等。由框架实现
Handler(处理器)- Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。
HandlAdapter(处理器适配器)- 通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。由框架实现。
ModelAndView(模型与视图)- 是springmvc的封装对象,将model和view封装在一起。
ViewResolver(视图解析器)- ViewResolver负责将处理结果生成View视图,ViewResolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
View(视图)- 是springmvc的封装对象,是一个接口, springmvc框架提供了很多的View视图类型,包括:jspView、pdfView、freemarkerView等。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。
页面控制器 #
Spring MVC的详细架构图 #
- 用户发送请求至前端控制器
DispatcherServlet; DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;- 处理器映射器根据请求
url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet; DispatcherServlet调用HandlerAdapter处理器适配器;HandlerAdapter经过适配调用 具体处理器(Handler,也叫后端控制器);Handler执行完成返回ModelAndView;HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;ViewResolver解析后返回具体View;DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)DispatcherServlet响应用户。