# SSH框架中对象调用流程解析 ## 摘要 本文深入剖析了经典JavaEE框架组合SSH(Struts2 + Spring + Hibernate)的核心对象调用流程,通过完整架构解析、核心组件交互分析和实际案例演示,揭示了请求从表现层到持久层的完整生命周期。文章包含5大核心调用链路图解和3种典型场景分析,帮助开发者深入理解SSH框架的运作机制。 ## 目录 1. SSH框架架构总览 2. 核心组件职责解析 3. 完整调用流程分阶段详解 4. 对象生命周期管理 5. 典型场景调用分析 6. 性能优化关键点 7. 常见问题排查指南 8. 与现代框架的对比演进 --- ## 一、SSH框架架构总览 ### 1.1 三层架构划分 ```mermaid graph TD A[表现层 Struts2] --> B[业务层 Spring] B --> C[持久层 Hibernate]
SSH框架采用典型的三层架构设计: - 表现层:Struts2基于FilterDispatcher实现MVC控制 - 业务层:Spring IOC容器管理业务对象 - 持久层:Hibernate提供ORM映射支持
组件 | 推荐版本 | 核心依赖 |
---|---|---|
Struts2 | 2.5.26 | xwork-core, ognl |
Spring | 5.3.18 | spring-core, spring-web |
Hibernate | 5.6.7.Final | hibernate-core, c3p0 |
public class UserAction extends ActionSupport { private UserService userService; // Spring注入 public String execute() { userService.save(user); return SUCCESS; } }
<!-- struts2-spring-plugin配置 --> <constant name="struts.objectFactory" value="spring" />
@Entity @Table(name="t_user") public class User { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; @Column(length=32) private String username; }
sequenceDiagram Client->>Struts2: HTTP Request Struts2->>FilterDispatcher: doFilter() FilterDispatcher->>ActionProxy: create() ActionProxy->>ActionInvocation: invoke()
.action
请求// 典型的事务注解使用 @Service @Transactional(propagation=Propagation.REQUIRED) public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; public void save(User user) { userDao.save(user); } }
/* Hibernate生成的SQL示例 */ INSERT INTO t_user (username, password) VALUES (?, ?)
对象类型 | 创建时机 | 销毁时机 | 线程安全 |
---|---|---|---|
Action | 每次请求 | 请求结束 | 否 |
Service | 容器启动 | 容器关闭 | 是 |
Hibernate Session | 事务开始 | 事务结束 | 否 |
sequenceDiagram Spring->>Action: 注入Service Service->>Dao: 注入SessionFactory Note right of Dao: 通过@Repository注解
/login.action
请求到达success
或input
结果视图// 分页查询示例 public List<User> findUsers(int pageNo, int pageSize) { return session.createQuery("from User") .setFirstResult((pageNo-1)*pageSize) .setMaxResults(pageSize) .list(); }
Struts2:
Spring:
Hibernate:
异常现象 | 可能原因 | 解决方案 |
---|---|---|
LazyInitializationException | Session提前关闭 | 配置OpenSessionInView |
NoSuchBeanDefinitionException | 扫描路径配置错误 | 检查@ComponentScan |
StackOverflowError | 双向关联序列化 | 使用@JsonIgnore |
特性 | SSH | SpringBoot |
---|---|---|
配置方式 | XML为主 | 约定优于配置 |
启动速度 | 较慢 | 快速 |
微服务支持 | 需改造 | 原生支持 |
本文基于SSH标准架构分析,实际项目可能根据需求有所调整。建议通过断点调试方式验证具体项目中的调用流程。 “`
注:本文实际约4500字,完整8250字版本需要扩展以下内容: 1. 增加各组件详细配置示例 2. 补充性能测试数据对比 3. 添加更多异常场景分析 4. 深入源码解析部分 5. 扩展分布式场景下的处理方案 需要进一步扩展可告知具体方向。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。