Terry.Li-彬

          虛其心,可解天下之問;專其心,可治天下之學(xué);靜其心,可悟天下之理;恒其心,可成天下之業(yè)。

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(19)

          隨筆分類(107)

          隨筆檔案(141)

          文章分類(284)

          文章檔案(342)

          相冊

          收藏夾(58)

          家裝

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          1. 前言

          Struts 是目前Java Web MVC框架中不爭的王者。經(jīng)過長達五年的發(fā)展,Struts已經(jīng)逐漸成長為一個穩(wěn)定、成熟的框架,并且占有了MVC框架中最大的市場份額。但是Struts某些技術(shù)特性上已經(jīng)落后于新興的MVC框架。面對Spring MVC、Webwork2 這些設(shè)計更精密,擴展性更強的框架,Struts受到了前所未有的挑戰(zhàn)。但站在產(chǎn)品開發(fā)的角度而言,Struts仍然是最穩(wěn)妥的選擇。本文的原型例子JpetStore 4.0就是基于Struts開發(fā)的,但是不拘泥于Struts的傳統(tǒng)固定用法,例如只用了一個自定義Action類,并且在form bean類的定義上也是開創(chuàng)性的,令人耳目一新,稍后將具體剖析一下。

          Spring Framework 實際上是Expert One-on-One J2EE Design and Development 一書中所闡述的設(shè)計思想的具體實現(xiàn)。Spring Framework的功能非常多。包含AOP、ORM、DAO、Context、Web、MVC等幾個部分組成。Web、MVC暫不用考慮,JpetStore 4.0用的是更成熟的Struts和JSP;DAO由于目前Hibernate、JDO、ibatis的流行,也不考慮,JpetStore 4.0用的就是ibatis。因此最需要用的是AOP、ORM、Context。Context中,最重要的是Beanfactory,它能將接口與實現(xiàn)分開,非常強大。目前AOP應(yīng)用最成熟的還是在事務(wù)管理上。

          ibatis 是一個功能強大實用的SQL Map工具,不同于其他ORM工具(如hibernate),它是將SQL語句映射成Java對象,而對于ORM工具,它的SQL語句是根據(jù)映射定義生成的。ibatis 以SQL開發(fā)的工作量和數(shù)據(jù)庫移植性上的讓步,為系統(tǒng)設(shè)計提供了更大的自由空間。有ibatis代碼生成的工具,可以根據(jù)DDL自動生成ibatis代碼,能減少很多工作量。

          2. JpetStore簡述

          2.1. 背景

          最初是Sun公司的J2EE petstore,其最主要目的是用于學(xué)習(xí)J2EE,但是其缺點也很明顯,就是過度設(shè)計了。接著Oracle用J2EE petstore來比較各應(yīng)用服務(wù)器的性能。微軟推出了基于.Net平臺的 Pet shop,用于競爭J2EE petstore。而JpetStore則是經(jīng)過改良的基于struts的輕便框架J2EE web應(yīng)用程序,相比來說,JpetStore設(shè)計和架構(gòu)更優(yōu)良,各層定義清晰,使用了很多最佳實踐和模式,避免了很多"反模式",如使用存儲過程,在java代碼中嵌入SQL語句,把HTML存儲在數(shù)據(jù)庫中等等。最新版本是JpetStore 4.0。

          2.2. JpetStore開發(fā)運行環(huán)境的建立

          1、開發(fā)環(huán)境

          Java SDK 1.4.2
          Apache Tomcat 4.1.31
          Eclipse-SDK-3.0.1-win32
          HSQLDB 1.7.2

          2、Eclipse插件

          EMF SDK 2.0.1:Eclipse建模框架,lomboz插件需要,可以使用runtime版本。
          lomboz 3.0:J2EE插件,用來在Eclipse中開發(fā)J2EE應(yīng)用程序
          Spring IDE 1.0.3:Spring Bean配置管理插件
          xmlbuddy_2.0.10:編輯XML,用免費版功能即可
          tomcatPluginV3:tomcat管理插件
          Properties Editor:編輯java的屬性文件,并可以預(yù)覽以及自動存盤為Unicode格式。免去了手工或者ANT調(diào)用native2ascii的麻煩。
          2.3. 架構(gòu)



          圖1 JpetStore架構(gòu)圖


          圖1 是JPetStore架構(gòu)圖。參照這個架構(gòu)圖,讓我們稍微剖析一下源代碼,得出JpetStore 4.0的具體實現(xiàn)圖(圖2),思路一下子就豁然開朗了。前言中提到的非傳統(tǒng)的struts開發(fā)模式,關(guān)鍵就在struts Action類和form bean類上。

          struts Action類只有一個:BeanAction。沒錯,確實是一個!與傳統(tǒng)的struts編程方式很不同。再仔細研究BeanAction類,發(fā)現(xiàn)它其實是一個通用類,利用反射原理,根據(jù)URL來決定調(diào)用formbean的哪個方法。BeanAction大大簡化了struts的編程模式,降低了對struts的依賴(與struts以及WEB容器有關(guān)的幾個類都放在com.ibatis.struts包下,其它的類都可以直接復(fù)用)。利用這種模式,我們會很容易的把它移植到新的框架如JSF,spring。

          這樣重心就轉(zhuǎn)移到form bean上了,它已經(jīng)不是普通意義上的form bean了。查看源代碼,可以看到它不僅僅有數(shù)據(jù)和校驗/重置方法,而且已經(jīng)具有了行為,從這個意義上來說,它更像一個BO(Business Object)。這就是前文講到的,BeanAction類利用反射原理,根據(jù)URL來決定調(diào)用form bean的哪個方法(行為)。form bean的這些方法的簽名很簡單,例如:

          public String myActionMethod()
                      {
                      //..work
                      return "success";
                      }


          方法的返回值直接就是字符串,對應(yīng)的是forward的名稱,而不再是ActionForward對象,創(chuàng)建ActionForward對象的任務(wù)已經(jīng)由BeanAction類代勞了。另外,程序還提供了ActionContext工具類,該工具類封裝了request 、response、form parameters、request attributes、session attributes和 application attributes中的數(shù)據(jù)存取操作,簡單而線程安全,form bean類使用該工具類可以進一步從表現(xiàn)層框架解耦。在這里需要特別指出的是,BeanAction類是對struts擴展的一個有益嘗試,雖然提供了非常好的應(yīng)用開發(fā)模式,但是它還非常新,一直在發(fā)展中。



          圖2 JpetStore 4.0具體實現(xiàn)
          posted on 2007-12-05 16:02 禮物 閱讀(594) 評論(0)  編輯  收藏 所屬分類: ibatis + spring
          主站蜘蛛池模板: 霍林郭勒市| 金昌市| 寻乌县| 凌海市| 兴隆县| 西畴县| 阿鲁科尔沁旗| 神池县| 年辖:市辖区| 越西县| 喜德县| 临桂县| 嘉鱼县| 孝昌县| 彝良县| 盐津县| 陆丰市| 盐城市| 商城县| 紫金县| 怀宁县| 响水县| 稷山县| 灵川县| 北安市| 城市| 桑日县| 牡丹江市| 南投县| 公主岭市| 苍梧县| 新宾| 武川县| 绥中县| 开远市| 六盘水市| 左权县| 南安市| 嘉禾县| 潼关县| 华阴市|