SSH整合--基于Struts+Spring+Hibernate的使用和部署

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

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

          研究內容:   主要是研究討論SSH這三種開源框架的糅合使用到底是怎樣實現方法和策略,及各自的優缺點,對以后Domino技術和J2EE技術結合奠定基礎及WebLogic的部署和TomCat的比較。

          需要注意:

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

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

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

          成果方式:

          一:Struts的基礎介紹。

           1: 介紹Struts

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

          2StrutsMVC的比較

          Struts

          MVC

          M

          JavaBean(業務數據),

          Service Class(業務邏輯)

          M模型

          V

          JSP(動態網頁)

          ActionForm(表單數據操作)

          V視圖

          C

          ActionServlet(接受頁面請求),

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

          struts-config.xml(配置參數)

          C控制部分

          3Struts的基本工作流程

           基本流程:

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

          (2):用戶發出一個請求,ActionServlet接受,根據ActionMapping查找相應的Action。

          (3):Action調用JavaBean,并且結合ActionForm,處理數據。

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

          二:Spring基礎介紹

          1: 介紹Spring

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

          2Spring框架的組建構成

            Spring框架大體由七個模塊構成:

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

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

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

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

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

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

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

          3:理解依賴注入和方式

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

          組件之間的依賴關系通過配置文件來定義,或者說通過注入來實現的。

          A:配置WebApplicationContext

             兩種方式:

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

          a:利用Servlet接口來實現

          具體代碼:

               <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接口來實現

          具體代碼:

          <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中實現Spring的插件集成

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

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

          BSpringBean

          Bean的定義:

           1Bean的參數配置

                    id bean的代號標示

                    classBean的對應的類URL

                    singleton設置是否為單態

                    

          2Bean屬性的配置

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

                   a:基本數據類型     —— 通過<value>元素來表示

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

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

          3:依賴注入的兩種方式

                   a:設置注入。

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

                   B:構造函數注入。 

                         主要是在Bean中通過Bean的構造方法初始化相應的屬性,在配置文件中通過<constructor-arg>元素來實現。

          C:實例化Bean

                1BeanFactory的實例化

           

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

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

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

                     Object getBeanString,Class)返回給定名字的Bean,并把該Bean強制轉化為給定的Class類型。

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

          BeanFactory接口有多實現,其中常用的是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適應于較為簡單的應用系統,對于復雜的應用系統應該使用ApplicationContext容器,它覆蓋BeanFactory的所有功能,而且提供更多的其他方法。

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

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

             FileSystemXmlApplicationContext:利用文件系統裝載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框架出現早,對MVC的設計技術比Spring成熟,但是Spring框架的依賴注入和AOP(面向切面),以及聲明事務管理方面優勢顯著,所以可以再業務邏輯方面使用它。

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

            A:使用SpringActionSupport類集成Struts

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

            B:使用SpringAction代理集成Struts

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

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

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

          四:Hibernate的介紹

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

          1:對象持久化的概念

             由于實體域對象存在于內存中,但是不可能永遠存在,很多情況下把實體域對象永久的存儲在數據庫中,這個過程就是對象持久化。 其中被持久化的實體域對象稱為持久化對象,持久化對象對應的產生類稱為持久化類。

           傳統的持久化方法是: 創建連接,執行SQL語句,獲得結果集,關閉結果集,關閉數據庫連接。所以每次都要重復相同的過程,冗余太大。

          2ORM介紹

               ORM就是對象關系映射,主要目的是使業務邏輯和數據庫訪問相分離,ORM中間件封裝數據訪問的細節,開發者只需要進行簡單的操作就可以完成持久化工作。

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

          3Hibernate簡介

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

           AHibernate的核心接口

               Hibernate的核心接口一共五個:分別為Configuration,SessionFactory,Session,QueryCriteria接口,以及Transaction接口。

           1configuration接口主要功能:   它是Hibernate的入口,創建configuration對象主要是把Hibernate的配置文件和ORM文件讀到內存中,并且創建SessionFactory對象,把所有讀到的信息復制給SessionFactory。

           2SessionFactory接口主要功能:   它緩存復制到的所有讀到的信息,以及根據映射信息自動生成的SQL語句,并產生Session對象。一個數據庫只能對應一個SessionFactory。

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

           4QueryCriteria接口主要功能: 主要數據庫的查詢,HQL語句主要是面向對象的沒他的參數是持久化類的類名和屬性,SQL語句主要是表和字段。

           5Transaction接口的主要功能是:    對底層的數據事務進行封裝。

          BHibernate的配置文件

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

                   兩種文件的區別是:

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

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

               CHibernate的初始化過程

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

                  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();

                 接著就可以完成相關操作。

          DHibernate的一般實例使用。

              1:創建數據庫 2:寫相應的持久化類 3:建立ORM文件 

          4:建立Hibernate配置文件 5:建立數據庫訪問類DAO 6:建立業務邏輯

          五:SpringHibernate的集成策略

           通過對HibernateSpring的基本知識的了解和應用,了解到SpringHibernate的有點鮮明,所以實現兩者的整合對開發效率有很大的提高。

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

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

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

          B:第一種方案的介紹

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

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

          C:第二種方案的介紹

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

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

          1Hibernate模板類介紹

             Hibernate模板類存在于包org.springframework.orm.hibernate3下,它提供很多方法完成基本的操作??梢酝瓿纱蠖鄶?/span>DAO的基本方法。

          利用Hibernate的自帶的一下方法可以實現簡單的一些數據庫操作,但隨對于復雜的數據庫操作,可以通過下面的方法來實現:

           aObject execute(HibernateCallback  action)

           bList executeFind(HibernateCallback action)

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

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

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

          2 HibernateDaoSupport

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

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

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

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

          posted on 2011-03-25 17:08 Mr.lu 閱讀(797) 評論(0)  編輯  收藏


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


          網站導航:
           
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導航

          統計

          常用鏈接

          留言簿(2)

          隨筆檔案

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 武隆县| 宣城市| 五常市| 江西省| 容城县| 孝感市| 崇阳县| 三原县| 马龙县| 甘谷县| 兴业县| 驻马店市| 潮州市| 苍溪县| 杭州市| 上虞市| 星座| 拜城县| 赫章县| 晋州市| 囊谦县| 来安县| 屏东市| 嘉定区| 林周县| 藁城市| 黑山县| 上饶县| 麻江县| 哈巴河县| 巴彦县| 梁山县| 隆尧县| 张家港市| 常熟市| 葫芦岛市| 车险| 阳曲县| 彩票| 咸阳市| 衡阳县|