一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java的web開發(fā)中SSH框架的協(xié)作處理應用筆記

Java的web開發(fā)中SSH框架的協(xié)作處理應用筆記

2020-03-14 15:12cxshun JAVA教程

這篇文章主要介紹了Java的web開發(fā)中SSH框架的協(xié)作處理應用筆記,SSH是指Struts和Spring以及Hibernate的框架搭配,需要的朋友可以參考下

 相信SSH沒人不知道了吧,struts2+spring+hibernate,企業(yè)開發(fā)的“基礎”架構,為什么基礎標上引號,因為這個基礎只是很多人自以為的而已,最基礎的是servlet,很多培訓機構很多基礎都不教,直接上來就三大框架了,SSH不然就SSI,搞得很多人以為JAVAWEB開發(fā)就一定要框架,沒框架就跟沒了手一個樣。三大框架沒有什么壞處,實用,很多公司都在用,直接上手開發(fā)。但畢業(yè)以為真的好久沒用三大框架了,spring倒是有用,特別是springMVC,感覺用起來比struts2爽多了。其實想想也知道,spring是吸收了struts的一些優(yōu)點的,另外加上一些RESTFUL的東西,感覺爽多了。但今天我們不看springMVC,以后我們再抽時間來一起看看springMVC的優(yōu)雅的地方。

        進入正題啦。SSH一直在更新版本,這里我還是要說一下版本,不然一堆朋友會罵我一頓的,struts2我用的是2.3.4,spring是最新的3.2.2,hibernate是4.1.9,還是蠻新的啊。
       
        在進入代碼前,我們先來了解下三大框架各自扮演的角色。
        1)struts:為什么我們用struts,跟servlet比起來什么區(qū)別?實際上不用struts我們還是可以做到MVC的,只是在配置文件上面可能就比較郁悶點了。struts主要幫我們實現(xiàn)分發(fā)的一個功能,將我們的具體的請求分到某一個具體的類中,并幫我們進行屬性的設置(struts1.X中通過ActionForm來進行)。struts2相比struts1是進步很多了,自動設值,沒有強制要求實現(xiàn)或繼承類,并且有了一系列的請求鏈之類的概念。由于這些用得不多,免得誤導各位兄弟,就不多說了。
        2)spring:相信spring的大名沒有搞JAVA的不知道了吧。很多人接觸spring最開始應該也是通過它的IOC了解的吧,或者直接啥都不知道,就三大框架SSH來了。沒關系,反正當我們用三大框架時,spring很大程度上是作為一個紐帶類的工具,結合另外兩大框架,SSI,SSH都一樣,spring只是提供了工具讓我們更方便地使用三大框架。當然,框架結合中很大程序也依賴了spring的IOC,另外,事務我們也當然會用到。AOP這些比較高級的東西,就要看需要了,如有什么日志要求,攔截要求,用AOP就可以實現(xiàn)地比較好了。
        3)Hibernate:Hibernate在JAVA界也是大名鼎鼎的了,基本上是ORM的標準了。它提供了緩存,一級和二級,并且還有HQL,三大框架結合的時候,我們用它的什么呢?當然就是ORM這個映射的主要功能了,緩存的我們暫時不考慮了。很多人沒考慮過為什么需要ORM吧。其實主要還是因為數(shù)據(jù)的字段和類之間的沖突,如果用JDBC來操作,一個個字段去set,估計做久了,人都會瘋掉,所以這時ORM就出現(xiàn)了。
        三大框架各自負責的東西如下:struts2——負責請求轉發(fā)及表單的相應處理,spring——類的組織(即IOC),把本來由struts2管理的Action作為bean來管理,hibernate——ORM映射,把類映射到表中。
 
        了解了大概分工,當然就開始我們的編碼了。三大框架比較麻煩的就是包了,很多人喜歡用myeclipse主要還是因為它可以幫我們導入三大框架的包。但建議新手還是不要用那個,一是myeclipse有自己的項目結構,拿到eclipse一導還要設置一些project facet之類的,給別人帶來不便;二是公司里面很少用myeclipse,還是熟悉eclipse好點?;蛘呦矚gidea的也不錯。
        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了,還是那句話,不建議一上來就放所有包,因為三大框架有些包是有沖突的,在需要的時候酌情加上就好,出現(xiàn)ClassNotFound的時候就把到相應的JAR包,放到lib目錄下。
 
        準備工作就到此結束了,我們正式開始了。
        1)首先,我們需要使用struts2,肯定要讓他攔截請求

?
1
2
3
4
5
6
7
8
<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。如下:

?
1
2
<constant name="struts.objectFactory" value="spring" />
<constant name="struts.action.extension" value="action" />

         struts.action.extension就配置了攔截的默認后綴名,這樣在攔截的時候就會檢查后綴名,符合的就會被struts進行轉發(fā)了。而struts.objectFactory而是表示把struts的轉發(fā)處理類交由spring來進行管理,也即是作為bean進行管理。
       
        2)平常我們直接使用spring的時候,會調用*ApplicationContext,但我們現(xiàn)在是在WEB情況下,總不能手動調用吧。實際上,spring提供了一個供WEB情況下調用的方法,有一個servlet(這個我沒用過,不大清楚怎么用),一個listener,servlet是供不支持filter的應用服務器調用的,但現(xiàn)在我們基本上都使用listener了。

?
1
2
3
<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>

        這種情況下是spring需要和其他框架結合的情況下使用的大部分情況,當我們只是使用springMVC時,就可以直接配置DispatcherServlet進行替換上面的struts的servlet,具體我們之后用springMVC的時候再看。
        這種情況下,一般會去加載WEB-INF目錄下的applicationContext.xml文件,當你文件名不是這個,或者路徑不在這里時,就可以配置configContextPath屬性

?
1
2
3
4
<context-param>
  <param-name>configContextPath</param-name>
  <param-value>WEB-INF/applicationContext.xml</param-value>
</context-param>

         它支持使用classpath:前綴等,這里不多說了,可以詳細看spring的配置文件。這樣實際上我們就已經(jīng)把struts和spring結合起來了,只是沒有進行一些bean的配置和struts的轉發(fā)罷了。
       
         3)而作為ORM的hibernate,此時也由spring來一起管理。spring提供了一個LocalSessionFactory,注意,這個類,hibernate3和4是不同的,spring提供了兩個。下面這段配置在applicationContext.xml中

?
1
2
3
4
5
6
7
8
9
10
11
<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,這里它內部怎么管理我們就暫時先不管了。

?
1
2
3
4
5
6
7
8
<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。
        代碼就不寫詳細的了,大致如下的:

?
1
2
3
4
5
6
7
8
@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即可。
 
         代碼詳細的就不貼了,畢竟是總結貼??偟脕碚f,SSH對于一個團隊內規(guī)范代碼是比較有好處的,因為在框架的規(guī)范下寫出的代碼基本上有一個特定的形式在,對以后的維護也好點。但對于初學的朋友來說,建議不要太多的依賴框架,真非要用,至少需要在總體上了解一下這個框架做了什么,什么情況下需要用它,什么情況下絕不要用。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人做视频免费 | 国产欧美一区二区精品性色99 | 妹妹骑上来蹭着蹭着就射了 | 亚洲 色 欧美 爱 视频 日韩 | 亚洲乱码一区二区三区国产精品 | 成人免费观看一区二区 | 成年性生交大片免费看 | 亚洲六月丁香婷婷综合 | 免费一级毛片在级播放 | 欧美综合国产精品日韩一 | 日韩欧美一区二区三区免费观看 | 91一区二区在线观看精品 | videos欧美肥婆| 亚州中文字幕 | 男人晚上适合偷偷看的污污 | 亚洲成片在线看 | 热久久亚洲 | 亚洲国产果果在线播放在线 | 99精彩视频在线观看 | 无颜之月5集全免费看无删除 | bnb998八度免费影院丫意浓 | 乌克兰肛交影视 | 艹逼的视频 | 成年女人毛片免费观看中文w | 97se亚洲国产综合自在线观看 | 色综合久久天天综合观看 | 无码人妻精品一区二区蜜桃在线看 | 亚洲国产网址 | 91在线精品国产丝袜超清 | 午夜香蕉| 精品国产一区二区三区国产馆 | 欧美xxxbrazzers | 国产精品久久久久久久久久久搜索 | 91天堂素人97年清纯嫩模 | 桃乃木香奈作品在线观看 | 好舒服好爽再快点视频 | 国产成人刺激视频在线观看 | 日本69av | 97涩色| 亚洲精品国产成人 | 无码人妻少妇色欲AV一区二区 |