現(xiàn)在開發(fā)的一個(gè)項(xiàng)目使用S2SH框架,配置環(huán)境用了一兩天,現(xiàn)在把當(dāng)時(shí)配置環(huán)境時(shí)寫的文檔整理下發(fā)出來(lái),也算加強(qiáng)點(diǎn)記憶。
Ø MyEclipse5.5
Ø JDK 1.6
Ø Java EE 5.0
Ø Tomcat6.0
Ø Struts2.1.6
Ø Spring2.5.6
Ø Hibernate3.3.1
Ø Struts2.1.6包下載:
http://struts.apache.org/download.cgi#struts216
Ø Hibernate3.3包下載:
https://www.hibernate.org/6.html
Ø Spring2.5下載:
http://www.springsource.org/download
打開MyEclipse,新建一個(gè)web project,如圖:
注意:J2ee版本設(shè)為java ee 5.0
點(diǎn)擊Finish完成,建好的工程如圖:
如果你的myeclipse還沒有配置一個(gè)web服務(wù)器,那就進(jìn)行下面的步驟,這里以tomcat6為例:
設(shè)置好你的tomcat6的路徑即可,前提你要先安裝好tomcat哦。還有需要注意的一點(diǎn)是,看到目錄樹tomcat6.x下面的JDK了嗎?點(diǎn)擊它,也要把tomcat的JDK設(shè)為jdk1.6才行,以與myeclipse一致。
好了,工程已經(jīng)建好了,下面就開始配置struts吧。配置之前先把struts的包下載下來(lái)哦,下載地址上面已經(jīng)給出了。
1)引入Struts必需的五個(gè)jar包。下載struts-2.1.6-all.zip解壓后,struts-2.1.6\lib目錄下是struts所有的相關(guān)jar包。這么多jar包并不是struts必須得,使用struts只需要把下面五個(gè)引入即可,以后用到什么jar包,再引入。
² Commons-logging-1.0.4.jar
² Freemarker-2.3.13.jar
² Ognl-2.6.11.jar
² Struts2-core-2.1.6.jar
² Xwork-2.1.2.jar
2)修改WEB-INF下的web.xml文件,增加struts2的配置。增加代碼如下:這些配置代碼對(duì)于struts2是不變的,直接復(fù)制到web.xml即可。
3)添加struts配置文件。 在WEB-INF/classes目錄下,新建struts.xml,模版如下:
好了,struts基本配置完畢,是不是很簡(jiǎn)單?
現(xiàn)在把工程發(fā)布到tomcat上去測(cè)試一下,在工程名字上點(diǎn)擊右鍵,選擇MyEclipseàAdd and Remove project Deployments,在打開的窗口里,點(diǎn)擊Add,選擇我們之前配置好的tomcat6服務(wù)器,如下圖:
發(fā)布好了,啟動(dòng)tomcat,如果啟動(dòng)無(wú)異常,則說(shuō)明配置成功。
注意:可能會(huì)出現(xiàn)struts-default.xml相關(guān)異常,根據(jù)提示引入相關(guān)jar包。我測(cè)試的時(shí)候是缺少fileupload相關(guān)jar包,于是引入了commons-fileupload-1.2.1.jar。
下面開始配置一個(gè)Action吧,以用戶登錄為例:
1)首先新建一個(gè)登陸頁(yè)面login.jsp,代碼如下:
2)在我們已經(jīng)建好的struts.xml中來(lái)配置登錄的action。這里定義登錄action的名字為login,配置代碼如下:
3)下面就來(lái)編寫具體的action類了。代碼如下:
4)好了,一個(gè)Action就創(chuàng)建完成了,重啟tomcat測(cè)試一下吧。如果第一次使用struts,你可能你明白上面的代碼,以后慢慢學(xué)習(xí)即可,現(xiàn)在先來(lái)看一下效果吧。
打開登錄頁(yè)面http://localhost:8080/test/login.jsp,輸入正確或錯(cuò)誤的用戶名和密碼,看看有什么提示。
1) 導(dǎo)入最小jar包,即使用Hibernate3所必需的jar包。下載hibernate-distribution-3.3.1.GA解壓后,必需jar包都在lib"required目錄下。必需jar包如下:
² hibernate3.jar-----------------------------核心類庫(kù)
² antlr-2.7.6.jar-----------------------------代碼掃描器,用來(lái)翻譯HQL語(yǔ)句
² commons-collections-3.1.jar----------- Apache Commons包中的一個(gè),包含了一些Apache開發(fā)的集合類,功能比java.util.*強(qiáng)大
² dom4j-1.6.1.jar----------------------------是一個(gè)Java的XML API,類似于jdom,用來(lái)讀寫XML文件的
² javassist-3.4.GA.jar----------------------- Javassist 字節(jié)碼解釋器
² jta-1.1.jar------------------------------------標(biāo)準(zhǔn)的JTA API。
² slf4j-api-1.5.2.jar
² slf4j-nop-1.5.2.jar
1) 創(chuàng)建Hibernate配置文件。在WEB-INF"calsses目錄下(工程的src包下)新建hibernate.cfg.xml。這是hibernate連接數(shù)據(jù)庫(kù)的配置文件。這里以連接Oracle為例:
1) 創(chuàng)建Session工廠類HibernateSessionFactory。
讓我們先了解一下Session, Hibernat 對(duì)數(shù)據(jù)庫(kù)的操作是通過(guò)Session來(lái)實(shí)現(xiàn)的,這里的session不同于頁(yè)面間傳遞參數(shù)的session,而是類似于JDBC中的 Connection。Session是Hibernate運(yùn)作的中心,對(duì)象的生命周期、事務(wù)的管理、數(shù)據(jù)庫(kù)的存取都與session息息相關(guān)。
而Session是由HibernateSessionFactory創(chuàng)建的,是線程安全的,可以讓多個(gè)執(zhí)行線程同時(shí)存取HibernateSessionFactory而不會(huì)有數(shù)據(jù)共享的問(wèn)題,但不能讓多個(gè)線程共享一個(gè)Session。
HibernateSessionFactory可以用myeclispe自動(dòng)創(chuàng)建,這里就不貼出代碼了。
注意:別忘了把數(shù)據(jù)庫(kù)驅(qū)動(dòng)包引入到工程中。對(duì)于oracle是class12.jar。
1) 導(dǎo)入spring包。下載spring-framework-2.5.6并解壓后,在spring-framework-2.5.6"dist目錄下找到spring.jar,引入到工程中。
說(shuō)明:spring.jar是包含有完整發(fā)布的單個(gè)jar包,spring.jar中包含除了 spring-mock.jar里所包含的內(nèi)容外其它所有jar包的內(nèi)容,因?yàn)橹挥性陂_發(fā)環(huán)境下才會(huì)用到spring-mock.jar來(lái)進(jìn)行輔助測(cè)試,正式應(yīng)用系統(tǒng)中是用不得這些類的。除了spring.jar文件,Spring還包括有其它13個(gè)獨(dú)立的jar包,各自包含著對(duì)應(yīng)的Spring組件,用戶可以根據(jù)自己的需要來(lái)選擇組合自己的jar包,而不必引入整個(gè)spring.jar的所有類文件。這里,為了使用方便,我們引入整個(gè)spring.jar。
2) 配置web.xml文件。Jar包引入完成后,就開始配置spring了,首先修改web.xml文件,增加如下代碼:
在這里,我們指定了spring配置文件的路徑,即WEB-INF/classes/spring目錄下的所有以applicationContext開頭命名的xml文件。
3) 在src下面新建applicationContext.xml文件。首先給這個(gè)文件加上spring的標(biāo)頭:
注意:標(biāo)頭是2.5的 不要引入2.0, 錯(cuò)了可能Spring就不能正確加載。
Spring基本配置完畢,讓我們建個(gè)示例來(lái)測(cè)試一下吧,首先在test.spring包下創(chuàng)建兩個(gè)java文件:TUser.java、SpringTest.java。
TUser.java:
SpringTest.java:
創(chuàng)建完畢后,就剩最后一步了,在applicationContext.xml中配置一個(gè)bean,在xml中增加如下代碼:
好了,下面運(yùn)行一下吧,右鍵單擊SpringTest.java選擇run as àJava Application,運(yùn)行結(jié)果如下:
如果你的運(yùn)行結(jié)果和上面一樣,且沒有異常,則說(shuō)明Spring配置成功了。是不是很簡(jiǎn)單?不要驕傲,重要的是Spring與Hibernate、Struts的整合。繼續(xù)吧!
Spring與Struts的整合其實(shí)就是把Struts的Action類交給Spring來(lái)管理,下面開始吧!
1) 導(dǎo)入jar包。在Struts2.1.6的lib目錄中找到struts2-spring-plugin-2.1.6.jar,引入到工程中。
2) 配置web.xml文件。在web.xml中加入以下代碼:
1) 現(xiàn)在就來(lái)看如何把struts的action交給spring。以struts示例中的login.action為例,首先創(chuàng)建一個(gè)LoginAction類的Bean。在applicationContext.xml中增加如下代碼:
<bean id="loginAction" class="test.action.LoginAction" scope="prototype">
</bean>
這里,我們把這個(gè)bean的id設(shè)為loginAction。Scope設(shè)為prototype,含義是每一次請(qǐng)求創(chuàng)建一個(gè)LoginAction類的實(shí)例,Scope還有另一個(gè)值“singleton”意為“單例模式”。
接下來(lái)修改struts.xml文件,把原來(lái)login.action的配置做如下修改:
把<action name="login" class=" test.action.LoginAction ">
改為
<action name="login" class="loginAction">
注意到有什么區(qū)別了嗎?class值設(shè)為了loginAction,即LoginAction類的bean的ID。這樣我們就把LoginAction類交給了spring管理。至于具體是怎么處理的,秘密在struts2-spring-plugin-2.1.6.jar中,有空自己就去研究吧,現(xiàn)在會(huì)用就可以了。
Spring整合Hibernate主要是對(duì)hibernate的Session進(jìn)行管理,包含Session的創(chuàng)建、提交、關(guān)閉的整個(gè)生命周期。Spring對(duì)事務(wù)的管理應(yīng)用了AOP的技術(shù),配置前請(qǐng)先了解一下AOP的知識(shí)。
1) 配置sessionFactory,讓spring來(lái)創(chuàng)建Session。在applicationContext.xml中增加如下代碼:
我們?cè)瓉?lái)是用HibernateSessionFactory.java來(lái)創(chuàng)建Session的,現(xiàn)在刪除即可,交給Spring創(chuàng)建。這里,創(chuàng)建了一個(gè)Session工廠類的Bean,其ID為“sessionFactory”。
2) 配置事務(wù)管理器。增加如下代碼:
這里創(chuàng)建了一個(gè)id為transactionManager的事務(wù)管理器,它匹配一個(gè)session工廠,<ref bean="sessionFactory"/>這個(gè)sessionFactory是指session工廠的ID。
3) 對(duì)事務(wù)管理器進(jìn)行事務(wù)設(shè)置。增加如下代碼:
這里創(chuàng)建了一個(gè)advice(通知),對(duì)事務(wù)管理器進(jìn)行事務(wù)設(shè)置,這里意思是指,對(duì)于以save、del、update開頭的方法應(yīng)用事務(wù)。
4) 下面就把事務(wù)應(yīng)用到具體的類。看如下代碼:
這里配置的作用是把我們上面創(chuàng)建的advice應(yīng)用到具體的類中。以上代碼的意思指,給test.service.impl下的所有類的所有方法應(yīng)用smAdvice。
5) 示例:使用Session。