Terry.Li-彬

          虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks
          1. 前言

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

          Spring Framework 實際上是Expert One-on-One J2EE Design and Development 一書中所闡述的設計思想的具體實現。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,它能將接口與實現分開,非常強大。目前AOP應用最成熟的還是在事務管理上。

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

          2. JpetStore簡述

          2.1. 背景

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

          2.2. JpetStore開發運行環境的建立

          1、開發環境

          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中開發J2EE應用程序
          Spring IDE 1.0.3:Spring Bean配置管理插件
          xmlbuddy_2.0.10:編輯XML,用免費版功能即可
          tomcatPluginV3:tomcat管理插件
          Properties Editor:編輯java的屬性文件,并可以預覽以及自動存盤為Unicode格式。免去了手工或者ANT調用native2ascii的麻煩。
          2.3. 架構



          圖1 JpetStore架構圖


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

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

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

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


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



          圖2 JpetStore 4.0具體實現
          posted on 2007-12-05 16:02 禮物 閱讀(594) 評論(0)  編輯  收藏 所屬分類: ibatis + spring
          主站蜘蛛池模板: 赣榆县| 凌源市| 商城县| 高安市| 榆树市| 台江县| 嵊泗县| 名山县| 班玛县| 秦安县| 商都县| 金山区| 浮梁县| 调兵山市| 扎鲁特旗| 和林格尔县| 微山县| 万安县| 安福县| 鹿泉市| 手游| 泸西县| 吉安县| 河北区| 会东县| 辽中县| 黎平县| 九江县| 威信县| 昆山市| 双桥区| 武城县| 房产| 平定县| 婺源县| 册亨县| 精河县| 彰化市| 宁武县| 清苑县| 三河市|