SSH技術(shù)的整合

           

          基于Struts+Spring+Hibernate的使用和部署

          課題說明:   就現(xiàn)在WEB開發(fā)而言,J2EE企業(yè)級開發(fā)技術(shù)比較成熟,開發(fā)模式模式也比較繁多,較流行開發(fā)模式MVC更是普遍,而基于MVC模式開發(fā)的框架也是種類繁多,現(xiàn)在使用最多的可能就是SSH這三種框架,所以展開對這三個框架的糅合使用和淺顯的研究探討。還有由于過去常用的是TomCat的部署和使用,下來學(xué)習(xí)WebLogic的部署,比較其相同點和不同點。

          研究內(nèi)容:   主要是研究討論SSH這三種開源框架的糅合使用到底是怎樣實現(xiàn)方法和策略,及各自的優(yōu)缺點,對以后Domino技術(shù)和J2EE技術(shù)結(jié)合奠定基礎(chǔ)及WebLogic的部署和TomCat的比較。

          需要注意:

          第一:環(huán)境的配置,因為SSH使用到的是三種基于java語言實現(xiàn)的開源框架,所以基本要先把JRE配置好即安裝JDK(6.0).

          第二:配置好Struts ,Spring ,Hibernate這三個開源框架的開發(fā)環(huán)境配置。鑒于簡單起見可以使用MyEclipse6.0 IDE這樣三種開源框架的配置文件IDE已經(jīng)集成好,直接添加就可以是要用。

          第三:開發(fā)使用的部署工具是Tomcat,可以嘗試使用WebLogic,然后對其比較。

          成果方式:

          一:Struts的基礎(chǔ)介紹。

           1: 介紹Struts

          Struts是目前WEB開發(fā)中比較流行的一種開源框架,它主要是采用ServletJSP技術(shù)實現(xiàn)Model2(Servlet+JSP+JavaBean)類型MVC的設(shè)計模式,即是實現(xiàn) 模型-視圖-控制三部分模塊的分離。

          2StrutsMVC的比較

           

           

          Struts

          MVC

          M

          JavaBean(業(yè)務(wù)數(shù)據(jù)),

          Service Class(業(yè)務(wù)邏輯)

          M模型

          V

          JSP(動態(tài)網(wǎng)頁)

          ActionForm(表單數(shù)據(jù)操作)

          V視圖

          C

          ActionServlet(接受頁面請求),

          Action(處理請求;控制流程),

          struts-config.xml(配置參數(shù))

          C控制部分

          3Struts的基本工作流程

           基本流程:

          (1):WEB啟動,初始化ActionServlet,讀取struts-config.xml的配置信息,作準(zhǔn)備。

          (2):用戶發(fā)出一個請求,ActionServlet接受,根據(jù)ActionMapping查找相應(yīng)的Action

          (3):Action調(diào)用JavaBean,并且結(jié)合ActionForm,處理數(shù)據(jù)。

          (4):處理完成后,返回ActionForward,指定轉(zhuǎn)向的地方。

          二:Spring基礎(chǔ)介紹

          1: 介紹Spring

          Spring框架也是一個開源框架,它的核心概念是依賴注入(Dependency Injection),通過依賴注入機制,可以再運行期間將組件之間的依賴關(guān)系由Spring容器注入組件,同時spring框架還提供AOP開發(fā)以及事務(wù)管理的組件,以及對WEB層和持久層的支持,從而可以很好配合StrutsHibernate框架。

          2Spring框架的組建構(gòu)成

            Spring框架大體由七個模塊構(gòu)成:

          A Core模塊。該模塊是其他模塊的功能基礎(chǔ),在這個模塊中存在BeanFactory類,它是Spring框架的核心,它實現(xiàn)依賴注入,是系統(tǒng)中的各組件的一倆關(guān)系從代碼中獨立出來,通過配置文件來實現(xiàn);BeanFactory也是Spring框架的核心容器,因為他管理容器中對象的生命周期。

          B Context模塊。這個模塊是通過配置文件將各個組件組合在一起,使spring成為框架。其中ApplicationContext類擴展繼承BeanFactory的功能,因此它也可以成為Spring容器。此外該模塊還提供其他的服務(wù)。

          C DAO模塊。這個模塊把JDBC代碼中的一些內(nèi)容抽象出來,簡化JDBC編碼。

          D ORM模塊。這個模塊提供對ORM框架的支持,從而可以擴展Spring框架支持ORM框架。

          E AOP模塊。這個模塊提供AOP(面向切面編程)的功能,通過這個模塊可以將通用功能插入到業(yè)務(wù)邏輯中。

          FWEB模塊。此模塊提供WEB應(yīng)用所需要的上下文,可以與Struts等框架相結(jié)合。

          GWEBmvc模塊,它提供面向WEB應(yīng)用的MVC模式,模塊利用依賴注入將控制部分和業(yè)務(wù)邏輯清晰分離。

          3:理解依賴注入和方式

               依賴注入也就是控制反轉(zhuǎn)(IoC),把組件之間的依賴關(guān)系通過Spring容器來管理和注入。

          組件之間的依賴關(guān)系通過配置文件來定義,或者說通過注入來實現(xiàn)的。

           

          A:配置WebApplicationContext

             兩種方式:

                 (1):在web.xml文件中配置WebApplicationContext ,就可以在WEB容器自動加載applicationContext.xml文件,具體的配置方法有兩種:

          a:利用Servlet接口來實現(xiàn)

          具體代碼:

               <context-param>

                   <param-name>contextConfigLocation</param-value>

                   <param-value>/WEB-INF/applicationContext.xml</param-value>

               </context-param>

               <servlet>

                  <servlet-name>context</servlet-name>

          <servlet-class>org.springframework.web.context.ContextLoaderServlet

          </servlet-class>

                  <load-on-startup>1</load-on-startup>

               </servlet>

          b:利用Listeners接口來實現(xiàn)

          具體代碼:

          <listener>

           <listener-class>

          org.springframework.web.context.ContextLoaderListener

          </listener-class>

          </listerer>

               <context-param>

                   <param-name>contextConfigLocation</param-value>

                   <param-value>/WEB-INF/applicationContext.xml</param-value>

               </context-param>

          (2)Struts中實現(xiàn)Spring的插件集成

          <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
                          
          <set-propert property="contextConfigLocation"

          value="/WEB-INF/applicationContext.xml" />
                    
          </plug-in>

          BSpringBean

          Bean的定義:

           1Bean的參數(shù)配置

                    id bean的代號標(biāo)示

                    classBean的對應(yīng)的類URL

                    singleton設(shè)置是否為單態(tài)

                    

          2Bean屬性的配置

                 三種類型的Bean屬性配置:一般用<property>屬性來嵌入Bean的引用屬性

                   a:基本數(shù)據(jù)類型     —— 通過<value>元素來表示

                   b:其他Bean的引用  —— 通過<ref>元素來表示

                   c:對集合的引用      —— 通過<list><set><map>

          3:依賴注入的兩種方式

                   a:設(shè)置注入。

                         主要是在Bean中通過get()set()方法獲得相應(yīng)的屬性,在配置文件中通過<property>元素來實現(xiàn)。

                   B:構(gòu)造函數(shù)注入。 

                         主要是在Bean中通過Bean的構(gòu)造方法初始化相應(yīng)的屬性,在配置文件中通過<constructor-arg>元素來實現(xiàn)。

          C:實例化Bean

                1BeanFactory的實例化

           

                       BeanFactory采用工廠模式實例化和分發(fā)BeanBeanFactory接口路徑為:org.springframework.beans.factory.BeanFactory. 該接口定義4個方法:

                     Boolean containsBean(String) 判斷給定的bean是否存在。

                     Object getBeanString)返回給定名字的Bean實例。

                     Object getBeanStringClass)返回給定名字的Bean,并把該Bean強制轉(zhuǎn)化為給定的Class類型。

                      Boolean isSingleton(String) 判斷給定的名字Bean是否為單態(tài)。

                

          BeanFactory接口有多實現(xiàn),其中常用的是org.springframework.beans.factory.XmlBeanFactory.

           使用方式:InputStream is=new FileInputStream(“applicationContext.xml”);

                           XmlBeanFactory factory=new XmlBeanFactory(is);

              sampleSpringBean sample=( sampleSpringBean) factory.getBean(“sampleSpringBean”);                

           

                 2:ApplicationContext的實例化

           

                         BeanFactory適應(yīng)于較為簡單的應(yīng)用系統(tǒng),對于復(fù)雜的應(yīng)用系統(tǒng)應(yīng)該使用ApplicationContext容器,它覆蓋BeanFactory的所有功能,而且提供更多的其他方法。

                ApplicationContext接口位于包org.springframework.context.ApplicationContext中,他繼承BeanFactory接口,它的實現(xiàn)有多個,常用的有3個:

             ClassPathXmlApplicationContext:利用類路徑裝載bean配置文件信息。

             FileSystemXmlApplicationContext:利用文件系統(tǒng)裝載bean配置文件的信息。

             XmlWebApplicationContext:從Web裝載bean配置文件的信息。

                       加載ApplicationContext容器:  

          可以通過兩種方式:

          1:編碼的方式——就是配置WebApplicationContext是講到的。

          2:硬編碼的方式。

          ApplicationContext context = new FileSystemXmlApplicationContext(“applicationContext.xml”)

           

          ApplicationContext實例化bean的使用方法

          ApplicationContext context= new FileSystemXmlApplicationContext(“applicationContext.xml”);

          sampleSpringBean sample=( sampleSpringBean) context.getBean(“sampleSpringBean”);

           

           

           

           

          三:StrutsSpring的集成

                Struts框架出現(xiàn)早,對MVC的設(shè)計技術(shù)比Spring成熟,但是Spring框架的依賴注入和AOP(面向切面),以及聲明事務(wù)管理方面優(yōu)勢顯著,所以可以再業(yè)務(wù)邏輯方面使用它。

              StrutsSpring的集成實現(xiàn)方式也是比較多的,大體有三種方案:

            A:使用SpringActionSupport類集成Struts

               采用這種方式進行集成的方案是:    修改Struts中的Action,使StrutsAction繼承SpringActionSupport類,這樣Action中定義的業(yè)務(wù)邏輯對象就可以通過getBean()方法從Spring的配置文件中獲得,從而達(dá)到目的。  但是這也有缺點,就是StrutsActionSpring緊密的耦合在一起。

            B:使用SpringAction代理集成Struts

                 采用這種方式進行集成的方案是:    需要建立一個SpringAction代理,代理StrutsAction,當(dāng)Struts執(zhí)行Action時候就會執(zhí)行這個代理。代理會在Spring的配置文件中找到真正的StrutsAction,然后交友這個Action去處理,當(dāng)然首先要在spring的配置文件中跑那個配置這個Action                  這種集成只需要修改Actiontype屬性為 org.springframework.web.struts.DelegationActionProxy.并且SpringAction配置中的name屬性和StrutsAction配置path相同。       缺點是不容易找到是哪個Action處理的。

             C:修改struts控制器來集成Struts

                 采用這種方式進行集成的方案是:   為拉直觀的的在Struts配置中顯示Action對應(yīng)的處理類,需要修改Strutscontroller,將struts-config.xml中的controller改為org.springframework.web.struts.DelegatingRequestProcessor.

           

          四:Hibernate的介紹

               Hibernate利用ORM(對象關(guān)系映射)的機制解決業(yè)務(wù)邏輯和數(shù)據(jù)訪問的相分離的問題,Hibernate封裝數(shù)據(jù)訪問的細(xì)節(jié),簡化數(shù)據(jù)訪問的復(fù)雜程度,把注意力主要在業(yè)務(wù)邏輯上面,同時通過維護ORM文件,簡單用以維護。

          1:對象持久化的概念

             由于實體域?qū)ο蟠嬖谟趦?nèi)存中,但是不可能永遠(yuǎn)存在,很多情況下把實體域?qū)ο笥谰玫拇鎯υ跀?shù)據(jù)庫中,這個過程就是對象持久化。  其中被持久化的實體域?qū)ο蠓Q為持久化對象,持久化對象對應(yīng)的產(chǎn)生類稱為持久化類。

            傳統(tǒng)的持久化方法是:  創(chuàng)建連接,執(zhí)行SQL語句,獲得結(jié)果集,關(guān)閉結(jié)果集,關(guān)閉數(shù)據(jù)庫連接。所以每次都要重復(fù)相同的過程,冗余太大。

          2ORM介紹

               ORM就是對象關(guān)系映射,主要目的是使業(yè)務(wù)邏輯和數(shù)據(jù)庫訪問相分離,ORM中間件封裝數(shù)據(jù)訪問的細(xì)節(jié),開發(fā)者只需要進行簡單的操作就可以完成持久化工作。

               ORM的關(guān)鍵就是對象和關(guān)系的映射關(guān)系,因為有這樣的映射關(guān)系,所以才可以簡單的持久化對象。在ORM中,這種對應(yīng)的關(guān)系存在于一個XML文件中,稱為對象關(guān)系映射文件,這個映射文件起到一個橋梁作用,使得ORM中間件持久化一個對系那個的時候能夠找到目的地,即就是表。

          3Hibernate簡介

          Hibernate就是一個ORM中間件,它是一個開源的框架,對JDBC做啦輕量級的封裝,并且支持主流數(shù)據(jù)庫,可以提高開發(fā)效率。

           AHibernate的核心接口

               Hibernate的核心接口一共五個:分別為ConfigurationSessionFactorySessionQueryCriteria接口,以及Transaction接口。

           

            1configuration接口主要功能:   它是Hibernate的入口,創(chuàng)建configuration對象主要是把Hibernate的配置文件和ORM文件讀到內(nèi)存中,并且創(chuàng)建SessionFactory對象,把所有讀到的信息復(fù)制給SessionFactory

           

           2SessionFactory接口主要功能:   它緩存復(fù)制到的所有讀到的信息,以及根據(jù)映射信息自動生成的SQL語句,并產(chǎn)生Session對象。一個數(shù)據(jù)庫只能對應(yīng)一個SessionFactory

           

           3session接口主要功能:          這個接口主要是定義各種持久化操作的方法,比如:Save()CreateQuery()Update()

           

            4QueryCriteria接口主要功能:  主要數(shù)據(jù)庫的查詢,HQL語句主要是面向?qū)ο蟮臎]他的參數(shù)是持久化類的類名和屬性,SQL語句主要是表和字段。

            5Transaction接口的主要功能是:    對底層的數(shù)據(jù)事務(wù)進行封裝。

          BHibernate的配置文件

              Hibernate的配置文件有兩種類型:Hibernate.property Hibernate.cfg.xml,或者自定義配置文件。主要功能是配置數(shù)據(jù)庫連接的相關(guān)信息

                   兩種文件的區(qū)別是:

          1Hibernate.cfg.xml多個<mapping>元素,這個元素的resource屬性值是ORM文件的路徑。

          2:兩者同時存在時候,configuration接口線加載Hibernate.property 文件,在加載Hibernate.cfg.xml,然后Hibernate.cfg.xml的信息覆蓋掉Hibernate.property的信息。

               CHibernate的初始化過程

                    Hibernate的初始化過程主要是遵循五個接口來實現(xiàn):

                  1:建立configuration對象。

                        Configuration config=new Configuration();

                        Config.addClass(持久化類);

                 或者  Configuration config=new Configuration().configureHibernate配置文件URL);

                  2:建立SessionFactory對象

                        SessionFactory factory=config.buildSessionFactory();

                        12步就完成Hibernate的初始化。

          3:建立Session對象

                 Session session=factory.OpenSession();

                  Session.save();

                 接著就可以完成相關(guān)操作。

          DHibernate的一般實例使用。

              1:創(chuàng)建數(shù)據(jù)庫  2:寫相應(yīng)的持久化類  3:建立ORM文件 

          4:建立Hibernate配置文件  5:建立數(shù)據(jù)庫訪問類DAO  6:建立業(yè)務(wù)邏輯

          五:SpringHibernate的集成策略

            通過對HibernateSpring的基本知識的了解和應(yīng)用,了解到SpringHibernate的有點鮮明,所以實現(xiàn)兩者的整合對開發(fā)效率有很大的提高。

           

          A:集成方案:   SpringHibernate的集成方案有兩種:

           

           1:一種是利用Hibernate Synchronizer來自動生成大量數(shù)據(jù)訪問操作的方法。這些方法封裝了session對象的操作,開發(fā)者可以直接利用這些方法來定義DAO,這種DAOSpring是沒有耦合的。

            2:另一種方式是通過Spring提供的Hibernate模板(Hibernate Template)來訪問的。模板對session對象的操作進行啦封裝,在開發(fā)過程中可以直接使用模板的方法來實現(xiàn)數(shù)據(jù)的訪問,而且用戶不需要在定義和事物相關(guān)的語句,如開始,提交,回滾事物以及進行事務(wù)處理。但是這種方式HibernateSpring的耦合在一起,不利于移植。

           

          B:第一種方案的介紹

          Hibernate SynchronizerHibernate自帶的一種插件,利用它可以根據(jù)數(shù)據(jù)庫的表自動生成ORM文件,持久化類,DAO類,并且對其中任何一個修改,都可以相應(yīng)的自動改變。從而提高開發(fā)效率。

          在這種集成方式中,Spring的配置文件ApplicationContext.xml文件是SpringHibernate結(jié)合的重要部分,它將應(yīng)用中的各種依賴關(guān)系裝配起來,在運行期將這種依賴關(guān)系注入內(nèi)存,還可以注入事務(wù)代理等,他就像是SpringHibernate結(jié)合的紐帶。

           

          C:第二種方案的介紹

          這種方案是利用Spring提供那個Hibernate Template來建立DAO類,并通過Spring配置文件將DAO類注入到應(yīng)用中。

          SpringHibernateDAO提供支持,其中Spring提供的Hibernate Template類以及HibernateDaoSupport類是建立DAO時候用到的兩個類。

          1Hibernate模板類介紹

             Hibernate模板類存在于包org.springframework.orm.hibernate3下,它提供很多方法完成基本的操作。可以完成大多數(shù)DAO的基本方法。

           

          利用Hibernate的自帶的一下方法可以實現(xiàn)簡單的一些數(shù)據(jù)庫操作,但隨對于復(fù)雜的數(shù)據(jù)庫操作,可以通過下面的方法來實現(xiàn):

           aObject execute(HibernateCallback  action)

           bList executeFind(HibernateCallback  action)

            從上面的方法中可以看到,都有一個HibernateCallback的實例作為參數(shù),因為通過HibernateCallback可以完成完全使用Hibernate的方式訪問數(shù)據(jù)庫,解決SpringHibernate集成以后不靈活的缺陷。

          HibernateCallback只是一個接口,他只有一個方法doInHibernateorg.hibernate.Session session,這個方法也只有一個參數(shù)Session。這樣doInHibernate方法的持久化操作與不使用Spring時的操作完全相同,這樣就可以像使用Hibernate一樣的訪問方式。

           

          使用方法:首先DAO中聲明HibernateTemplate對象,然后通過該對象執(zhí)行那個相應(yīng)的簡單操作。

           

          2 HibernateDaoSupport

              HibernateDaoSupport類封裝Hibernate Template類的操作,在HibernateDaoSupport類中主要提供兩個方法用于實現(xiàn)DAO

          Apublic final void setSessionFactory(SessionFactory sessionFactory):這個方法用于接收Spring上下文中的SessionFactory對象的依賴注入。

          BPublic final HibernateTemplate getHibernateTemplate():用于根據(jù)SessionFactory產(chǎn)生的session,然后生成HibernateTemplate,從而訪問數(shù)據(jù)庫。

           

          使用方法:在DAO的實現(xiàn)中,首先要使DAO集成HibernateDaoSupport類,然后通過Spring上下文注入DAOSessionFactory的依賴,最后使用getHibernateTemplate()方法來完成具體的DAO的操作。

           

            

          posted on 2009-05-15 15:03 安陽 閱讀(5052) 評論(7)  編輯  收藏 所屬分類: SSH筆記

          評論

          # re: SSH技術(shù)的整合 2009-05-15 15:05 安陽

          很不錯的,很詳細(xì)。努力。  回復(fù)  更多評論   

          # re: SSH技術(shù)的整合 2009-05-15 17:33 V

          不錯  回復(fù)  更多評論   

          # re: SSH技術(shù)的整合 2009-05-21 10:51 11

          頂一下。。。  回復(fù)  更多評論   

          # re: SSH技術(shù)的整合 2009-05-30 23:17 哈哈哈

          恩 不賴   回復(fù)  更多評論   

          # re: SSH技術(shù)的整合 2009-06-26 17:02 w

          很好  回復(fù)  更多評論   

          # re: SSH技術(shù)的整合 2009-06-28 14:03 安陽

          黑猩猩頂一下。  回復(fù)  更多評論   

          # re: SSH技術(shù)的整合 2012-08-22 16:28 andysd

          不錯  回復(fù)  更多評論   


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          <2009年5月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(2)

          隨筆分類(8)

          隨筆檔案(9)

          文章檔案(1)

          最新隨筆

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 齐河县| 临湘市| 洛阳市| 东乡族自治县| 法库县| 广州市| 池州市| 上饶县| 平顺县| 衡阳市| 甘德县| 连平县| 绥棱县| 道孚县| 邢台县| 信丰县| 临沂市| 潜山县| 新密市| 延吉市| 苍山县| 遂昌县| 青田县| 深泽县| 开原市| 抚松县| 库尔勒市| 客服| 达孜县| 石渠县| 勃利县| 威远县| 正定县| 武陟县| 左权县| 龙州县| 新建县| 江陵县| 德阳市| 高阳县| 江门市|