Java的web開辟中SSH框架的協作處置運用筆記。本站提示廣大學習愛好者:(Java的web開辟中SSH框架的協作處置運用筆記)文章只能為提供參考,不一定能成為您想要的結果。以下是Java的web開辟中SSH框架的協作處置運用筆記正文
信任SSH沒人不曉得了吧,struts2+spring+hibernate,企業開辟的“基本”架構,為何基本標上引號,由於這個基本只是許多人自認為的罷了,最基本的是servlet,許多培訓機構許多基本都不教,直接下去就三年夜框架了,SSH否則就SSI,弄得許多人認為JAVAWEB開辟就必定要框架,沒框架就跟沒了手一個樣。三年夜框架沒有甚麼害處,適用,許多公司都在用,直接上手開辟。但卒業認為真的很久沒用三年夜框架了,spring卻是有效,特殊是springMVC,感到用起來比struts2爽多了。其實想一想也曉得,spring是接收了struts的一些長處的,別的加上一些RESTFUL的器械,感到爽多了。但明天我們不看springMVC,今後我們再抽時光來一路看看springMVC的優雅的處所。
進入正題啦。SSH一向在更新版本,這裡我照樣要說一下版本,否則一堆同伙會罵我一頓的,struts2我用的是2.3.4,spring是最新的3.2.2,hibernate是4.1.9,照樣蠻新的啊。
在進入代碼前,我們先來懂得下三年夜框架各自飾演的腳色。
1)struts:為何我們用struts,跟servlet比起來甚麼差別?現實上不消struts我們照樣可以做到MVC的,只是在設置裝備擺設文件下面能夠就比擬愁悶點了。struts重要幫我們完成分發的一個功效,將我們的詳細的要求分到某一個詳細的類中,並幫我們停止屬性的設置(struts1.X中經由過程ActionForm來停止)。struts2比擬struts1是提高許多了,主動設值,沒有強迫請求完成或繼續類,而且有了一系列的要求鏈之類的概念。因為這些用得不多,省得誤導列位兄弟,就不多說了。
2)spring:信任spring的年夜名沒有弄JAVA的不曉得了吧。許多人接觸spring最開端應當也是經由過程它的IOC懂得的吧,或許直接啥都不曉得,就三年夜框架SSH來了。沒緊要,橫豎當我們用三年夜框架時,spring很年夜水平上是作為一個紐帶類的對象,聯合別的兩年夜框架,SSI,SSH都一樣,spring只是供給了對象讓我們更便利地應用三年夜框架。固然,框架聯合中很年夜法式也依附了spring的IOC,別的,事務我們也固然會用到。AOP這些比擬高等的器械,就要看須要了,若有甚麼日記請求,攔阻請求,用AOP便可以完成地比擬好了。
3)Hibernate:Hibernate在JAVA界也是年夜名鼎鼎的了,根本上是ORM的尺度了。它供給了緩存,一級和二級,而且還有HQL,三年夜框架聯合的時刻,我們用它的甚麼呢?固然就是ORM這個映照的重要功效了,緩存的我們臨時不斟酌了。許多人沒斟酌過為何須要ORM吧。其實重要照樣由於數據的字段和類之間的抵觸,假如用JDBC來操作,一個個字段去set,估量做久了,人都邑瘋失落,所以這時候ORM就湧現了。
三年夜框架各自信責的器械以下:struts2——擔任要求轉發及表單的響應處置,spring——類的組織(即IOC),把原來由struts2治理的Action作為bean來治理,hibernate——ORM映照,把類映照到表中。
懂得了年夜概分工,固然就開端我們的編碼了。三年夜框架比擬費事的就是包了,許多人愛好用myeclipse重要照樣由於它可以幫我們導入三年夜框架的包。但建議老手照樣不要用誰人,一是myeclipse有本身的項目構造,拿到eclipse一導還要設置一些project facet之類的,給他人帶來未便;二是公司外面很罕用myeclipse,照樣熟習eclipse好點。或許愛好idea的也不錯。
struts2的必需的包以下:antlr,asm,xwork,struts2-core,ognl,common-logging,common-fileupload,struts-spring-plugin,年夜概就這幾個,能夠沒寫全,年夜家可以在啟動時報錯的情形再加上,不建議一下去就丟一切包,三年夜框架有一些包是抵觸的。
spring3須要的包以下:spring-beans,spring-core,spring-context,spring-context-support,spring-expression,spring-orm(我們用到三年夜框架,須要ORM支撐),spring-web,spring-tx(我們用到事務,但例子中不觸及)。
hibernate4須要的包以下:hibernate下載包內的required文件夾的一切JAR包。
就年夜概這些包就OK了,照樣那句話,不建議一下去就放一切包,由於三年夜框架有些包是有抵觸的,在須要的時刻酌情加上就好,湧現ClassNotFound的時刻就把到響應的JAR包,放到lib目次下。
預備任務就到此停止了,我們正式開端了。
1)起首,我們須要應用struts2,確定要讓他攔阻要求
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
這段代碼就讓struts攔阻一切要求,固然,其實不是說就如許一切要求就被spring攔阻了,我們還可以設置裝備擺設struts.xml,讓struts攔阻特定的後綴名,普通情形下都是action。以下:
<constant name="struts.objectFactory" value="spring" /> <constant name="struts.action.extension" value="action" />
struts.action.extension就設置裝備擺設了攔阻的默許後綴名,如許在攔阻的時刻就會檢討後綴名,相符的就會被struts停止轉發了。而struts.objectFactory而是表現把struts的轉發處置類交由spring來停止治理,也等於作為bean停止治理。
2)平凡我們直接應用spring的時刻,會挪用*ApplicationContext,但我們如今是在WEB情形下,總不克不及手動挪用吧。現實上,spring供給了一個供WEB情形下挪用的辦法,有一個servlet(這個我沒用過,不年夜清晰怎樣用),一個listener,servlet是供不支撐filter的運用辦事器挪用的,但如今我們根本上都應用listener了。
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
這類情形下是spring須要和其他框架聯合的情形下應用的年夜部門情形,當我們只是應用springMVC時,便可以直接設置裝備擺設DispatcherServlet停止調換下面的struts的servlet,詳細我們以後用springMVC的時刻再看。
這類情形下,普通會去加載WEB-INF目次下的applicationContext.xml文件,當你文件名不是這個,或許途徑不在這裡時,便可以設置裝備擺設configContextPath屬性
<context-param> <param-name>configContextPath</param-name> <param-value>WEB-INF/applicationContext.xml</param-value> </context-param>
它支撐應用classpath:前綴等,這裡不多說了,可以具體看spring的設置裝備擺設文件。如許現實上我們就曾經把struts和spring聯合起來了,只是沒有停止一些bean的設置裝備擺設和struts的轉發而已。
3)而作為ORM的hibernate,此時也由spring來一路治理。spring供給了一個LocalSessionFactory,留意,這個類,hibernate3和4是分歧的,spring供給了兩個。上面這段設置裝備擺設在applicationContext.xml中
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="mappingResources"> <list> </list> </property> <property name="hibernateProperties"> <props> </props> </property> </bean>
其實的設置裝備擺設就跟hibernate中的相似了,這裡不多說詳細的代碼了。
4)在之前spring2.5.x的時刻,我們用的最多的是HibernateDaoSupport,但spring3.X開端就不供給這個支撐了,我們須要用原生的session停止操作(只須要注入SessionFactory便可),但這裡現實上就觸及到一個成績,假如我們每一個要求都去翻開封閉銜接,會比擬消費資本,但假如不封閉銜接,又會不年夜好。所以就須要有一個調和的計劃,有一個治理器來治理銜接。這裡spring供給了一個OpenSessionInView,在每翻開一個view(根本上是每個要求時),會翻開Session,這裡它外部怎樣治理我們就臨時先不論了。
<filter> <filter-name>openSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>openSessionInViewFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
這裡照樣讓他攔阻一切的要求,固然可以設置裝備擺設成只攔阻action後綴的,就沒有需要糟蹋資本了。
5)根本上,我們的SSH框架就搭好了,接上去只是代碼的成績了。只須要在spring設置裝備擺設文件中設置裝備擺設bean,或許愛好Annotation的話可以直接@Component(value='bean稱號')便可以了,但要記得在設置裝備擺設文件中開啟Component-scan。
代碼就不寫具體的了,年夜致以下的:
@Component(value="userAction") public class UserAction{} <package name="user" extends="struts-default" namespace="/user"> <!-- 用戶登錄 --> <action name="login" class="userAction" method="login"> <result name="ERROR">/pages/login.jsp</result> </action> </package>
現實上也就是把class中的指向修正為指向bean便可。
代碼具體的就不貼了,究竟是總結貼。總得來講,SSH關於一個團隊內標准代碼是比擬有利益的,由於在框架的標准下寫出的代碼根本上有一個特定的情勢在,對今後的保護也好點。但關於初學的同伙來講,建議不要太多的依附框架,真非要用,至多須要在整體上懂得一下這個框架做了甚麼,甚麼情形下須要用它,甚麼情形下毫不要用。