Java web 常见的三层结构
表现层: 也就是 Web 层, 常见的框架有 Spring MVC,Struts2 , 并包括用于展示的界面, 如 JSP 界面;
业务层: Service 层, 专注于业务逻辑的实现;
持久层: 也叫 Dao 层, 常见的框架是 Hibernate,MyBatis. 负责与数据库的交互, 封装数据库的访问细节; 从数据库表中读取加载数据并实例化领域对象 (Domian Object) 也就是从数据库中读取数据, 或者返过来将领域对象实例化到数据库中, 也就是将数据写入到数据库中.
当服务器接受到来时浏览器的请求后, Web 层首先开始工作, 根据不同的请求创建相应的 servlet 对请求进行处理转发, 业务层在收到来自 Web 层的信息之后, 调用持久层, 持久层访问数据库后得到返回结果, 经过业务层将返回结果填充到显示界面中(JSP 中),Web 层将 Jsp 界面作为浏览器请求的响应结果返回到浏览器.
工作流程图如下所示:(引用他处图片, 侵删)
三层结构在 SSM 框架中的体现
在用 Java 开发互联网应用时, SSM 框架 (Spring + Spring MVC + MyBatis) 成为了越来越主流的选择.
在轻量级的开发中, 常对 Web 应用分成以下几层:
POJO 层: 由一组 POJO 组成, 是对系统各种对象的抽象表达.
DAO 层: 负责数据库的访问, 增, 删, 改, 查等, 在 MyBatis 框架中也常被定义为 Mapper 层.
Service 层: 由业务逻辑对象组成, 是不同系统的业务逻辑的具体实现.
Controller 层: 由控制器组成, 对来自浏览器的用户请求进行拦截, 并调用 Service 层的响应的业务逻辑组件处理用户请求, 并转发返回结果到 View 层.
View 层: 由 JSP 界面, PDF 文档等组件组成, 用于显示系统对用户请求的处理结果.
因此, 在常见的轻量级 Java Web 开发中, 通常会将项目建立成如下的结构:
其中 SSM 框架经常把 dao 包命名为 mapper 包, 并将 mybatis 框架的 xxxMapper.java 和 xxxMapper.xml 文件放到此包中
Java 代码源文件中几个包的作用
DAO: 里面可以是数据库操作, 也可以是文件读写操作, 甚至是 Redis 缓存操作. 也有人叫做数据持久层. 因为 Mybatis 可以直接在配置文件中实现接口的每个方法, 所以不需要 DAOImpl.
DTO: 刚学框架的人可能不明白这个有什么用, 其实就是用于 service 层与 Web 层之间传输, 为什么不直接用 entity(pojo)?
其实在实际开发中发现, 很多时间一个 entity 并不能满足我们的业务需求, 可能呈现给用户的信息十分之多; 或者一个 Entity 包含的信息过多,
我们需要的信息仅仅是 Entity 的一部分, 为了减少网络传输, 这时候就有了 dto. 一般我们使用 DTO 类来继承 entity 实体类, 在 DTO 类里放一些业务字段,
并提供 get,set 方法. 当我们在业务逻辑层或者交互层用到一些数据库中不存在的字段时, 我们就需要在 DTO 类里放这些字段, 这些字段的意义就相当于一些
经处理过的数据库字段, 实质意义就是方便数据交互, 提高效率.
Entity: 一般与数据库的表相对应, 封装 dao 层取出来的数据为一个对象, 也就是我们常说的 pojo, 一般只在 dao 层与 service 层之间传输
可选的额外包:
Exception: 自定义异常.
Utils, 即 utility, 工具辅助层, 一组通用的代码集合, 比如处理多语言功能, 网站非法信息过滤等等功能的代码集;
resource: 存放后端配置文件
webapp: 前端页面与配置文件:
存放 jsp,CSS 等静态文件, Web.xml 配置文件主要包含:
配置 Spring 需要加载的配置文件, 启用 disapatcher 转发处理所有的请求, 指定编码格式
关于几个包之间的关系
controller 包是 Spring MVC 的主要文件, 其中对来自浏览器的各种请求进行转发和处理. 在 controller 中会内置各种 Service 包中的对象, 当接收到新的请求的时候, 解析 url , 根据注解调用相应的服务来完成请求.
entity 包常常与数据库中的表一一对应, dao 包中定义了数据库的基本操作, 并在 mapper 包中的 xml 配置文件中完成数据操作的具体实现(也就是增, 删, 改, 查).Mybatis 可以实现 dao 与 .xml 的自动匹配, 这时候就需要把 xxxMapper.xml 和 xxxMapper.java 放在同一个包内.
在 Service 包中定义了各种服务的接口, 然后在 Service-Impl 包中对接口进行实现, 在实现接口的时候会内置一个 DAO 包中的对象(因为 Web 服务的实现肯定是涉及到数据访问的, 而数据访问被抽象成了 DAO 包中的对象, 所以服务的实现必须借助 DAO 包), 然后我们借助 DAO 中的对象所实现的各种数据访问处理方法来实现具体的服务.
SSM 框架中各框架的作用
MyBatis: 持久层框架, 负责数据库访问.
Spring MVC: 表现层框架, 把模型, 视图, 控制器分离, 组合成一个灵活的系统.
Spring: 整合项目的所有框架, 管理各种 Java Bean(mapper,service,controller), 事务控制.
来源: http://www.bubuko.com/infodetail-3100736.html