一, MVC 设计模式
1.MVC 的概念
首先我们需要知道 MVC 模式并不是 javaweb 项目中独有的, MVC 是一种软件工程中的一种软件架构模式, 把软件系统分为三个基本部分: 模型 (Model), 视图(View) 和控制器 (Controller), 即为 MVC. 它是一种软件设计的典范, 最早为 Trygve Reenskaug 提出, 为施乐帕罗奥多研究中心(Xerox PARC) 的 Smalltalk 语言发明的一种软件设计模式.
2.MVC 的详解
虽然 MVC 并不是 Java 当中独有的, 但是现在几乎所有的 B/S 的架构都采用了 MVC 框架模式, 但是 MVC 在 B/S 架构中并没有完全地实现, 其实我们根本不需要掌握未实现的部分.
. 控制器 Controller: 控制器即是控制请求的处理逻辑, 对请求进行处理, 负责请 求转发;
. 视图 View: 视图即是用户看到并与之交互的界面, 比如 html(静态资源),JSP(动态资源)等等.
. 模型 Model: 模型代表着一种企业规范, 就是业务流程 / 状态的处理以及业务规则的规定. 业务流程的处理过程对其他层来说是不透明的, 模型接受视图数据的请求, 并返回最终的处理结果. 业务模型的设计可以说是 MVC 的核心.
3.MVC 模式的用武之地
MVC 模式被广泛用于 Java 的各种框架中, 比如 Struts2,Spring MVC 等等都用到了这种思想.
Struts2 是基于 MVC 的轻量级的 Web 应用框架. 基于 MVC, 说明基于 Struts2 开发的 Web 应用自然就能实现 MVC, 也说明 Struts2 着力于在 MVC 的各个部分为我们的开发提供相应帮助.
二, Javaweb 经典三层架构
1.Javaweb 经历了三个时期
1JSP Model1 第一代
JSP Model1 是 JavaWeb 早期的模型, 它适合小型 Web 项目, 开发成本低! Model1 第一代时期, 服务器端只有 JSP 页面, 所有的操作都在 JSP 页面中, 连访问数据库的 API 也在 JSP 页面中完成. 也就是说, 所有的东西都耦合在一起, 对后期的维护和扩展极为不利.
2JSP Model1 第二代
JSP Model1 第二代有所改进, 把业务逻辑的内容放到了 JavaBean 中, 而 JSP 页面负责显示以及请求调度的工作. 虽然第二代比第一代好了些, 但还让 JSP 做了过多的工作, JSP 中把视图工作和请求调度 (控制器) 的工作耦合在一起了.
3JSP Model2
JSP Model2 模式已经可以清晰的看到 MVC 完整的结构了.
.JSP: 视图层, 用来与用户打交道. 负责接收用来的数据, 以及显示数据给用户;
.Servlet: 控制层, 负责找到合适的模型对象来处理业务逻辑, 转发到合适的视图;
JavaBean: 模型层, 完成具体的业务工作, 例如: 开启, 转账等.
这就是 javaweb 经历的三个年代, JSP Model2 适合多人合作开发大型的 Web 项目, 各司其职, 互不干涉, 有利于开发中的分工, 有利于组件的重用. 但是, Web 项目的开发难度加大, 同时对开发人员的技术要求也提高了.
2.JavaWeb 经典三层框架
我们常说的三层框架是由 JavaWeb 提出的, 也就是说这是 JavaWeb 独有的!
所谓三层是表述层(Web 层), 业务逻辑层(Business Logic), 以及数据访问层(Data Access).
.Web 层: 包含 JSP 和 Servlet 等与 Web 相关的内容;
. 业务层: 业务层中不包含 JavaWeb API, 它只关心业务逻辑;
. 数据层: 封装了对数据库的访问细节;
注意, 在业务层中不能出现 JavaWeb API, 例如 request,response 等. 也就是说, 业务层代码是可重用的, 甚至可以应用到非 Web 环境中. 业务层的每个方法可以理解成一个万能, 例如转账业务方法. 业务层依赖数据层, 而 Web 层依赖业务层!
注: 网上很多人在讨论 MVC 究竟是一种框架模式还是一种设计模式(百度百科中强行解释其为一种框架模式而不是一种设计模式), 虽然 Java 中的 23 种设计模式里并没有 MVC, 但是我认为讨论这个问题没有太大的必要. 我们大可将他作为一种思想, 我们需要做的仅仅是理解它, 应用它, 掌握其中的思想, 这才是我们需要做的.
来源: http://developer.51cto.com/art/201908/600274.htm