一、回顾MVC
1.1 概述
- MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范。
- 目的是将数据、业务逻辑、显示分离的方法来组织代码。
- MVC主要作用是降低了视图与业务逻辑间的双向耦合。
- MVC不是一种设计模式,而是一种架构模式。当然不同的MVC之间存在一定的差异。
Model(模型):数据模型,提供展示的数据,因此包含数据(Dao)与动作(Service)。
View(视图):负责进行模型的展示,一般是我们见到的界面。
Controller(控制器):接收用户请求,委托给模型进行处理(状态改变),处理完毕之后把返回的模型数据返回给视图,由视图负责展示。也就是说控制器充当了调度员的工作。
最典型的MVC架构模式就是:Jsp + Servlet + JavaBean。
1.2 早期MVC的执行流程
- 用户发起请求
- Servlet接收请求数据,并调用相应的业务逻辑方法
- 业务处理完毕之后,返回相应的数据给Servlet
- Servlet转向到JSP,并把数据给Jsp且渲染页面
职责分析:
Controller(控制器):
- 取得表单数据
- 调用业务逻辑
- 重定向到制定的页面
Model(模型):
- 业务逻辑
- 保存数据的状态
View(视图):
- 显示界面
1.3 说明
常见的服务器端MVC框架有:Struts、SpringMVC、ASP.NET MVC、Zend Framework、JSF
常见的前端MVC框架有:Vue、Angularjs、react、backbone
由MVC演进出了另一些模式有:MVVM、MVP等等
MVVM: Model + View + ViewModel(视图模型:双向绑定)
二、什么是Spring MVC
2.1 概述
Spring MVC是Spring Framework的一部分,是基于Java实现的轻量级Web框架。
Spring MVC的底层是Servlet。
Spring的web框架围绕DispatcherServlet【Servlet】设计。DispatcherServlet的作用是将请求分发到不同的处理器。
2.2 Spring MVC的特点
- 轻量级,简单易学
- 高效,基于请求响应的MVC框架
- 与Spring兼容性好,无缝结合(比如我们可以将SpringMVC中所有要用到的bean,都注册到Spring中)
- 约定优于配置
- 功能强大,有Restful风格、数据验证、格式化、本地化、国际化、主题、拦截器等等
- 简洁灵活
2.3 Spring MVC的执行过程
2.4 Spring MVC的执行原理
图为SpringMVC的一个完整的流程图,实线为SpringMVC框架已经提供好的技术,不需要开发者实现,虚线表示需要开发者实现。
简要分析执行流程:
- DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发送请求,DispatcherServlet先接收并拦截请求。
- HandlerMapping为处理器映射。DispatcherServlet调用HandlerMapping,HandlerMapping根据请求URL寻找Handler。
- HandlerExecution表示具体的Handler,其主要作用是根据URL查找控制器。
- HandlerExecution将解析后的信息传递给DispatcherServlet,如解析处理器映射等。
- HandlerAdapter表示处理器映射器,其按照特定的规则去执行Handler。
- Handler则让具体的Controller执行操作。
- Controller将具体执行信息返回给HandlerAdapter,如ModelAndView。
- HandlerAdapter将视图逻辑名和模型返回给DispatcherServlet。
- DispatcherServlet调用视图解析器(ViewResoler)解析HandlerAdapter传过来视图逻辑名。
- 视图解析器(ViewResoler)将解析完成的视图逻辑结果传给DispatcherServlet。
- DispatcherServlet根据视图解析器解析出的结果,调用具体的视图。
- 最终将视图传给用户
前置控制器、请求分发器(DispatcherServlet)
Handler(HandlerExecution)
处理器映射器(HandlerMapping)
处理器适配器(HandlerAdapter)
视图解析器(ViewResoler):还有比较优秀的视图解析引擎,模板引擎Thymeleaf、Freemarker。
三、 控制器Controller
3.1 概述
- 控制器负责提供访问应用程序的行为,通常通过接口定义和注解两种方式实现。
- 控制器负责解析用户的请求并将其转化为一种模型。
- 在Spring MVC中,一个控制器可以有多个方法。
- 在Spring MVC中,对Controller的配置方式可以有多种。
注:@RequestMapping注解用于映射url到控制器类或一个特定处理程序的方法。
四、RestFul风格
4.1 概念
RestFul就是一个资源定位以及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件会更加简洁,更加有层次,更易于实现缓存等机制。
4.2 功能
- 资源:互联网所有的事物都可以被抽象为资源。
- 资源操作:使用POST、DELETE、PUT、GET,使用不同的方法对资源进行操作。
- 以上资源分别对应添加、删除、修改、查询操作。