1、2019/7/14,第一讲 Web三层架构与框架,2019/7/14,2,Web三层架构,用户接口层(UI Layer) 表示层 业务逻辑层(Bussiness Layer) 持久化层 (Persistence Layer)数据逻辑层、数据访问层,MVC ?,实体类,2019/7/14,3,为什么要分层,在早期的web开发中,因为业务比较简单,并没有这三层的划分。用户数据的呈现及输入的接收、封装、验证、处理、以及对数据库的操作,都放在jsp页面中。这时的开发,好比盘古尚未开天辟地,整个web开发就是一片“混沌”。,用户名称: %String uname=request.getParameter
2、(“user“);String upwd=request.getParameter(“pwd“);String driverClassName =“oracle.jdbc.driver.OracleDriver“;String url =“jdbc:oracle:thin:10.0.0.34:1521:PRD34“; ,JSP页面中连接数据库,2019/7/14,4,开天辟地,把显示层(JSP)抽取出来并形成与业务和持久化层(JavaBean)无关的一层,能够让业务逻辑更加清晰,产品更便于维护。这就是SUN当初倡导的JSP Model 1开发方式。用户通过浏览器向JSP发出请求; JSP根据需
3、要调用JavaBean,大部分的数据存取、逻辑运算等处理由JavaBean完成; 当JavaBean处理完成之后再回传到JSP; 由JSP显示最后的结果。,2019/7/14,5,持久化层的分离,持久化层:专门负责对象状态的持久化保存及同步,那不就可以全心全意的“搞对象”了 。持久化概念的产生,代表着我们对关系型数据库的依赖降低了。因此甚至有人推断关系数据库将死。,浏览器,表示层,业务层,Request,Response,Data Sources,Application Server,持久层,2019/7/14,6,分层开发的优势,职责划分清晰 无损替换 复用代码 降低了系统内部的依赖程度,2
4、019/7/14,7,灰色地带,是的,从理论上看,web三层架构很美了。但在实际开发产品的时候,我们发现了很多问题。主要问题就是用UI层和业务层之间有许多灰色地带。这些灰色地带业务逻辑层不想管,UI层也不想管。让我们举一些例子:,2019/7/14,8,难以管理的跳转关系,试想,如果你正在做一个有上百张表,十几个核心模块,几百个页面的产品时,这张图将变得多么复杂!而问题是,这些页面跳转关系分散在JSP和Servlet中,非常难以管理。,2019/7/14,9,表单数据的验证及封装,该把验证和封装数据的工作交给谁来做呢?是UI层还是业务逻辑层?都不合适,2019/7/14,10,国际化,如果我们
5、想为不同国家和地区的人提供不同的语言,无疑需要国际化的支持。那么,我们需要在JSP页面上根据用户的配置或请求信息判断应该为该用户呈现哪国文字。而这些判断和显示的逻辑应该划分到业务逻辑层还是UI层呢?,2019/7/14,11,用MVC的思路解决问题,MVC是一种设计思想。这种思想强调实现模型(Model)、视图(View)和控制器的分离。这种思想是如何作用于web的呢? 我们在web开发中引入MVC思想,想要达到的目的是: 实现UI层和业务逻辑层分离控制器是为了实现上述目的而存在的!,2019/7/14,12,在解决了持久化的问题后,我们发现,我们的所说的业务逻辑层和MVC中的Model指的是
6、一回事,我们所说的UI层和MVC中的View是一回事。 MVC提供了让模型和视图相分离的思路引入控制器。我们把页面跳转关系管理、表单数据的封装及验证、国际化等任务交给控制器处理。,2019/7/14,13,典型的Java Web开发分层,表现层 显示业务处理结果 提供给用户交互接口控制层 分派用户的请求执行不同的业务逻辑 根据处理结果调用适合的表现层业务逻辑层 完成具体的业务逻辑操作 返回处理结果数据持久层 完成业务逻辑对数据库访问的任务,2019/7/14,14,我们选定的开发框架,表现层 FreeMarker控制层 struts2业务逻辑层 SpringFramework数据持久层 ibatis,2019/7/14,15,为什么要采用框架,框架是由一些类组成,这些类为应用程序提供了一个可重用的设计使用框架的好处 为开发者提供一个简单易用的模型 开发者只需编写必须的代码,不需要直接接触底层的API 可以为程序提供清晰的结构并且提高程序的内聚性 清晰的结构使得其他人可以更容易加入项目,2019/7/14,16,总结,在Java web开发中,MVC框架充当了UI层和业务逻辑层的适配器的作用。MVC框架实现了UI层和业务逻辑层最大程度的分离。,