關於SSH2框架搭建過程中出現的問題的總結

以前接觸過SSH框架,但是一直都沒有用過,然後這段時間又重新回顧了一下,當然,期間也碰到了不少問題,然後就在網上查相關資料,折騰了一番,也學到了不少東西,所以決定整理下來。使用的IDE工具是Myeclipse10.1,碰到的問題大致有下面幾個:

1、問題1——控制檯報加載Struts配置文件失敗的異常。

這裏寫圖片描述

異常原因:主要是缺少struts2-spring-plugin-2.X.X.X這個插件jar包。

這裏寫圖片描述

解決方法:將這個jar包導入到項目中即可。

a、可以直接下載所需要的版本如:struts2-spring-plugin-2.2.1.jar,然後將這個jar包放到WebRoot/WEB-INF/lib目錄下,然後build Path一下即可。

b、也可以直接通過Myeclipse工具進行添加,只是通過這種方式添加後,會多引入了幾個包,我也不知道項目中有沒有用到過,反正刪掉了其他的幾個項目也能正常運行,沒有什麼影響,應該是項目中沒有用到。

右擊項目——》選擇Build Path——》選擇Add Libraries.

這裏寫圖片描述

選擇Myeclipse Libraries

這裏寫圖片描述

勾選Struts2 Spring Libraries

這裏寫圖片描述

ok,異常消失。

這裏寫圖片描述

需要注意的是:Struts2得已經交由Spring進行管理了,即配置文件裏面已經做了正確的配置了,不然有可能還會出現其他的問題。至於什麼問題我就懶得去試了。

a、web.xml配置文件中開啓了Spring監聽。

這裏寫圖片描述

b、然後struts.xml配置文件中配置了將Struts2委託給Spring進行管理。

這裏寫圖片描述

2、問題2——對象關係映射失敗,實體映射失敗,找不到POJO類,額,我也不知道能不能這樣叫,估計不行,暫且就這樣稱呼吧。

這裏寫圖片描述

異常原因:entity class not found。
發生的位置:Hibernate的映射文件中xxxx.hbm.xml
解決方法,更改xxxx.hbm.xml映射文件中POJO類的路徑
錯誤的配置:

這裏寫圖片描述

正確的配置:POJO類的完整路徑

這裏寫圖片描述

3、問題3——Spring的bean初始化注入失效。這個問題困擾了我好久,我的配置是這樣的,Struts.xml文件中的action的class屬性值配置的是applicationContext.xml文件中由Spring注入的bean的id值,之前一直以爲是這個路徑配置文件,導致Spring不能初始化注入,甚至還懷疑過是命名空間namespace的配置問題,試了好幾次,最後效果還是一樣的報異常。

struts.xml的配置:

這裏寫圖片描述
applicationContext.xml文件的配置:

這裏寫圖片描述

然後啓動Tomcat的時候,控制檯沒有任何異常,一切正常,但是運行的時候,就報不能實例化action的異常。

這裏寫圖片描述

運行,不能實例化action,找不到action的定義

這裏寫圖片描述

之後,做了下嘗試,將struts.xml文件的action的class屬性寫成action的完整路徑。這個時候卻報空指針,程序找到了action,也進入到了action中,但是action中定義的Service卻又出現同樣的問題,注入失敗,初始化爲null。所以報控指針異常。

這裏寫圖片描述

service注入失敗,報空指針,用debug跟一下可以看到Service爲null.

這裏寫圖片描述

然後,經過一番折騰,在網上搜了好久,最後才發現原來是web.xml配置文件中配置的Spring監聽出了問題。applicationContext.xml文件的加載路徑配置不正確。

解決方法:
關於applicationContext.xml文件的放置,一般有兩種做法,

a、放置在項目的頂級根目錄src目錄下面。配置方法如下:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>

這裏寫圖片描述

b、放置在項目的WebRoot/WEB-INF目錄下面。配置方法如下:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/classes/applicationContext*.xml</param-value>
  </context-param>

這裏寫圖片描述

或者也可以使用下面這種方式:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>WEB-INF/classes/applicationContext*.xml</param-value>
  </context-param>

這裏寫圖片描述

由於Spring的監聽配置出了問題,所以程序找不到applicationContext.xml文件,於是便無法完成初始化的注入操作了,通過上面兩種方式的配置正確後,問題解決。Spring初始化注入成功。

4、問題4——關於數據庫的異常,驅動jar包的衝突。使用的是Oracle11g數據庫。導入的數據庫驅動jar包文件是classes12.jar,運行之後報如下異常:

oracle.jdbc.driver.OracleDatabaseMetaData.supportsGetGeneratedKeys()Z

Exception in thread "main" java.lang.AbstractMethodError: oracle.jdbc.driver.OracleDatabaseMetaData.supportsGetGeneratedKeys()Z 
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:142) 

解決方法:

換成ojdbc6.jar再運行就沒有這個問題了。 問題解決、
應該是驅動的版本與oracle的版本有衝突,所以纔會報這個錯。

5、問題5——使用的jsp標籤跳轉到action,一直沒有任何效果,請求不到資源,但是瀏覽器中直接輸入page的值,能夠成功跳轉。

解決方法:

需要在struts.xml文件中過濾器映射中對下面配置dispatcher屬性,

這裏寫圖片描述

配置REQUEST和FORWARD屬性即可,問題解決、

這裏寫圖片描述

ok,結束,暫時碰到的問題就這麼多,這也算是這幾天學習SSH2框架以來的一個小小的總結,後續再慢慢學習。。加油!!!

發佈了54 篇原創文章 · 獲贊 43 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章