談談基於ssh的j2EE開發模式

學了那麼久的ssh和web開發,今天想爲此寫點東西,由於我自己的技術不是很強,文筆也有限,所以希望大家別笑話我,如果有不對的地方,還請各位不吝賜教。

大家都知道,現在ssh這個框架組合是當前使用較多的一個,我也是覺得說以後去上班肯定會用到這個的才自己去學習。

        SSH中,strut2的action擔任着控制器的作用,它通過響應用戶的操作來指示系統的行爲,在我以往的設計中,我會用一個jsp頁面來對應一個後臺action,比如在圖書館管理系統中的借書功能頁面,我在後臺用一個名爲BorrowBookManagement的action來響應用戶的界面操作,比如當圖書館管理員點擊確定借書按鈕時BorrowBookManagement便會執行borrow方法去更新一系列相關的數據表,可以說這個action是基於UI層之上的同用戶與系統交互的入口點

        對於spring這個框架的話,說真的,在項目中接觸到的不會很深。我們都知道整合三大框架的時候一般的習慣是先整合spring和hibernate,然後纔會去整合進strut2,通過整合的過程和一些配置文件的體現,我能明顯感覺到spring作爲作爲整個項目的核心包含了很多部分,比如在beans.xml文件中我們有一段以下配置:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource" ref="dataSource"/>
   <property name="mappingResources">
       <list>
         <value>cn/watermellon/bean/Employee.hbm.xml</value>
       </list>
  </property>
   <property name="hibernateProperties">
    <value>
         hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
         hibernate.hbm2ddl.auto=update
         hibernate.show_sql=false
         hibernate.format_sql=false
     </value>
   </property>
 </bean>

        這段配置配置了spring支持hibernate操作的sessionFactory,這樣我在數據訪問層中就可以通過依賴注入的方式獲取sessionFactory的單實例,通過該實例來實現的數據庫的操作,接下來在beans.xml文件還有一段這樣的配置:

<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory"/>
 </bean>
 <!--使用基於註解方式配置事務 -->
 <tx:annotation-driven transaction-manager="txManager"/>

        這是配置了spring支持hibernate事務的管理器,也就是說將hibernate關於事務的管理交給spring容器統一管理。這是spring和hibernate整合時spring體現之處,在與strust2整合時首先需要在web.xml文件中實例化spring容器,接下里在所有的action類中都加上一個@Controller,這樣做的結果就是使得這個類能被spring容器識別,並納入action管理,這樣在struts2.xml的配置文件中就不必指明該action類的地址,只需要註明這個action在spring管理中的類名,比如上面的BorrowBookManagement類:

<package name="ui" namespace="/ui" extends="struts-default">
     <action name="borrowbook" class="borrowBookManagement">
        <result name="reader">/WEB-INF/page/bb_reader.jsp</result>
        <result name="book">/WEB-INF/page/bb_book.jsp</result>
     </action>
</package>

這樣當你訪問../ui/borrowbook.action時就可以訪問到BorrowBookManagement這個action了,所以還是挺方便的。

       SSH中的hibernate框架是一個ORM框架,它負責的是數據訪問層,通過獲取在spring配置好的sessionFactory對象,來對數據庫進行增刪改查,這其實就是數據訪問層,也就是所謂的DAO層,通過向外提供接口,業務層就可以對數據庫進行操作,十分方便。

       說到接口的話,就要說說J2EE的開發模式,從傳智播客的黎活明老師那裏學到說對於J2EE的開發最好是基於接口的開發,所以根據這種原則,在項目中我爲所有的業務類定義了業務的接口,而在業務類中可以通過註解的方式來實例化一個業務類,當然爲什麼要這樣我也不是很懂,如果有知道的朋友記得交流下哈。

       在開發中一個action對應於一個jsp頁面,所以這個有可能導致的一種情況就是必須在action類中定義過多的屬性變量(我們知道,struts2中的action同界面互傳參數時,只需要在action類中定義與頁面元素同名的屬性就可以),如果你都把一個個的定義在action裏面會導致你的action類過於臃腫,所以這時我們可以定義一個輔助類來存儲這些雜亂的屬性,保證action的整潔。

       暫時就說這麼多了,大家覺得那裏我那裏理解錯了,可以指出,我們一起學習。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章