【轉載】S2SH

 

 


說說最多人用的SSH或SSI吧,如今用的比較多的應該就是struts2.x+spring3.X+hibernate4.X或hibernate3.X了吧,mybatis用的人也有,方便有DBA的公司。
來看看SSH和SSI的優勢吧:
1)spring IOC很牛叉,管理對象,使咱們免於一系列的對象依賴處理中
2)struts2相對於struts1有不少改進,dispatcher等等好像還蠻好用的(2接觸得很少,這裏就很少說了)
3)hibernate這個幾乎是JAVA界的ORM典範,這個相信你們都知道它的好處了,緩存管理,對象和表的映射,這些都足已讓咱們投入它的懷抱。
4)mybatis或者ibatis,對於存在DBA的公司,能夠在SQL語句上面進行至關精度的調優,這個是比hibernate好的地方,緩存那些基本都差很少。
5)代碼規範,SSH或SSI框架實現的架構,基本上是4層,或更多層數,具體看定義,在代碼的實現上面比較統一,看起來也比較舒服,方便之後的維護。
固然,有優勢確定也有缺點:
1)學習成本,三大框架,說明是了「大」框架,突出在大,學習成本確定不低,特別是要深刻的時候,三個框架,隨便一個均可以花費巨大的精力。
2)運用了orm框架的系統,在SQL語句上面可能沒有直接JDBC上那麼靈活,不能方便DBA或者相應的數據庫人員進行調優。web


真正能夠把JAVA那些比較重要的內容吃透的人,學哪一個框架都不是問題,好比把併發,IO,反射這些都深刻了解的話,IOC框架也能夠本身寫一個,
另外,分佈式那些很深刻的話,hadoop那些快速入門也沒什麼問題的(hadoop太複雜了,這個感受不大屬於實用的環節,咱們就不必去說寫一個了)。spring

 

轉載:http://cxshun.iteye.com/blog/1901636數據庫

 

 

相信S2SH沒人不知道了吧,struts2+spring+hibernate,企業開發的「基礎」架構,爲何基礎標上引號,由於這個基礎只是不少人自覺得的而已,最基礎的是servlet,不少培訓機構不少基礎都不教,直接上來就三大框架了,SSH否則就SSI,搞得不少人覺得JAVAWEB開發就必定要框架,沒框架就跟沒了手一個樣。三大框架沒有什麼壞處,實用,不少公司都在用,直接上手開發。但畢業覺得真的很久沒用三大框架了,spring卻是有用,特別是springMVC,感受用起來比struts2爽多了。其實想一想也知道,spring是吸取了struts的一些優勢的,另外加上一些RESTFUL的東西,感受爽多了。但今天咱們不看springMVC,之後咱們再抽時間來一塊兒看看springMVC的優雅的地方。express

        進入正題啦。SSH一直在更新版本,這裏我仍是要說一下版本,否則一堆朋友會罵我一頓的,struts2我用的是2.3.4,spring是最新的3.2.2,hibernate是4.1.9,仍是蠻新的啊。apache

        

        在進入代碼前,咱們先來了解下三大框架各自扮演的角色。緩存

        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就能夠實現地比較好了。session

        3)Hibernate:Hibernate在JAVA界也是大名鼎鼎的了,基本上是ORM的標準了。它提供了緩存,一級和二級,而且還有HQL,三大框架結合的時候,咱們用它的什麼呢?固然就是ORM這個映射的主要功能了,緩存的咱們暫時不考慮了。不少人沒考慮過爲何須要ORM吧。其實主要仍是由於數據的字段和類之間的衝突,若是用JDBC來操做,一個個字段去set,估計作久了,人都會瘋掉,因此這時ORM就出現了。mybatis

        三大框架各自負責的東西以下: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,確定要讓他攔截請求

Java代碼   收藏代碼
  1. <filter>  
  2.     <filter-name>struts2</filter-name>  
  3.     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
  4.  </filter>  
  5.  <filter-mapping>  
  6.     <filter-name>struts2</filter-name>  
  7.     <url-pattern>/*</url-pattern>  
  8.  </filter-mapping>  

         這段代碼就讓struts攔截全部請求,固然,並非說就這樣全部請求就被spring攔截了,咱們還能夠配置struts.xml,讓struts攔截特定的後綴名,通常狀況下都是action。以下:

Xml代碼   收藏代碼
  1. <constant name="struts.objectFactory" value="spring" />  
  2. <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了。

Java代碼   收藏代碼
  1. <listener>  
  2.     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  3.  </listener>  

        這種狀況下是spring須要和其餘框架結合的狀況下使用的大部分狀況,當咱們只是使用springMVC時,就能夠直接配置DispatcherServlet進行替換上面的struts的servlet,具體咱們以後用springMVC的時候再看。

        這種狀況下,通常會去加載WEB-INF目錄下的applicationContext.xml文件,當你文件名不是這個,或者路徑不在這裏時,就能夠配置configContextPath屬性

Xml代碼   收藏代碼
  1. <context-param>  
  2.     <param-name>configContextPath</param-name>  
  3.     <param-value>WEB-INF/applicationContext.xml</param-value>  
  4. </context-param>  

         它支持使用classpath:前綴等,這裏很少說了,能夠詳細看spring的配置文件。這樣實際上咱們就已經把struts和spring結合起來了,只是沒有進行一些bean的配置和struts的轉發罷了。

        

         3)而做爲ORM的hibernate,此時也由spring來一塊兒管理。spring提供了一個LocalSessionFactory,注意,這個類,hibernate3和4是不一樣的,spring提供了兩個。下面這段配置在applicationContext.xml中

Xml代碼   收藏代碼
  1. <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">  
  2.         <property name="dataSource" ref="dataSource" />  
  3.         <property name="mappingResources">  
  4.             <list>  
  5.             </list>  
  6.         </property>  
  7.         <property name="hibernateProperties">  
  8.             <props>  
  9.             </props>  
  10.         </property>  
  11.     </bean>  

         其實的配置就跟hibernate中的相似了,這裏很少說具體的代碼了。

 

        4)在之前spring2.5.x的時候,咱們用的最多的是HibernateDaoSupport,但spring3.X開始就不提供這個支持了,咱們須要用原生的session進行操做(只須要注入SessionFactory便可),但這裏實際上就涉及到一個問題,若是咱們每一個請求都去打開關閉鏈接,會比較消耗資源,但若是不關閉鏈接,又會不大好。因此就須要有一個折衷的方案,有一個管理器來管理鏈接。這裏spring提供了一個OpenSessionInView,在每打開一個view(基本上是每個請求時),會打開Session,這裏它內部怎麼管理咱們就暫時先無論了。

Xml代碼   收藏代碼
  1. <filter>  
  2.     <filter-name>openSessionInViewFilter</filter-name>  
  3.     <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>  
  4. </filter>  
  5. <filter-mapping>  
  6.     <filter-name>openSessionInViewFilter</filter-name>  
  7.     <url-pattern>/*</url-pattern>  
  8. </filter-mapping>  

         這裏仍是讓他攔截全部的請求,固然能夠配置成只攔截action後綴的,就沒有必要浪費資源了。

 

        5)基本上,咱們的SSH框架就搭好了,接下來只是代碼的問題了。只須要在spring配置文件中配置bean,或者喜歡Annotation的話能夠直接@Component(value='bean名稱')就能夠了,但要記得在配置文件中開啓Component-scan。

        代碼就不寫詳細的了,大體以下的:

Java代碼   收藏代碼
  1. @Component(value="userAction")  
  2. public class UserAction{}  
Xml代碼   收藏代碼
  1. <package name="user" extends="struts-default" namespace="/user">  
  2.         <!-- 用戶登陸 -->  
  3.         <action name="login" class="userAction" method="login">  
  4.             <result name="ERROR">/pages/login.jsp</result>  
  5.         </action>  
  6.     </package>  

         實際上也就是把class中的指向修改成指向bean便可。

 

         代碼詳細的就不貼了,畢竟是總結貼。總得來講,SSH對於一個團隊內規範代碼是比較有好處的,由於在框架的規範下寫出的代碼基本上有一個特定的形式在,對之後的維護也好點。但對於初學的朋友來講,建議不要太多的依賴框架,真非要用,至少須要在整體上了解一下這個框架作了什麼,什麼狀況下須要用它,什麼狀況下毫不要用。

相關文章
相關標籤/搜索