自從6月份寫過一些博客之后,有將近5個月沒寫博客了,或者由于工作繁忙,或者由于懶于書筆,又或者最近沒有研究技術上的東西,根本無從寫起。雖然從事項目管理工作,但深知沒有技術根底,管理好一個IT項目談何容易。難得近期各項目走上正軌,有點閑心回憶一下技術方面的東西,那就拿ssh開刀吧,誰叫它是最流行的J2EE框架組合呢。

花了將近3個小時終于把一個ssh整合的例子做完,感嘆不如當年勇啊,雖說經驗豐富了很多,但是實打實地編碼工作,可真不是靠吹牛吹出來的,到處都存在問題,需要花時間一一解決。好了,廢話少說,下面列一下用到的一些技術以及注意點,為了避免誤導人,或致人懶惰,這里就不將所有代碼一一列出,只是貼一些關鍵的代碼段。

用到的技術如下:
1)MySql,在本機上能跑的最小數據庫。
2)Hibernate3,有了注解功能后,感覺比Hibernate2方便多了
3)Spring3
4)Struts2
5)Junit4,用于測試service的方法
6)Log4j
7)需要的jar包如下,



1、MySql
    這個就不多說了,安裝過程非常簡單。創建一個數據庫:test,用grant語句創建用戶test,密碼test;創建一張表:ACCOUNT。
2、Hibernate3
    1)創建一個domain對象:Account,和表ACCOUNT對應;在上面加注解@Entity @Table(name="ACCOUNT"),這樣就省去了些hbm文件
    2)創建AccountDao,實現增刪改查功能;
3、spring3
    1)創建spring配置文件:spring.xml,定義datasource,sessionFactory等;
    2)創建AccountService,實現業務邏輯,調用AccountDao;
4、Struts2
    1)創建web.xml,將spring.xml放入ContextConfigLocation;
    2)創建struts.xml,定義package和action及跳轉;
    3)創建LoginAction類,從頁面獲取用戶名和密碼,調用AccountService的用于驗證方法

總結,在做這個例子的過程中,出現很多問題,很大一部分都是來自于jar包的缺失和沖突,以下幾點是比較難于發現的,
  1)Springframework的jar包版本不一致,會出現很奇怪的問題;
  2)缺少struts2-spring-plugin-2.2.3的jar包,會導致spring的bean無法實例化成功,總是獲取到null;
  3)javaee.jar和servlet-api.jar的沖突,個人感覺后者是前者的精簡版,在Tomcat容器的lib目錄下存在,會和工程中的lib沖突,解決方案是把Tomcat下的servlet-api.jar換成javaee.jar;
  4)如果想通過標記的方式來注入bean,必須在spring配置文件中,添加以下代碼:
       <context:annotation-config />
       <context:component-scan base-package="com.glen" />

另外,還有兩個問題未解決,望能人幫之,

  1)兩表關聯,PrimaryKeyJoinColumn不起作用,只能插數據到主表,不能將數據插入關聯表;
  2)mysql數據庫,插入中文時報錯,
[2011/11/27 11:30:45:045 CST] ERROR org.hibernate.util.JDBCExceptionReporter:(JDBCExceptionReporter.java:101): Incorrect string value: '\xE5\xBC\xA0\xE7\x9B\x8A...' for column 'chinese_name' at row 1
[2011/11/27 11:30:46:046 CST] ERROR org.hibernate.event.def.AbstractFlushingEventListener:(AbstractFlushingEventListener.java:324): Could not synchronize database state with session
org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update