我用的是MeEclipse6.6,如果是不同版本的話(huà),導入的Sturts或其他包的時(shí)候有一些不同。
1 打開(kāi)MyEcclipse,建立一個(gè)web Project。
2 在工程名下點(diǎn)右鍵MyEclipse-->Add Sturts;添加完成后在WEB-INF文件夾下會(huì )多出一個(gè)struts-config.xml文件。知道操作Struts的人一定不會(huì )對它陌生。
3. 繼續添加Spring, 同樣是在工程下右鍵MyEclipse——>Add Spring... (哎呀!現在還不曉得怎么在這里貼圖片,以后研究好了再找機會(huì )補上吧)。配這個(gè)的時(shí)候有些麻煩,User Libraries要勾上,下面的框框里面的最前面四個(gè)要勾上,還有一個(gè)J2EE的,Web的,和最后面Hibernate的3個(gè)要勾上。大家要看清楚了啊,一共要勾上9個(gè)勾。然后選擇Copy ... 的那個(gè)單選按鈕。點(diǎn)Next,把applicationContext.xml放在工程的web-inf文件夾下面。然后Finish。Spring也就添加完成了。
4 添加Hibernate,這個(gè)最麻煩不過(guò)了。在添加Hibernate之前,首先要在MyEclipse里面配置數據庫。點(diǎn)擊MyEclipse右上角的MyEclipse DataBase ... 新建一個(gè)數據庫連接,選好數據庫種類(lèi)(我用的是MySQL),配好地址和數據庫名字,添上登陸名和密碼,加上Jar包,才能算是配好。這是屬于 Hibernate里面應該講的東西,這里就不多說(shuō)了。同樣MyEclipse --> Hibernate... 該勾的全都勾上,Next, 這里注意要選擇Spring configuration file。Next,選擇Exsting Spring configuration, 在SessionFactory Id里寫(xiě)上 sf (這是我的習慣,你可以改成別的,只要到時(shí)候出現的時(shí)候你認得就行).Next,在BeanId里填Bean(同樣是我的習慣),在下面選擇你配好的數據庫。Next,去掉Create SessionFactory勾,就不用寫(xiě)什么東西了,Finish。
5 注意了?。?!, 添加Spring一定要在添加Hibernate之前,Struts可以在任何順序下添加。
MyEclipse的工作做完后,我們自己也要做一些工作。他畢竟不是全能。
(1)我們要手動(dòng)添加commons-collections.jar commons-pool.jar,還要手動(dòng)刪除asm-2.2.3.jar包。寫(xiě)完這篇Blog之后我會(huì )上傳一個(gè)實(shí)例到CSDN的下載里面,需要添加的包可以在那里面找到。至于為什么要添包刪包,老師給過(guò)我們解釋?zhuān)抑皇悄:浀煤孟袷窃谟玫侥硞€(gè)方法的時(shí)候會(huì )報錯。畢竟三種框架在整合的時(shí)候肯定是需要一些改動(dòng)的,而且在MyEclipse6.0版本是不能同時(shí)使用SSH框架的,包會(huì )相沖突的。還好在MyEclipse6.0.1以后的版本改過(guò)來(lái)了。
(2)在web.xml文件里面添加
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
(3)在struts-config.xml里面添加
<plug-in className=”org.springframework.web.struts.ContextLoaderPlugIn”>
<set-property property=”contextConfigLocation” value=”/WEB-INF/bean.xml” />
</plug-in>
6 現在為止,只是基本的包和配置文件弄好了而已。其實(shí)也可以說(shuō)是完成了大部分,SSH三個(gè)框架的所有功能都可以在這個(gè)工程下面使用了。是不是很爽!
7 然后開(kāi)始建包吧。這里的包是指在src下面建立的類(lèi)包的名字。每個(gè)人做項目可能會(huì )有不同的建包習慣,老師給過(guò)我們一種‘習慣’,個(gè)人覺(jué)得龐大了一點(diǎn),雖然分工很明確,邏輯性很強,可移植性也很好,但是操作起來(lái)太麻煩。我只給我自己做項目時(shí)習慣建的包吧。
hbm(hibernate數據庫方向工程時(shí)導入的地方),
iface(接口類(lèi)放的地方),
impl(實(shí)現類(lèi)放的地方),
servlet(雖然有Struts的Action,但是有時(shí)候還是可以用到自己寫(xiě)的Servelt的)
struts,struts.action,struts.form(Struts自己生成的包)
page(寫(xiě)分頁(yè)類(lèi)的地方)
還有其他包就看各自的需求了。
8 開(kāi)始正式寫(xiě)代碼。這個(gè)工作就不能由我提大家完成了。
?。?!寫(xiě)代碼時(shí)候要特別注意的地方:
(1)在Struts的配置文件struts-config.xml里,每添加一個(gè)Action都要把type修改為org.springframework.web.struts.DelegatingActionProxy
(2)每一個(gè)Action都要在Spring的配置文件applicationContext.xml對應有一個(gè)Bean。
Bean的名字不能用Id,要用name屬性代替而且值必須是Action的路徑,一定要加上斜杠。例如name=”/myAction”.
這兩點(diǎn)要多看幾變,剛開(kāi)始熟悉SSH框架的時(shí)候經(jīng)常會(huì )忘記這一步(我就是這樣)。
(3)在涉及關(guān)系表的查詢(xún)的時(shí)候(都用到SSH框架了,怎么可能沒(méi)有多表查詢(xún))還要一些優(yōu)化。
在通過(guò)某個(gè)表查找另外一個(gè)表的時(shí)候,Hibernate不會(huì )查找出來(lái)。我們可以通過(guò)修改Hibernate某個(gè)表的延遲加載去掉,Lazy=”false”;這樣Hibernate就可以查到了。但是如果有很多級關(guān)聯(lián)的表,它也會(huì )一并查出來(lái),不管你有沒(méi)有用到。這樣的性能會(huì )很低下,這是最簡(jiǎn)單的方法,也是老師最抵制的一種方法。Spring有一個(gè)類(lèi)可以使Hibernate的多表查詢(xún)變得更優(yōu)化。當你需要查到某個(gè)表時(shí)它就幫你查出來(lái),否則它就不查(難道這就是傳說(shuō)中的人工智能?。。。?。具體做法:
1)在web.xml里面加上
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
2)不需要開(kāi)始在Struts配置文件struts-config.xml里的那段了,刪了它
xx<plug-in className=”org.springframework.web.struts.ContextLoaderPlugIn”>
xx <set-property property=”contextConfigLocation” value=”/WEB-INF/bean.xml” />
xx</plug-in>
3)在Spring的配置文件applicationContext.xml里面添加事物注
開(kāi)頭的地方添加
xmlns=”http://www.springframework.org/schema/beans”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xmlns:aop=”http://www.springframework.org/schema/aop”
xmlns:tx=”http://www.springframework.org/schema/tx”
xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd”>
再在后面添加
<bean id=”txManager” class=”org.springframework.orm.hibernate3.HibernateTransactionManager”>
<property name=”sessionFactory” ref=”sessionFactory”></property>
</bean>
<tx:annotation-driven transaction-manager=”txManager”/>
這樣就可以查找了,但添加的時(shí)候會(huì )報錯。
要在所有的增加、刪除、修改的方法里面加上@Transactional(readOnly=false)
如果有父類(lèi),那么就在父類(lèi)BaseImpl的增加、刪除、修改的方法里面加上@Transactional(readOnly=false)
呼~(yú),終于完工了。希望沒(méi)有遺漏什么東西。這是我第一篇技術(shù)文章,如果有什么錯誤希望能有所指正。如果對各位有幫助,也希望大家多多鼓勵。
我會(huì )上傳一個(gè)SSH框架的HelloWorld的例子。如果有什么不明白的地方可以在CSDN上下載了參考。
PS. 例子已經(jīng)上傳到http://download.csdn.net/source/1176598
注意:這個(gè)里面只有代碼,沒(méi)有jar包。整個(gè)例子有三十多M,csdn只能上傳15M的東西,所以我把lib文件夾的.jar包全部刪了再傳上去的。需要添加的commons-collections.jar和 commons-pool.jar包我也打包在一起了。數據庫的文件也在。是從MySQL導出來(lái)的.sql文件。大家可以自己導入自己的數據庫。如果是不同的數據庫,代碼和需要需要導入的JDBC驅動(dòng)包有所不同。
聯(lián)系客服