乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Struts+Spring+Hibernate的技術(shù)實現(xiàn)

       芳草小集 2006-03-24
       

      Struts+Spring+Hibernate的技術(shù)實現(xiàn)

       

      一、三個框架簡介

       

      Struts

      Struts是目前Java Web MVC框架中不爭的王者經(jīng)過長達(dá)五年的發(fā)展,Struts已經(jīng)逐漸成長為一個穩(wěn)定、成熟的框架,並且占有了MVC框架中最大的市場份額

       

      Spring

      Spring是一個開源框架,它是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而開發(fā)的。Spring使使用基本的JavaBeans來完成以前只可能由EJB完成的事情變得可能了。Spring的用途不僅限於服務(wù)器端的開發(fā)。從簡單性、可測試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益Spring中應(yīng)用對象被聲明式地組合在一個XML文件裡。Spring也提供了很多基礎(chǔ)功能(事務(wù)管理、持久化框架集成等),讓開發(fā)者更專注於應(yīng)用邏輯。所有的這些特征使開發(fā)者能夠編寫更干淨(jìng)、更易管理、並且更易於測試的代碼。

       

      Hibernate

      Hibernate是高性能的開源框架。提供O/R映射功能,通過XML配置文件能夠?qū)ο笥成涞綌?shù)據(jù)庫。對數(shù)據(jù)操作進(jìn)行了封裝,能夠方便簡潔地解決大多數(shù)的數(shù)據(jù)持久化操作。

       

      二、實現(xiàn)架構(gòu)圖

         

      架構(gòu)介紹

      FilterWeb過瀘器,繼承javax.servlet.Filter,用於處理只要客戶請求就必須初始化或處理的實例。例如可以在這裡進(jìn)行請求的編碼轉(zhuǎn)換,為了更好地支持中文,更好的方法就是把客戶端的請入信息轉(zhuǎn)換成UTF-8格式,並存於數(shù)據(jù)庫中,這種轉(zhuǎn)換就可以在過瀘器中進(jìn)行處理。

       

      ActionServlet:是Struts提供的總控制器,在這裡接收來自客戶端的所有請求,並根據(jù)請求參數(shù)和Struts配置文件struts-config.xml決定請求由那個具體的Action來處理。

       

      ActionStruts提供的Action類,繼承Strutsorg.apache.struts.action.Action類。客戶的不同請求,可以由不同的Action來處理(ActionServlet總控制器選擇)Action用於處理客戶請求的具體操作,比如調(diào)調(diào)用Service層的方法進(jìn)行數(shù)據(jù)保存或讀取。Action還根據(jù)struts-config.xml配置選擇頁面的轉(zhuǎn)發(fā)。對客戶輸入的信息進(jìn)行驗證。

       

      ActionForm:Struts提供的Form類,繼承Strutsorg.apache.struts.action.ActionForm類。用於封裝來自客戶表單的信息,並可以對信息進(jìn)行初級有效性驗證。

       

      Jsptiles-defs.xmltiles-defs.xmlStrtus提供,用於頁面的定義,可以定義JSP模板,不同頁面都可以斷承該模板。Jsp用於表示界面,可以在Jsp中書寫Struts標(biāo)簽由不牽涉任何Java代碼。

       

      Service接口:定義Service的接口,給上層調(diào)用。這裡編寫上層所需方法的定義。

       

      Service接口實現(xiàn):這裡實現(xiàn)Service接口方法的具本實現(xiàn),並實現(xiàn)商務(wù)邏輯。該類為了支持Spring的依賴注入功能,需要實現(xiàn)一個setXxxDAO()的方法,這樣類就可以利用注入來的DAO進(jìn)行數(shù)處理。在這一層利用Spring的事務(wù)管理,對這層的方法進(jìn)行事務(wù)聲明管理。

       

      DAO接口:這裡定義DAO數(shù)據(jù)訪問層的接口,給業(yè)務(wù)層Service調(diào)用。

       

      DAO接口實現(xiàn):這裡具體實現(xiàn)DAO接口的所有方法,只進(jìn)行數(shù)據(jù)的保存、讀取、更新等動作,不牽涉事務(wù)。該類繼承Springorg.springframework.orm.hibernate3.support.HibernateDaoSupport類,可以不再理會HibernateAPI,即可進(jìn)行Hibernate方式的數(shù)據(jù)操作??梢宰尨a更簡潔,有條理。

       

      Spring這是系統(tǒng)的中心部分,這裡在一個XML配置文件中定義了大部分的系統(tǒng)Bean,並對它們進(jìn)行集中管理。定義了DAO層、Service層的所有類。定義了事務(wù),並且定義了方法的事務(wù)策略。

       

      三、各層的具體實現(xiàn)

      1、底層的數(shù)據(jù)訪問DAO層實現(xiàn)

      ▍■Hibernate的表與對象映射文件,文件名類似xxxx.hbm.xml(xxxx為表名),它由Hibernate工具根據(jù)數(shù)據(jù)庫的表結(jié)構(gòu)生成而來,一般的結(jié)構(gòu)如下:

       

      1 <?xml version="1.0"?>

      2 <!DOCTYPE hibernate-mapping PUBLIC

      3   "-//Hibernate/Hibernate Mapping DTD//EN"

      4   "http://hibernate./hibernate-mapping-3.0.dtd" >

      5 <hibernate-mapping package="org.shingwai.website.bean">

      6   <class name="IncInfo" table="IncInfo">

      <id column="incName" length="250" name="IncName" type="string"

      8 unsaved-value="null">

      9          <generator class="native"/>

      10      </id>

      11 <property name="IncDesp" column="incDesp"type="string" not-null="false"/>

      12 </class>   

      13 </hibernate-mapping>

       

      5行表示持久化類所處的包,第6行表示持久化類名和代表數(shù)據(jù)庫的那個表,第7行表示數(shù)據(jù)表的主鍵及一些屬性(如長度、字段名、類型等),第11行表示表的一個字段

       

      ▍■Spring中可以對Hibernate的表配置文件進(jìn)行加載,而不用Hibernate獨立的配置文件,這樣就把Hibernate包含在Spring的管理中。把表配置文件加載到Spring中的樣子如下:以下代碼是Spring配置文件片段

      <bean id="mySessionFactory"

              class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

              <property name="dataSource">

                  <ref local="dataSource" />

              </property>

              <property name="mappingResources">

                  <list>

                      <value>org/shingwai/website/bean/ProductJPGImage.hbm.xml</value>

                      <value>org/shingwai/website/bean/Category.hbm.xml</value>

                      <value>org/shingwai/website/bean/IncInfo.hbm.xml</value>

                      <value>org/shingwai/website/bean/SwcProduct.hbm.xml</value>

                  </list>

              </property>

              <property name="hibernateProperties">

                  <props>

                      <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>

                      <prop key="hibernate.show_sql">true</prop>

                      <prop key="hibernate.jdbc.fetch_size">25</prop>

                      <prop key="hibernate.jdbc.batch_size">50</prop>

                  </props>

              </property>

          </bean>

      以上代碼表示把Hibernate的四個表配置文件加載到Spring管理中,它們是org/shingwai/website/bean/ProductJPGImage.hbm.xml

      org/shingwai/website/bean/Category.hbm.xml

      org/shingwai/website/bean/IncInfo.hbm.xml

      org/shingwai/website/bean/SwcProduct.hbm.xml

      分別代表數(shù)據(jù)表ProductJPGImage、CategoryIncInfoSwcProduct

      <property name="hibernateProperties">標(biāo)簽設(shè)定Hibernate的一些屬性參數(shù)

       

      ▍■DAO接口定義

      只是一個接口類,裡面定義了一些方法,樣子如下:

      public interface IIncInfoDAO {  

              public IncInfo findAll();

      }

       

      ▍■DAO接口實現(xiàn)類

      它繼承org.springframework.orm.hibernate3.support.HibernateDaoSupport類並實現(xiàn)了DAO接口,樣子如下:

      public class IncInfoHibernateDAO extends HibernateDaoSupport implements IIncInfoDAO {

              private static final String LOAD_ALL ="from IncInfo inc ";

              public IncInfo findAll() {

                      List list = this.getHibernateTemplate().find(LOAD_ALL);

                      if (list.size()==0)        {

                              return null;

                      }else {

                              return (IncInfo)list.get(0);

                      }

              }

      }

      HibernateDaoSupport類提供了一個操作HibernateTemplate,可以實現(xiàn)Hibernate的大多數(shù)操作而不用理會什麼時候Open Session或是什麼時候Close Session。所有這些都由Spring進(jìn)行處理。只要調(diào)用它的getHibernateTemplate()方法,其它的就交給Spring吧。如上例的查詢只有一行代碼List list = this.getHibernateTemplate().find(LOAD_ALL);

       

      2、業(yè)務(wù)層Service的實現(xiàn)

      ▍■Spring配置文件中定義DAO,因為Service層需要注入DAO來進(jìn)行數(shù)據(jù)操作。DAOSpringBean定義如下所示:

      <bean id ="incInfoDAO" class="org.shingwai.website.dao.impl.IncInfoHibernateDAO">

           <property name="sessionFactory">

               <ref local="mySessionFactory"/>

           </property>

          </bean>

      它注入了由Spring實現(xiàn)的Hibernate sessionFactory,提供給它的HibernateDaoSupport類使用。(mySessionFactory 的定義見上文Spring加載Hibernate表配置文件)。我們在Service層實現(xiàn)裡說明DAOSpring中的定義是因為我們的Service層要使用到它。

       

      ▍■Service接口

      一個普通的接口類,樣子如下:

      public interface IIncInfoService {       

              public IncInfo findAll();

      }

       

      ▍■Service接口實現(xiàn),它要實現(xiàn)一個setXxxDAO()方法,用於Spring的依賴注入。代碼樣子如下:

      public class IncInfoServiceImpl implements IIncInfoService {       

              private IIncInfoDAO incInfoDAO;

              public void setIncInfoDAO(IIncInfoDAO incInfoDAO){

                      this.incInfoDAO=incInfoDAO;           

              }

              public IncInfo findAll() {

                      // TODO 這裡可以加入業(yè)務(wù)邏輯

                      return incInfoDAO.findAll();

              }

      }

       

      ▍■Spring中定義Service,那麼客戶端就可以通過Spring來調(diào)用Service的方法。

      <bean id="incInfoService" class="org.shingwai.website.service.impl.IncInfoServiceImpl">

           <property name="incInfoDAO">

              <ref local="incInfoDAO"/>

           </property>

      </bean>

      該定義中注入了incInfoDAO

       

      至此已經(jīng)完成了DAO層和Service層的方法和SpringBean定義。

       

       

      3、表示層的實現(xiàn)

      表示層使用Struts框架,利用JbuilderEclipse都可以很方便的創(chuàng)建ActionForm,Action。表示的其它技術(shù)將不在這裡介紹,這裡只說明在Action中如何調(diào)用Servie層的方法。

       

      ▍■Action中通過Spring調(diào)用Service的方法,代碼樣例如下:

      AbstractApplicationContext appContext=new ClassPathXmlApplicationContext("/applicationContext.xml")

      IIncInfoService incInfoService=(IIncInfoService) appContext.getBean("incInfoService");

      List list=incInfoService.findAll();

       

      applicationContext.xmlSpring的配置文件名,通過實例appContext可以得到incInfoService實例。

       

      4、附錄Spring的聲明式事務(wù)定義,樣式如下:

      <!-- transactionManager -->

          <bean id="transactionManager"

              class="org.springframework.orm.hibernate3.HibernateTransactionManager">

              <property name="sessionFactory">

                  <ref local="mySessionFactory" />

              </property>

          </bean>

         

          <!-- baseTxProxy -->

          <bean id="baseTxProxy"     class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"    lazy-init="true" abstract="true">

              <property name="transactionManager">

                  <ref bean="transactionManager" />

              </property>

              <property name="transactionAttributes">

                  <props>

                      <prop key="*">PROPAGATION_REQUIRED</prop>

                  </props>

              </property>

          </bean>

         

          <!-- 事務(wù)定義示例bean  -->

              <bean id="bookService" parent="baseTxProxy">

              <property name="target">

                  <bean class="com.spring.test.tran.BookService">

                      <property name="bookdao">

                          <ref local="bookDAO" />

                      </property>

                  </bean>

              </property>

          </bean>

       

      第一段定義由那個類來進(jìn)行事務(wù)管理;第二段定義一個事務(wù)代理模板,並定義事務(wù)策略;第三段定義一個需要進(jìn)行事務(wù)管理的Bean,它繼承了事務(wù)代理模板,把自己本身的實現(xiàn)類交給代理類來實現(xiàn)。

       

       

      待續(xù)內(nèi)容:<<利用Struts+Spring+Hibernate實現(xiàn)一個電子公告板示例>>

       

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多