核心定位差異
| 維度 | SSH (Struts2 + Spring + Hibernate) | DWR (Direct Web Remoting) |
| 架構層級 | 全棧 MVC 框架 | AJAX 通信庫 (Client↔Server 遠程調用) |
| 核心功能 | 請求分發、業務事務、ORM 持久化 | Java 方法暴露為 JavaScript 可直接調用 |
| 適用場景 | 傳統表單/頁面跳轉 Web 應用 | 富客戶端、大量異步交互、單頁應用雛形 |
| 學習曲線 | 較陡 (三大框架整合配置) | 平緩 (僅需配置 dwr.xml + 註解) |
| 社區生態 | 成熟、文檔豐富、企業級標配 | 較小眾、更新緩慢、現代項目少用 |
SSH 入門學習路徑
- Spring IOC/AOP:掌握依賴注入、事務管理 (
@Transactional)。
- Hibernate/JPA:實體映射、HQL/Criteria、一級/二級緩存。
- Struts2:Action、攔截器、結果類型、OGNL 表達式、標簽庫。
- 整合:
applicationContext.xml 統一管理 Bean,Struts2 通過 Spring 插件獲取 Service。
DWR 快速上手
<!-- web.xml -->
<servlet>
<servlet-name>dwr</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<!-- dwr.xml -->
<allow>
<create creator="spring" javascript="UserService">
<param name="beanName" value="userService"/>
</create>
<convert converter="bean" match="com.example.User"/>
</allow>
<!-- JavaScript 頁面 -->
<script src="/dwr/interface/UserService.js"></script>
<script>
UserService.getUser(1, function(user) { alert(user.name); });
</script>
選型建議
- 新項目/企業級系統:首選 **Spring Boot + Spring MVC + MyBatis/JPA** (現代 SSH 替代者),生態活躍、配置簡化。
- 維護老項目:按現有技術棧 (SSH/DWR) 維護,避免大規模重構風險。
- 學習目的:先學 **Spring 生態** (核心容器、MVC、Data),再補充 Struts2/Hibernate 歷史包袱理解;DWR 可作為了解 AJAX 演進的補充知識。
現代替代方案對比
| 方案 | 特點 |
| Spring Boot + Vue/React | 前後端分離、REST API、生態最強 |
| Spring MVC + Thymeleaf | 服務端渲染、簡單項目快速開發 |
| GraphQL (Spring GraphQL) | 按需獲取、減少過度獲取 |
| WebSocket / SSE | 實時雙向通信、替代輪詢 |