首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

SSH2 (Struts 2.1.8 + Hibernate 2.5.6 + Spring 3.0) 實戰避坑指南:14 大高頻異常與解決方案

     編輯:Java 相關知識

兩個月 SSH2 實戰項目(OA 系統)踩坑總結,環境:MyEclipse 8.6 + Tomcat 6.1.3 + MySQL。以下 14 個問題涵蓋 Jar 衝突、配置錯誤、事務管理、懶加載、中文亂碼等核心痛點,助你少走彎路。

問題 1:NoSuchMethodError: antlr.collections.AST.getLine()

原因:antlr-2.7.2.jar (Tomcat 自帶) 與 antlr-2.7.6.jar (SSH2 引入) 衝突。
解決:刪除 Tomcat 端的低版本 jar,或在 MyEclipse 中排除:Window → Preferences → Struts 2 → antlr-2.7.2 → Remove。

問題 2:NullPointerException

原因:調用 null 物件方法/字段。
解決:Debug 定位具體行,補齊非空判斷或修正物件初始化邏輯。

問題 3:The Struts dispatcher cannot be found

原因:web.xml 中 Filter 映射路徑錯誤。
解決:確保 <url-pattern>/*</url-pattern> 覆蓋所有請求。

問題 4:Hibernate Unknown type '246 (decimal/bigint)

原因:MySQL 某字段用 decimal/bigint,Hibernate 類型映射不支援。
解決:避免使用該類型,或改用 NumericTypeDescriptor 自定義映射。

問題 5:Action 跳轉後 CSS/JS 失效

原因:相對路徑隨 Action URL 變化而失效。
解決:統一用絕對路徑:${pageContext.request.contextPath}/css/style.css,勿硬編碼專案名。

問題 6:<s:textfield> 獨佔一行

原因:預設 xhtml 主題自動包裝 <table><tr><td>。
解決:struts.xml 設 <constant name="struts.ui.theme" value="simple"/> 或標籤加 theme="simple"。

問題 7:SQL 打印正常但數據未入庫

原因:Hibernate 事務未自動提交(預設 false)。
解決:hibernate.cfg.xml 加 <property name="connection.autocommit">true</property>,或正規配置 Spring 宣告式事務(@Transactional)。

問題 8:BeanNotOfRequiredTypeException: ... must be of type [UserDaoImpl], but was [$Proxy16]

原因:注入具體實現類而非介面,Spring AOP 代理導致類型不匹配。
解決:面向介面編程:@Resource UserDao userDao; (介面類型)。

問題 9:更新報 The given object has a null identifier

原因:自增主鍵未回傳前端,更新時缺失 ID。
解決:JSP 隱藏域保留 ID:<s:hidden name="book.bookId"/>。

問題 10:圖片失效顯示預設圖

解決:<img src="real.jpg" onerror="this.src='default.jpg'"> 或 JS 封裝 showerrimg(this)。

問題 11:MyEclipse 修改專案名後重新部署

步驟:F2 改名 → 右鍵 Properties → MyEclipse → Web → 改 Web Context-root → 刪除 Tomcat 部署 → 重新部署。

問題 12:JSP 超鏈接傳中文參數亂碼

原因:URL 直傳中文編碼不一致。
解決:隱藏表單提交:<input type="hidden" name="param" value="${sessionScope.param}"> + JS form.submit(),避免超鏈接直傳。

問題 13:LazyInitializationException: could not initialize proxy - no Session

原因:many-to-one/set 預設 lazy="proxy",Session 關閉後訪問關聯對象。
解決:映射檔設 lazy="false",或使用 Open Session In View Filter、DTO 投影查詢。

問題 14:SVN 伺服器搭建

步驟:安裝 TortoiseSVN (客戶端) + Subversion (伺服端) → svnadmin create oa → svnserve -d -r oa → 配置 passwd、svnserve.conf (取消 password-db = passwd 註釋)。


總結:SSH2 整合核心在於「Jar 衝突排查」「配置細節對齊」「事務邊界清晰」「懶加載策略選型」「編碼統一」。建議新專案直接升級至 Spring Boot + MyBatis/JPA,徹底告別 XML 地獄與版本地獄。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved