ssh框架(struts+spring+hibernate)原理及流程
什么是SSH
SSH是struts+spring+hibernate的集成框架,是目前流行的Web应用开源框架。 SSH 不是一个框架,而是紧密集成了多个框架(Struts、Spring 和 Hibernate),以构建灵活的、易于扩展的分层 Web 应用程序。
SSH框架按照职责分为四层:表示层、业务逻辑层、数据持久层、领域模块层(实体层)。
SSH框架项目(Struts2+Spring+Hibernate),架构主要分为两个层次:
(1)Struts2:负责Web层
(2)Spring:管理业务层
(3)Hibernate:负责数据持久化
Struts2工作原理:
1.初始化指向 servlet 容器的请求。
2。使用 web.xml 中配置的过滤器来过滤请求,FilterDispatcher(struts2 控制器核心)询问 ActionMapper 是否需要调用操作来处理请求。如果 ActionMapper 决定应该调用某个操作,FilterDispatcher 会将请求的处理交给 ActionProxy。
3.ActionProxy通过Struts.xml配置文件找到要调用的Action类。
4.ActionProxy创建ActionInitation的实例,ActionInitation通过代理模式调用Action。但在调用之前,ActionInvocation会根据配置加载所有与action关联的拦截器(拦截器)。
5。当action执行时,ActionInvocation负责根据struts.xml中的配置找到合适的返回结果。
这表示开发者发送http请求。此请求由 web.xml 过滤器过滤,以确定是否应调用操作。如果是,则执行请求的方法位于 Struts 中。 。
空转工作原理:
1.读取并解析配置文件
2。读取并解析映射信息并创建SessionFactory
3。打开会话
4。创建交易转账
5.惯性操作
6.提交交易
7。关闭会话
8。关闭SessionFactory
这意味着在spring管理的Hibernate初始化时会加载xxx.hbm.xml,然后读取并解析映射信息,SessionFactory被创建。然后开一个session,通过session管理事物并提交。最后关闭会话并关闭SessionFactory。
Hibernate对象的三种状态
Hibernate对象分为三种状态:瞬时状态(实例化时新建或独立于会话)、持久状态(与会话关联)、自由状态(已关联)与会话)。其中包括永久 PO 设施,而临时和托管设施可用作 VO。 (PO不宜直接作为第五层使用)因此,在使用过程中要注意三种状态的转换。
例如:
在一组数据操作中,save或save或update操作可以将瞬态或空闲对象转换为持久对象,而删除或关闭会话、flush等操作则转换与会话相关的对象。将链接的持久状态对象转换为自由状态。
Hibernate 对象的状态和生命周期
使用 new 运算符初始化的对象是暂时的(没有与数据库表相关的行为,直到应用程序不再引用这些对象,它们的状态将丢失并被垃圾收集回收)机制);
瞬态对象通过save(),saveOrUpdate将转换为持久对象并由会话统一管理。持久化对象的操作与数据库同步;
永久对象 在 evict()、close()、clear() 等函数之后。将转变为自由状态。尽管当前已保留它,但它不在会话缓存中。它将通过lock()、update()、saveOrUpdate转换为持久状态。 get()、load()、find()、iterate()获取的对象是直接持久化的。
Spring 的工作原理:
在 SSH 框架中,Spring 扮演着管理容器的角色。我们都知道Hibernate用作持久层是因为它提供了良好的JDBC封装,程序员在与数据库交互时不需要编写大量的SQL语句。 Struts作为应用层,负责调用业务逻辑的服务层。
那么,SSH框架的流程大概是:页面Jsp----Struts-----Service(业务逻辑处理类)---Hibernate(从左到右)
struts负责用于控制Service(业务逻辑处理类),从而控制服务的生命周期。这样,层与层之间的依赖关系就非常强并且相连。
目前使用spring框架有控制Action对象(Strus中)和Service类的作用。两人关系松散。这里正是利用了Spring的Ioc(控制反转和依赖注入)机制。
控制反转:程序之间的关系(依赖)由容器控制,而不是传统实现中由程序代码直接控制。
依赖注入:组件之间的依赖关系由容器在运行时确定,容器动态地将一定的依赖关系注入到组件中。
使用Spring(AOP应用)的另一个优点:
事务处理:
以前的JDBCTemplate都是通过Try/Catch来完成事务发送成功和异常处理。 Spring容器集成了TransactionTemplate,它涵盖了所有事务处理功能,包括异常时回滚事务、操作成功时提交数据等复杂的业务功能。这一切都由Spring容器来处理,大大减少了程序员的代码量,并提供了良好的事务管理和控制。 Hibernate也有事务管理。休眠事务管理是通过 SessionFactory 创建和维护会话来实现的。 Spring还集成了SessionFactory配置,无需通过hibernate.cfg.xml设置SessionaFactory。
这样就可以很好地利用Sping强大的事务管理功能。
避免了每次处理数据时都需要获取Session实例来发起/提交/回滚事务以及繁琐的Try/Catch操作。
这些都是Spring中AOP(面向切面编程)机制的良好应用。一方面,业务逻辑的展开更加清晰,专业分工更加轻松。
另一方面,使用Spirng AOP隔离减少了程序耦合,使我们能够在不同的应用程序中组合不同的方面,极大地提高代码复用性。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。