SSH(Struts2 + Spring + Hibernate)曾長期統治 Java EE 輕量級開發,掌握三框架分層職責與物件流向,是維護既有專案、面試通關的必備基本功。
| 框架 | 層級 | 核心職責 | 關鍵元件 |
|---|---|---|---|
| Struts | Web 表現層 | 接收請求、參數綁定、驗證、分派業務、轉向視圖 | Action、ActionForm/DTO、struts.xml、攔截器、結果類型 |
| Spring | 業務服務層 | Bean 容器管理、AOP 切面(事務/安全/日誌)、DAO 整合、資源抽象 | Service/Manager、@Transactional、ApplicationContext、JdbcTemplate/HibernateTemplate |
| Hibernate | 持久化層 | OR Mapping、Session 管理、快取(一級/二級/查詢)、HQL/Criteria、延遲載入 | Entity (POJO)、.hbm.xml/Annotation、DAO、SessionFactory |
JSP → Action → Service → DAO → Hibernate → DB
↑ ↑ ↑
參數封裝 事務邊界 ORM操作
ActionForm/DTO 自動注入參數。Service 介面。HibernateTemplate 或原生 Session 執行 CRUD/HQL。result 轉向 JSP 渲染。<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="com.example.entity"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
OpenSessionInView 掩蓋延遲載入問題,導致資料庫連線長期佔用。