最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2015年12月28日 16:11:29   作者:cxshun  
這篇文章主要介紹了Java的web開(kāi)發(fā)中SSH框架的協(xié)作處理應(yīng)用筆記,SSH是指Struts和Spring以及Hibernate的框架搭配,需要的朋友可以參考下

 相信SSH沒(méi)人不知道了吧,struts2+spring+hibernate,企業(yè)開(kāi)發(fā)的“基礎(chǔ)”架構(gòu),為什么基礎(chǔ)標(biāo)上引號(hào),因?yàn)檫@個(gè)基礎(chǔ)只是很多人自以為的而已,最基礎(chǔ)的是servlet,很多培訓(xùn)機(jī)構(gòu)很多基礎(chǔ)都不教,直接上來(lái)就三大框架了,SSH不然就SSI,搞得很多人以為JAVAWEB開(kāi)發(fā)就一定要框架,沒(méi)框架就跟沒(méi)了手一個(gè)樣。三大框架沒(méi)有什么壞處,實(shí)用,很多公司都在用,直接上手開(kāi)發(fā)。但畢業(yè)以為真的好久沒(méi)用三大框架了,spring倒是有用,特別是springMVC,感覺(jué)用起來(lái)比struts2爽多了。其實(shí)想想也知道,spring是吸收了struts的一些優(yōu)點(diǎn)的,另外加上一些RESTFUL的東西,感覺(jué)爽多了。但今天我們不看springMVC,以后我們?cè)俪闀r(shí)間來(lái)一起看看springMVC的優(yōu)雅的地方。

        進(jìn)入正題啦。SSH一直在更新版本,這里我還是要說(shuō)一下版本,不然一堆朋友會(huì)罵我一頓的,struts2我用的是2.3.4,spring是最新的3.2.2,hibernate是4.1.9,還是蠻新的啊。
       
        在進(jìn)入代碼前,我們先來(lái)了解下三大框架各自扮演的角色。
        1)struts:為什么我們用struts,跟servlet比起來(lái)什么區(qū)別?實(shí)際上不用struts我們還是可以做到MVC的,只是在配置文件上面可能就比較郁悶點(diǎn)了。struts主要幫我們實(shí)現(xiàn)分發(fā)的一個(gè)功能,將我們的具體的請(qǐng)求分到某一個(gè)具體的類(lèi)中,并幫我們進(jìn)行屬性的設(shè)置(struts1.X中通過(guò)ActionForm來(lái)進(jìn)行)。struts2相比struts1是進(jìn)步很多了,自動(dòng)設(shè)值,沒(méi)有強(qiáng)制要求實(shí)現(xiàn)或繼承類(lèi),并且有了一系列的請(qǐng)求鏈之類(lèi)的概念。由于這些用得不多,免得誤導(dǎo)各位兄弟,就不多說(shuō)了。
        2)spring:相信spring的大名沒(méi)有搞JAVA的不知道了吧。很多人接觸spring最開(kāi)始應(yīng)該也是通過(guò)它的IOC了解的吧,或者直接啥都不知道,就三大框架SSH來(lái)了。沒(méi)關(guān)系,反正當(dāng)我們用三大框架時(shí),spring很大程度上是作為一個(gè)紐帶類(lèi)的工具,結(jié)合另外兩大框架,SSI,SSH都一樣,spring只是提供了工具讓我們更方便地使用三大框架。當(dāng)然,框架結(jié)合中很大程序也依賴(lài)了spring的IOC,另外,事務(wù)我們也當(dāng)然會(huì)用到。AOP這些比較高級(jí)的東西,就要看需要了,如有什么日志要求,攔截要求,用AOP就可以實(shí)現(xiàn)地比較好了。
        3)Hibernate:Hibernate在JAVA界也是大名鼎鼎的了,基本上是ORM的標(biāo)準(zhǔn)了。它提供了緩存,一級(jí)和二級(jí),并且還有HQL,三大框架結(jié)合的時(shí)候,我們用它的什么呢?當(dāng)然就是ORM這個(gè)映射的主要功能了,緩存的我們暫時(shí)不考慮了。很多人沒(méi)考慮過(guò)為什么需要ORM吧。其實(shí)主要還是因?yàn)閿?shù)據(jù)的字段和類(lèi)之間的沖突,如果用JDBC來(lái)操作,一個(gè)個(gè)字段去set,估計(jì)做久了,人都會(huì)瘋掉,所以這時(shí)ORM就出現(xiàn)了。
        三大框架各自負(fù)責(zé)的東西如下:struts2——負(fù)責(zé)請(qǐng)求轉(zhuǎn)發(fā)及表單的相應(yīng)處理,spring——類(lèi)的組織(即IOC),把本來(lái)由struts2管理的Action作為bean來(lái)管理,hibernate——ORM映射,把類(lèi)映射到表中。
 
        了解了大概分工,當(dāng)然就開(kāi)始我們的編碼了。三大框架比較麻煩的就是包了,很多人喜歡用myeclipse主要還是因?yàn)樗梢詭臀覀儗?dǎo)入三大框架的包。但建議新手還是不要用那個(gè),一是myeclipse有自己的項(xiàng)目結(jié)構(gòu),拿到eclipse一導(dǎo)還要設(shè)置一些project facet之類(lèi)的,給別人帶來(lái)不便;二是公司里面很少用myeclipse,還是熟悉eclipse好點(diǎn)。或者喜歡idea的也不錯(cuò)。
        struts2的必須的包如下:antlr,asm,xwork,struts2-core,ognl,common-logging,common-fileupload,struts-spring-plugin,大概就這幾個(gè),可能沒(méi)寫(xiě)全,大家可以在啟動(dòng)時(shí)報(bào)錯(cuò)的情況再加上,不建議一上來(lái)就丟所有包,三大框架有一些包是沖突的。
        spring3需要的包如下:spring-beans,spring-core,spring-context,spring-context-support,spring-expression,spring-orm(我們用到三大框架,需要ORM支持),spring-web,spring-tx(我們用到事務(wù),但例子中不涉及)。
        hibernate4需要的包如下:hibernate下載包內(nèi)的required文件夾的所有JAR包。
        就大概這些包就OK了,還是那句話(huà),不建議一上來(lái)就放所有包,因?yàn)槿罂蚣苡行┌怯袥_突的,在需要的時(shí)候酌情加上就好,出現(xiàn)ClassNotFound的時(shí)候就把到相應(yīng)的JAR包,放到lib目錄下。
 
        準(zhǔn)備工作就到此結(jié)束了,我們正式開(kāi)始了。
        1)首先,我們需要使用struts2,肯定要讓他攔截請(qǐng)求

<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攔截所有請(qǐng)求,當(dāng)然,并不是說(shuō)就這樣所有請(qǐng)求就被spring攔截了,我們還可以配置struts.xml,讓struts攔截特定的后綴名,一般情況下都是action。如下:

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

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

<listener> 
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
 </listener> 

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

<context-param> 
  <param-name>configContextPath</param-name> 
  <param-value>WEB-INF/applicationContext.xml</param-value> 
</context-param> 

         它支持使用classpath:前綴等,這里不多說(shuō)了,可以詳細(xì)看spring的配置文件。這樣實(shí)際上我們就已經(jīng)把struts和spring結(jié)合起來(lái)了,只是沒(méi)有進(jìn)行一些bean的配置和struts的轉(zhuǎn)發(fā)罷了。
       
         3)而作為ORM的hibernate,此時(shí)也由spring來(lái)一起管理。spring提供了一個(gè)LocalSessionFactory,注意,這個(gè)類(lèi),hibernate3和4是不同的,spring提供了兩個(gè)。下面這段配置在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> 

 
         其實(shí)的配置就跟hibernate中的類(lèi)似了,這里不多說(shuō)具體的代碼了。
 
        4)在以前spring2.5.x的時(shí)候,我們用的最多的是HibernateDaoSupport,但spring3.X開(kāi)始就不提供這個(gè)支持了,我們需要用原生的session進(jìn)行操作(只需要注入SessionFactory即可),但這里實(shí)際上就涉及到一個(gè)問(wèn)題,如果我們每個(gè)請(qǐng)求都去打開(kāi)關(guān)閉連接,會(huì)比較消耗資源,但如果不關(guān)閉連接,又會(huì)不大好。所以就需要有一個(gè)折衷的方案,有一個(gè)管理器來(lái)管理連接。這里spring提供了一個(gè)OpenSessionInView,在每打開(kāi)一個(gè)view(基本上是每一個(gè)請(qǐng)求時(shí)),會(huì)打開(kāi)Session,這里它內(nèi)部怎么管理我們就暫時(shí)先不管了。

<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> 

         這里還是讓他攔截所有的請(qǐng)求,當(dāng)然可以配置成只攔截action后綴的,就沒(méi)有必要浪費(fèi)資源了。
 
        5)基本上,我們的SSH框架就搭好了,接下來(lái)只是代碼的問(wèn)題了。只需要在spring配置文件中配置bean,或者喜歡Annotation的話(huà)可以直接@Component(value='bean名稱(chēng)')就可以了,但要記得在配置文件中開(kāi)啟Component-scan。
        代碼就不寫(xiě)詳細(xì)的了,大致如下的:

@Component(value="userAction") 
public class UserAction{} 
<package name="user" extends="struts-default" namespace="/user"> 
    <!-- 用戶(hù)登錄 --> 
    <action name="login" class="userAction" method="login"> 
      <result name="ERROR">/pages/login.jsp</result> 
    </action> 
  </package> 

         實(shí)際上也就是把class中的指向修改為指向bean即可。
 
         代碼詳細(xì)的就不貼了,畢竟是總結(jié)貼??偟脕?lái)說(shuō),SSH對(duì)于一個(gè)團(tuán)隊(duì)內(nèi)規(guī)范代碼是比較有好處的,因?yàn)樵诳蚣艿囊?guī)范下寫(xiě)出的代碼基本上有一個(gè)特定的形式在,對(duì)以后的維護(hù)也好點(diǎn)。但對(duì)于初學(xué)的朋友來(lái)說(shuō),建議不要太多的依賴(lài)框架,真非要用,至少需要在總體上了解一下這個(gè)框架做了什么,什么情況下需要用它,什么情況下絕不要用。

相關(guān)文章

  • Android Home鍵監(jiān)聽(tīng)的實(shí)現(xiàn)代碼

    Android Home鍵監(jiān)聽(tīng)的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Android Home 鍵監(jiān)聽(tīng)的實(shí)現(xiàn)代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Java實(shí)現(xiàn)樹(shù)形List與扁平List互轉(zhuǎn)的示例代碼

    Java實(shí)現(xiàn)樹(shù)形List與扁平List互轉(zhuǎn)的示例代碼

    在平時(shí)的開(kāi)發(fā)中,我們時(shí)常會(huì)遇到需要將"樹(shù)形List"與"扁平List"互轉(zhuǎn)的情況,本文為大家整理了Java實(shí)現(xiàn)樹(shù)形List與扁平List互轉(zhuǎn)的示例代碼,希望對(duì)大家有所幫助
    2023-05-05
  • Mybatis配置之typeAlias標(biāo)簽的用法

    Mybatis配置之typeAlias標(biāo)簽的用法

    這篇文章主要介紹了Mybatis配置之typeAlias標(biāo)簽的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • java中ArrayList與LinkedList對(duì)比詳情

    java中ArrayList與LinkedList對(duì)比詳情

    這篇文章主要通過(guò)實(shí)例對(duì)Java中ArrayList與LinkedList進(jìn)行了對(duì)比,需要的朋友可以參考下
    2017-04-04
  • Java單元測(cè)試Powermockito和Mockito使用總結(jié)

    Java單元測(cè)試Powermockito和Mockito使用總結(jié)

    公司單元測(cè)試框架選用了Junit 4.12,Mock框架選用了Mockito和PowerMock,本文主要介紹了Java單元測(cè)試Powermockito和Mockito使用總結(jié),感興趣的可以了解一下
    2021-09-09
  • vue驗(yàn)證碼組件應(yīng)用實(shí)例

    vue驗(yàn)證碼組件應(yīng)用實(shí)例

    今天小編就為大家分享一篇關(guān)于vue驗(yàn)證碼組件應(yīng)用實(shí)例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • java圖像識(shí)別工具類(lèi)(ImageRecognitionUtils)使用實(shí)例詳解

    java圖像識(shí)別工具類(lèi)(ImageRecognitionUtils)使用實(shí)例詳解

    這篇文章主要介紹了如何在Java中使用OpenCV進(jìn)行圖像識(shí)別,包括圖像加載、預(yù)處理、分類(lèi)、人臉檢測(cè)和特征提取等步驟,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-01-01
  • SpringBoot整合Swagger2的示例

    SpringBoot整合Swagger2的示例

    這篇文章主要介紹了SpringBoot整合Swagger2的示例,幫助大家更好的理解和學(xué)習(xí)springboot框架,感興趣的朋友可以了解下
    2020-11-11
  • java多線(xiàn)程中的volatile和synchronized用法分析

    java多線(xiàn)程中的volatile和synchronized用法分析

    這篇文章主要介紹了java多線(xiàn)程中的volatile和synchronized用法分析,以實(shí)例的形式分析了在多線(xiàn)程中volatile和synchronized的用法區(qū)別與使用原理,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-12-12
  • Java簡(jiǎn)單驗(yàn)證身份證功能示例

    Java簡(jiǎn)單驗(yàn)證身份證功能示例

    這篇文章主要介紹了Java簡(jiǎn)單驗(yàn)證身份證功能,涉及java針對(duì)字符串的截取、判斷相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06

最新評(píng)論

广平县| 宁海县| 府谷县| 信丰县| 南丹县| 余庆县| 县级市| 巴青县| 凤庆县| 和政县| 措美县| 清涧县| 翁源县| 登封市| 福建省| 漳州市| 贡觉县| 通城县| 辽阳市| 墨脱县| 潜山县| 铁力市| 聂拉木县| 南和县| 麟游县| 高淳县| 祁连县| 广南县| 普陀区| 宣汉县| 开鲁县| 阳东县| 大安市| 水城县| 乐清市| 永福县| 灵寿县| 上饶县| 连南| 繁昌县| 康乐县|