自從6月份寫(xiě)過(guò)一些博客之后,有將近5個(gè)月沒(méi)寫(xiě)博客了,或者由于工作繁忙,或者由于懶于書(shū)筆,又或者最近沒(méi)有研究技術(shù)上的東西,根本無(wú)從寫(xiě)起。雖然從事項(xiàng)目管理工作,但深知沒(méi)有技術(shù)根底,管理好一個(gè)IT項(xiàng)目談何容易。難得近期各項(xiàng)目走上正軌,有點(diǎn)閑心回憶一下技術(shù)方面的東西,那就拿ssh開(kāi)刀吧,誰(shuí)叫它是最流行的J2EE框架組合呢。
花了將近3個(gè)小時(shí)終于把一個(gè)ssh整合的例子做完,感嘆不如當(dāng)年勇啊,雖說(shuō)經(jīng)驗(yàn)豐富了很多,但是實(shí)打?qū)嵉鼐幋a工作,可真不是靠吹牛吹出來(lái)的,到處都存在問(wèn)題,需要花時(shí)間一一解決。好了,廢話少說(shuō),下面列一下用到的一些技術(shù)以及注意點(diǎn),為了避免誤導(dǎo)人,或致人懶惰,這里就不將所有代碼一一列出,只是貼一些關(guān)鍵的代碼段。
用到的技術(shù)如下:
1)MySql,在本機(jī)上能跑的最小數(shù)據(jù)庫(kù)。
2)Hibernate3,有了注解功能后,感覺(jué)比Hibernate2方便多了
3)Spring3
4)Struts2
5)Junit4,用于測(cè)試service的方法
6)Log4j
7)需要的jar包如下,
.png)
1、MySql
這個(gè)就不多說(shuō)了,安裝過(guò)程非常簡(jiǎn)單。創(chuàng)建一個(gè)數(shù)據(jù)庫(kù):test,用grant語(yǔ)句創(chuàng)建用戶test,密碼test;創(chuàng)建一張表:ACCOUNT。
2、Hibernate3
1)創(chuàng)建一個(gè)domain對(duì)象:Account,和表ACCOUNT對(duì)應(yīng);在上面加注解@Entity @Table(name="ACCOUNT"),這樣就省去了些hbm文件
2)創(chuàng)建AccountDao,實(shí)現(xiàn)增刪改查功能;
3、spring3
1)創(chuàng)建spring配置文件:spring.xml,定義datasource,sessionFactory等;
2)創(chuàng)建AccountService,實(shí)現(xiàn)業(yè)務(wù)邏輯,調(diào)用AccountDao;
4、Struts2
1)創(chuàng)建web.xml,將spring.xml放入ContextConfigLocation;
2)創(chuàng)建struts.xml,定義package和action及跳轉(zhuǎn);
3)創(chuàng)建LoginAction類,從頁(yè)面獲取用戶名和密碼,調(diào)用AccountService的用于驗(yàn)證方法
總結(jié),在做這個(gè)例子的過(guò)程中,出現(xiàn)很多問(wèn)題,很大一部分都是來(lái)自于jar包的缺失和沖突,以下幾點(diǎn)是比較難于發(fā)現(xiàn)的,
1)Springframework的jar包版本不一致,會(huì)出現(xiàn)很奇怪的問(wèn)題;
2)缺少struts2-spring-plugin-2.2.3的jar包,會(huì)導(dǎo)致spring的bean無(wú)法實(shí)例化成功,總是獲取到null;
3)javaee.jar和servlet-api.jar的沖突,個(gè)人感覺(jué)后者是前者的精簡(jiǎn)版,在Tomcat容器的lib目錄下存在,會(huì)和工程中的lib沖突,解決方案是把Tomcat下的servlet-api.jar換成javaee.jar;
4)如果想通過(guò)標(biāo)記的方式來(lái)注入bean,必須在spring配置文件中,添加以下代碼:
<context:annotation-config />
<context:component-scan base-package="com.glen" />
另外,還有兩個(gè)問(wèn)題未解決,望能人幫之,
1)兩表關(guān)聯(lián),PrimaryKeyJoinColumn不起作用,只能插數(shù)據(jù)到主表,不能將數(shù)據(jù)插入關(guān)聯(lián)表;
2)mysql數(shù)據(jù)庫(kù),插入中文時(shí)報(bào)錯(cuò),
[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