Struts+Spring+Hibernate面试精华:线程安全、架构与关键技术

需积分: 9 28 下载量 155 浏览量 更新于2024-08-01 收藏 100KB DOC 举报
本文档主要围绕Struts、Spring和Hibernate这三个流行的Java Web开发框架进行深入探讨,旨在帮助求职者准备面试中关于这三个技术栈的问题。以下是详细的知识点解析: 1. **Struts Action的线程安全性**: Struts的Action并非线程安全,因为每个Action实例可能会被多个请求共享,导致数据不一致。为了保证线程安全,可以采取以下策略: - 声明局部变量,使得每次请求都创建一个新的Action实例。 - 使用Spring的`prototype`作用域,Spring会为每个请求创建一个新的Action实例。 2. **Struts的MVC架构**: - Model(M): Struts主要通过JavaBean或EJB组件(如业务逻辑层)构建模型,处理业务逻辑。 - View(V): 由JSP页面和标签库组成,负责展示用户界面。 - Controller(C): 动作(Action)类是控制器,接收用户的请求并调用Model处理,然后将结果返回给View。 3. **Struts的关键对象**: - `Action`: 控制器,负责处理HTTP请求,调用业务逻辑。 - `ActionForm`: 表单对象,用于保存用户输入数据。 - `DynaValidatorForm`: 动态表单,提供了更灵活的验证机制。 - `ActionMapping`: 配置文件中的动作映射,定义了Action与URL之间的关系。 4. **Spring的AOP和IoC**: - AOP (面向切面编程): 用于模块化关注点(如日志、事务管理),在运行时动态地应用这些关注点,提高代码的可维护性。 - IoC (依赖注入): Spring的核心概念,允许在运行时自动管理对象间的依赖关系,降低了代码耦合度。 5. **Hibernate查询方式**: Hibernate支持多种查询数据方式: - HQL (Hibernate Query Language): 高级SQL查询语言,面向对象的查询方式。 - SQL查询: 直接使用原生SQL语句。 - 条件查询: 提供了Criteria API和HQL表达式,实现基于条件的灵活查询。 6. **Hibernate的`load()`与`get()`方法区别**: - `load()`: 异步加载,假设数据存在,返回懒加载的代理对象,如果不存在则抛出异常。它会优先检查session缓存。 - `get()`: 如果数据在一级缓存中,直接返回;否则查询二级缓存或数据库,如果没有找到则返回null。 7. **Hibernate的延迟加载和`openSessionInView`**: - 延迟加载: 仅在真正需要数据时才会从数据库加载,提高性能。需在session作用域内使用。 - `openSessionInView`: 开启策略,使得每个HTTP请求开始时都会打开一个持久化上下文,直到请求结束,有助于减少事务管理复杂性,但可能导致内存消耗增加。 掌握以上知识点,不仅能够提升在Struts+Spring+Hibernate面试中的表现,还能加深对这三个框架的理解和实际应用能力。