第二章 文獻探討
第二節 開發框架
一、 MVC
MVC 屬於一種設計樣式,它將互動的系統分割成三個元件,每一個元件都有其特 別的任務。Model 包含了應用資料和管理商業邏輯的功能。View 管理的是 Model 的顯 示以及 Model 處理完使用者的需求所傳回的回饋顯示。Controller 負責攔截者用者的輸 入,並指定對應的 Model 做處理,最後將 Model 傳回之回饋指定適當的 View 做顯示 (Liu et al. 2008)。
二、 Struts 框架(Feng and Le 2009)
Apache Struts Framework 是一個開源(open-source)的框架,它的作用為以 MVC 設計 樣式為基礎建立 Java Web-Based 應用程式。它的核心是一個由標準技術像是 Java Servlet,Java Beans, Resource Bundles 和 xml 以及各種不同的 Jakarta Common Packages 所建立的彈性控制層。由於 Struts 框架增強 MVC 的相容性且包含豐富的標籤庫,使得 近年來許多大型軟體系統都採用 Struts 框架。
圖 2-6 Struts 框架
資料來源: Feng, X., and Le, T. “Construction of B2B Electronic Commerce System Based on Apache Struts Framework,” International Conference on Services Science, Management and Engineering, 2009, pp 221-224.
22
Struts 的流程為使用者藉著瀏覽器送出請求,由 ActionServlet 獲取請求,
ActionServlet 將會去找他相對應的配置檔(Struts-config.xml),RequestProcessor 則從 ActionMapping 中獲知所要使用來存取資料的 ActionForm 以及回應相對動作的 Aciton,
在處理完後將回應給使用者。
表 2-6 Struts 提供 Model View Controller 的相關實作
Model
負責應用程式的商業邏輯(business logic)。它封裝了資料存取和提供可重複 利用的類別函式庫(class library)。Struts 提供 Action 和 ActionForm 給 Model。所有 Action 的物件都是由 Action 衍生而來的子類別。Action 物件 將商業邏輯包裝並且回應給 View。ActionForm 能透過定義的屬性來描述 使用者資料。
View
控制觀看的資料並且提供使用者收集資料的能力。在 Struts 是用 jsp 來實 作 View。Struts 另外提供了多元的標籤函式庫(tags library),使得它可以輕 易的和 Model 做互動。
Controller
用來做 View 和 Model 之間的接合.它收集來自 View 的輸入資料和決定執 行的應用程式。Controller 呼叫 Model 並攔截回復的資料,再傳給 View 做 更新。在 Struts 中,Controller 由 ActionServlet 和 ActionMapping 組成。
ActionServlet 是 Controller 的核心,它包含了一組 ActionMapping,每個 ActionMapping 做 request 和 model 的 Action 互相對應的動作。
資料來源: Feng, X., and Le, T. “Construction of B2B Electronic Commerce System Based on Apache Struts Framework,” International Conference on Services Science, Management and Engineering, 2009, pp 221-224.
Struts 有以下優點:
• 可以很容易地開發大型 Web 應用程式。Struts 是 open-source 框架,Struts 切成 JSP、 ActionServlet、 Action 使得 MVC 架構更清楚明瞭。Action 簡化了商業 邏輯,複雜的商業邏輯則由 JavaBean 和 EJB 做處理。因此開發複雜系統的開
23
發被簡化了。
• 透過 XML 和 property 檔來配置,而非寫在 Java 程式碼裡。這樣在面對變更 時,不需要大量的修改原程式或重新編譯。大批的修改也只需要透過單一檔案 就可完成。這個方法使得開發者可以更專注在某些特別的任務上(處理商業邏 輯)而不需要去知道關於所有系統的設計布局。
• Struts 包含了強大的 JSP 標籤函式庫,像是 Bean Tags、HTML Tags 並且支援第 三方函式庫。
• 驗證欄位形式用更容易的方式來達到驗證錯誤的功能,像是如果表單裡面沒填 值,則自動地填入原本預設的值進去或著顯示出錯誤訊息。
三、 Spring 框架
Spring Framework 是一個輕量級 J2EE 應用開發框架,由 DAO、ORM、AOP、Web、
Context、Web MVC、Core 數個模組組合而成。它使用 IoC(Inversion of Control)來分離 實際程式的配置和相依性規則,把所有層級的解決方式交給 J2EE 應用程式。Spring 並 不是企圖放一個已存在的框架,而是透過 POJO(Plain Ordinary Java Object)管理來對所有 層級的 J2EE 應用做一個融合。除此之外,開發者可以自由選擇要使用所有的 Spring 框 架或其中一部分,因為 Spring 子模組互相並不相依。身為主要負責商業邏輯層級細節,
Spring 使用 delay injection 的想法來組合程式碼以此來增進建立系統的擴增性和彈性,
因此系統能達到中央集權的商業邏輯處理和透過 Spring AOP 模組來減少程式碼的重複 性(Liu et al. 2008)。
24
圖 2-7 Spring 框架
資料來源:Spring 官方網站,2012,http://www.springsource.org/
各模組功能如下:
1. Spring Core: 整個 Spring 的核心,管理物件的生命週期、物件組態以及相依 注入,主要在實作工廠模式(Factory Method)並實現 IOC 功能,透過配置檔將 物件關係與實際的程式碼切割開來。
2. Spring AOP: 為了重複利用程式碼的一種作法,Spring 大部分的 AOP 是基於 Alliance 的 API 開發的,通過程式碼中的 Annotation 來簡化 AOP 配置工作,
對所有以 Spring 為基礎之物件提供了宣告式的事務管理服務。
3. Spring DAO: 資料庫連接的介面,對於 JDBC 進行抽象與封裝,透過 JDBCTemplate 大量簡化資料庫操作,減少無意義的程式碼,並提供有意義的 例外處理架構,可以用來處理不同資料庫供應商拋出的錯誤訊息。
4. Spring ORM: Spring 對於現今各大 ORM 框架均提供良好的封裝與整合,例 如像是 Hibernate、JDO、iBatis。
25
5. Spring Web: Spring 自己有提供 MVC 框架,也提供了其他框架的整合像是 Struts 框架整合。
6. Spring Context: 為一個配置檔,向 Spring 核心提供如 JNDI、EJB、驗證、
郵件以及國際化等功能。
7. Spring Web MVC: 全功能的 Web 框架,採用大量的呈現技術,包括 JSP、
Velocity、Tiles、iText 和 POI。
Spring 有以下優點:(林信良 2008)
• 輕量級(Lightweight):Spring 的核心在檔案容量上只有不到 1MB 的大小,而 使用 Spring 核心所需要的資源也是很小的。
• 容器(Container):控制物件在創建時是以原型(Prototype)或單例(Singleton) 的方 式來建立。
• IoC(Inversion of Control):不必自己在程式碼中維護物件的依賴關係,只需在 組態檔中加以設定,Spring 核心容器會自動根據組態將依賴注入指定的物件。
• 非侵入性(Nonintrusive):讓應用程式不感受到框架的存在,減低應用程式從框 架移植時的負擔。
四、 Hibernate 框架
Hibernate Framework 是現今最普及的 ORM(Object Relation Mapping)框架。它是當 作 Java 物件和關聯式資料之間的橋樑,也對 JDBC 做了封裝。它不僅提供 ORM 的映對 服務,還提供資料查詢和資料緩衝服務。Hibernate 封裝 SQL 的操作,使得開發者可以 方便的透過 Hibernate API 存取資料庫。在 Java Web-Based 應用程式中,Hibernate 主要 用在資料存取層。
Hibernate 透過 configuration files(hibernate.cfg.xml)和各個資料表的 mapping
files(*.hbm.xml)來對 Java 物件進行映對,然後透過操作 PO(Persistent Object),我們可以
26
在物件導向程式中對資料庫中的資料進行新增、刪除、修改以及查詢等操作(Shan and Yuntao 2011)。
圖 2-8 Hibernate 框架
資料來源: Hibernate 官方網站,2012,http://www.hibernate.org/
Hibernate 有以下優點:
• 支持許多現今的資料庫供應商。
• 使應用程式開發可以只操控物件,完全以物件導向為中心,不須花費額外力氣 去管理資料庫。
• 具有優秀的移植性,移植僅需要更換配置檔。
• 提供簡潔以物件為導向的 HQL 語言
• 無依賴於特定容器
五、 SSH 整合(Liu 2011)
1. Spring 與 Struts 整合
當這兩框架整併時,Struts 的 action 會授權給 Spring。利用 Spring 供應的 DelegatingActionProxy 類別,將 request 送給那些在 Struts 配置檔(struts-config.xml) 裡的實際 action。把 DelegatingActionProxy 類別當作 action 的 proxy,這樣做可以 讓 Spring 來管理由 Struts 所呼叫的 action 實例。
27
2. Spring 與 Hibernate 整合
Hibernate 最重要的配置檔是 hibernate.cfg.xml,所有需要持久化的類別和相關 的全域屬性都被定義在這檔案裡。當這兩個框架整合時,Hibernate 將被 Spring 管 理,也就是 hibernate.cfg.xml 被 Spring 管理。Spring 藉著 LocalSessionFactoryBean 類別來執行 Hibernate 的介面轉換,使我們可以用一致的方法來處理 Hibernate 和 Spring。在 Hibernate 的應用程式中,Spring 的類別 Hibernate Template 可以完整的 作用來當作捕捉例外、管理交易等等而不需要其他任何多餘的程式碼。
3. 三者整合
在 Spring 分別和 Struts 和 Hibernate 整合後,接著複製 jar 套件到類別路徑中,
則三個框架即整合完成。下圖為整合三個框架,每個框架所負責之工作結構 (Yongchang et al. 2011)。
圖 2-9 SSH 整合框架結構圖
資料來源: Yongchang, R., Xing, T., Xing, Z., and Zheng, J. "Application Research for Integrated SSH Combination Framework to Achieve MVC Mode," Computational and Information Sciences, International Conference on (0) 2011, pp 499-502.
下圖展示 SSH 整合框架資料傳遞流程:
28
圖 2-10 SSH 整合框架流程圖
資料來源: Yongchang, R., Xing, T., Xing, Z., and Zheng, J. "Application Research for Integrated SSH Combination Framework to Achieve MVC Mode," Computational and Information Sciences, International Conference on (0) 2011, pp 499-502.
29