在Java开发中,SSH 指的是一个曾经非常流行的、用于构建Java Web应用程序的框架组合。

它的全称是:
S - Struts2(或早期的Struts1):一个MVC框架,主要负责Web层。
S - Spring:一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,负责整合和管理所有组件。
H - Hibernate:一个对象关系映射(ORM)框架,负责数据持久层,将Java对象与数据库表进行映射。
这是一个在 Spring Boot 诞生之前(大约2005年-2015年间)Java Web开发领域的“黄金搭档”,相当于当时的“标准技术栈”。

为什么是“组合”?
SSH 并不是一个单一的框架,而是三个框架各司其职,共同协作,形成了经典的三层架构:

框架	对应架构层	职责
Struts2	表示层/Web层	1. 接收用户HTTP请求
2. 将请求参数封装到Java对象
3. 根据配置调用相应的业务逻辑
4. 将结果转发到视图(如JSP)进行渲染
Spring	业务逻辑层	1. IoC容器:像“胶水”一样,管理Struts2的Action、Hibernate的DAO、Service等所有对象的创建和依赖关系。
2. AOP:提供声明式事务管理、日志等通用功能。
Hibernate	数据持久层	1. ORM:将Java对象与数据库表关联,开发者可以像操作对象一样操作数据库。
2. 封装了JDBC,简化了数据库增删改查操作。
SSH的工作流程(以一个查询用户请求为例)
用户请求:用户在浏览器访问 /getUser.action?userId=123。

Struts2拦截:
Struts2的核心过滤器 StrutsPrepareAndExecuteFilter 拦截到以 .action 结尾的请求。
根据配置文件 struts.xml,找到该请求对应的 UserAction 类和一个名为 getUser 的方法。

Spring注入:
UserAction 实例和其中的 UserService 业务层对象都是由 Spring 容器创建并注入的(依赖注入)。

业务处理:
UserAction 调用 UserService 的 getUserById 方法。
UserService 中可能包含复杂的业务逻辑。

Hibernate持久化:
UserService 调用由 Spring 管理的 UserDao 接口。
UserDao 的实现类使用 Hibernate 的 API(或HQL、Criteria),通过Session操作数据库,执行查询。

返回结果:

Hibernate将查询结果封装成 User 对象返回给 UserDao,再逐层返回给 UserAction。
UserAction 将结果数据存入请求域,并返回一个字符串结果(如 "success")。

视图渲染:
Struts2根据返回的 "success",在 struts.xml 中配置跳转到 userInfo.jsp 页面。
JSP页面从请求域中获取数据并渲染,最终生成HTML返回给用户的浏览器。
SSH的衰落与替代方案
SSH组合虽然经典,但其缺点也非常明显,这导致了它逐渐被更现代的技术所取代:

SSH的缺点	|现代替代方案(通常是Spring Boot + ...)
配置极其繁琐:需要编写大量的XML文件(struts.xml, applicationContext.xml, hibernate.cfg.xml等)。	|约定优于配置:Spring Boot提供自动配置,极大简化了配置。
整合复杂:需要手动将三个框架整合在一起,依赖和版本兼容性问题多。	|起步依赖:Spring Boot通过一个 spring-boot-starter-web 或 spring-boot-starter-data-jpa 依赖,就自动引入了所有兼容的库。
部署麻烦:需要打包成WAR文件,部署到外部的Tomcat等Web服务器。	|内嵌服务器:Spring Boot应用打包成可执行JAR,内嵌了Tomcat,可直接运行。
技术过时:Struts2后来因性能和安全性问题(漏洞多)逐渐被抛弃。	|Spring MVC:作为Spring家族的一部分,它更轻量、与Spring容器无缝集成,成为取代Struts2的事实标准。
Hibernate较重:Hibernate虽然强大,但学习曲线陡峭,对复杂SQL的优化和控制相对麻烦。	|MyBatis 或 Spring Data JPA:MyBatis更轻量,对SQL控制更灵活;JPA是标准规范,Hibernate是其一种实现,Spring Data JPA进一步简化了开发。
总结
SSH 是Java Web开发一个特定历史时期的框架组合,代表了 Struts2 + Spring + Hibernate。

它奠定了经典的三层架构模式,但因其配置繁琐、整合复杂、部署麻烦而逐渐被淘汰。

它的精神继承者是Spring全家桶,特别是 Spring Boot + Spring MVC + MyBatis/Spring Data JPA 这一套现代技术栈。
这套新组合继承了SSH分层和集成的思想,但通过自动化、标准化和简化,极大地提升了开发效率。
所以,今天学习Java,你不需要再深入学习SSH,但了解它是什么,有助于你理解Java Web技术的发展历程和为什么现代框架会这样设计。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐