SSH时代
● Struts解决接入及表示层
● Spring解决业务服务、事务处理、会话管理问题
● Hibernate解决数据存储问题
SSH使用MVC分层设计
● 表示层:处理HTTP请求的接入层
● 业务逻辑层:核心业务逻辑的实现层
● 数据持久层:数据处理
流程
- 表示层的Struts MVC:用ActionServlet的方式做web层接入,并把对应的请求流转到service
- 业务逻辑层的Spring:做业务逻辑处理
- 数据持久层Hibernate:生成生成对应的DAO,即将对应的领域模型转化为数据模型
- Hibernate管理数据源和数据连接池,最后落到数据库
- 数据处理结果返回业务逻辑层
- 业务逻辑层进行部分封装后返回表示层
- Struts里用JSP页面渲染方式,再返回给HTML页面
特点
● 始终围绕模型的业务对象,该对象在核心的业务逻辑层中,其会转为数据层的Data Object存储对象,最终落到数据库。
● 不管业务逻辑如何变化,只要DAO接口不变,数据库的表结构的设计完全可以脱离于业务逻辑层去实现。
不足
● Hibernate方便了ORM(object relation database mapping)之间的转化,可以很方便的定义一个JavaBean对象就能完成数据库模型的映射,但较难操控复杂业务对应的SQL语句。面向对象的过度封装导致一些复杂业务的数据库操作变得很麻烦。
● Hebernate对于java模型处理的状态会跟数据库处理状态做绑定,也就是任何对Hibernate对象的set操作都会映射到数据库里,这对于程序员来说就要考虑和评估get set操作对数据库带来的影响。
● Struts表示层过于复杂,每个web请求都要对应一个ActionServlet类去实现,并且最终还是采用JSP渲染的方式,这不符合前后端分离架构思想。