EmploymentSystemMyEclipse 提供強大的 Capabilities 機制,通過右鍵項目 → MyEclipse → Add * Capabilities 即可自動導入 JAR、生成配置文件、註冊監聽器。
S 標識,applicationContext.xml 自動生成於 src/
hibernate.cfg.xml,改為在 applicationContext.xml 中配置 LocalSessionFactoryBean
StrutsSpringPluginstruts.xml 於 src/,web.xml 自動註冊 StrutsPrepareAndExecuteFilter
<web-app>
<!-- Spring 容器啟動監聽器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- Struts2 核心過濾器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 字符編碼過濾器 (必須在最前) -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
<beans xmlns="https://www.springframework.org/schema/beans"
xmlns:context="https://www.springframework.org/schema/context"
xmlns:tx="https://www.springframework.org/schema/tx">
<!-- 掃描 Service、DAO、Action -->
<context:component-scan base-package="com.employment"/>
<!-- 數據源 (C3P0/Druid) -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/employment?useUnicode=true&characterEncoding=utf8"/>
<property name="user" value="root"/>
<property name="password" value="123456"/>
</bean>
<!-- SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="com.employment.entity"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
<!-- 事務管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
<struts>
<constant name="struts.devMode" value="true"/>
<constant name="struts.ui.theme" value="simple"/>
<package name="default" namespace="/" extends="struts-default">
<!-- Action 由 Spring 管理,class 指向 Bean ID -->
<action name="user_*" class="userAction" method="{1}">
<result name="success">/WEB-INF/jsp/user/list.jsp</result>
<result name="input">/WEB-INF/jsp/user/form.jsp</result>
</action>
</package>
</struts>
https://localhost:8080/EmploymentSystem/
| 現象 | 原因 | 解決 |
|---|---|---|
| ClassNotFound: ContextLoaderListener | spring-web.jar 缺失 | 檢查 Spring Capabilities 勾選 Web 模塊 |
| No SessionFactory found | Hibernate 未與 Spring 關聯 | 重新 Add Hibernate Capabilities 勾選「Create SessionFactory Spring bean」 |
| Struts 無法找到 Action Bean | struts.xml 中 class 寫全限定類名 | 改為 Spring Bean ID (如 userAction),確保 @Component("userAction") |
| 中文亂碼 | 缺少 CharacterEncodingFilter 或順序錯 | 確保 encodingFilter 在 filter-mapping 中最前 |
| 事務不生效 | 缺少 @Transactional 或 tx:annotation-driven | Service 方法加 @Transactional,XML 開啟注解驅動 |
雖然 SSH 是經典框架組合,但現代 Java Web 開發已全面轉向 Spring Boot + 微服務/單體分層架構。本文旨在記錄歷史技術棧的整合細節,供維護舊項目或教學參考。