基於 Struts2 + Spring + Hibernate (SSH) 的電商系統,涵蓋後台管理、前台展示、購物車、訂單、支付、郵件短信、部署運維全流程。技術棧雖經典,但架構思想與工程規範具有永續參考價值。
| 層級 | 技術選型 | 核心職責 |
|---|---|---|
| 表現層 | Struts2 + EasyUI (後台) / jQuery + JSTL (前台) | 請求接收、數據綁定、視圖跳轉、JSON 交互 |
| 業務層 | Spring @Service + @Transactional | 事務邊界、業務編排、緩存抽象、異步處理 |
| 持久層 | Hibernate 4/5 + Druid 連接池 | ORM 映射、HQL/Criteria 查詢、二級緩存、批量操作 |
| 數據庫 | MySQL 5.7+ | 主從讀寫分離、分區表、索引優化 |
# 推薦順序(依賴遞進,逐步驗證)
Spring Core → Hibernate → Spring+Hibernate → Struts2 → Spring+Struts2
# 每步編寫測試類驗證,而非一次性導入所有 Jar 包
ServletContextListener 啟動時加載熱門分類/商品到 Application 域ScheduledExecutorService 每 6 小時刷新首頁緩存,平衡實時性與性能// 購物車 = List,CartItem = Product + Quantity
// Session 存儲(未登錄) / Redis 存儲(登錄用戶,支持多端同步)
// 訂單級聯持久化(Hibernate 級聯保存)
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true)
private List items;
// 保存前雙向綁定
order.getItems().forEach(item -> item.setOrder(order));
orderDao.save(order); // 一次性級聯入庫
ParameterAware 接口,通用 Map 接收所有參數,根據業務類型分發@Service
public class NotificationService {
@Async("notificationExecutor")
public void sendOrderConfirmation(Order order) {
mailService.sendTemplateMail(order.getEmail(), "order_confirm", Map.of("order", order));
smsService.sendTemplateSms(order.getPhone(), "order_confirm", Map.of("no", order.getOrderNo()));
}
}
spring.profiles.active=prod + 配置中心| 優點 | 缺點 |
|---|---|
| 成熟穩定、文檔豐富、人才易招 | XML 配置繁重、啟動慢、熱部署困難 |
| Hibernate 映射強大、適合複雜關聯 | Struts2 攔截器鏈調試難、漏洞歷史較多 |
| 事務管理聲明式、侵入性小 | 無響應式支持、適應雲原生能力弱 |
「框架會過時,但分層架構、事務邊界、緩存策略、異步解耦、配置外部化、監控體系這些工程智慧永遠有效。」
這個 SSH 電商項目雖基於上一代技術棧,但其業務建模、模塊劃分、非功能性需求處理完全符合現代架構原則。閱讀並理解其完整代碼,對於掌握企業級 Java 開發全棧能力極具價值。