基于
Web
的
MVC?framework
在
J2EE
的世界內已是空前繁榮。
TTS
網站上幾乎每隔一兩個星期就會有新的
MVC
框架發布。目前比較好的
MVC,
老牌的有
Struts
、
Webwork
。新興的
MVC?
框架有
Spring
?MVC
、
Tapestry
、
JSF
等。這些大多是著名團隊的作品,另外還有一些邊緣團隊的作品,也相當出色,如
Dinamica
、
VRaptor
等。這些框架都提供了較好的層次分隔能力。在實現良好的
MVC?
分隔的基礎上,通過提供一些現成的輔助類庫,同時也促進了生產效率的提高。
如何選擇一個好的框架應用在你的項目中,將會對你的項目的效率和可重用是至關重要的。本文將對目前最流行、最常用的兩種 framework 進行介紹。
一、 Struts
Struts 是 Apache 軟件基金下 Jakarta 項目的一部分。 Struts 框架的主要架構設計和開發者是 Craig?R.McClanahan 。 Struts? 是目前 Java?Web?MVC 框架中不爭的王者。經過長達五年的發展, Struts 已經逐漸成長為一個穩定、成熟的框架,并且占有了 MVC 框架中最大的市場份額。但是 Struts 某些技術特性上已經落后于新興的 MVC 框架。面對 Spring?MVC 、 Webwork2? 這些設計更精密,擴展性更強的框架, Struts 受到了前所未有的挑戰。但站在產品開發的角度而言, Struts 仍然是最穩妥的選擇。
Struts 有一組相互協作的類(組件)、 Serlvet 以及 jsp?tag?lib 組成?;?/span> struts 構架的 web 應用程序基本上符合 JSP?Model2 的設計標準,可以說是 MVC 設計模式的一種變化類型。根據上面對 framework 的描述,我們很容易理解為什么說 Struts 是一個 web?framwork ,而不僅僅是一些標記庫的組合。但 ?Struts? 也包含了豐富的標記庫和獨立于該框架工作的實用程序類。 Struts 有其自己的控制器( Controller ),同時整合了其他的一些技術去實現模型層( Model )和視 圖層 ( View )。在模型層, Struts 可以很容易的與數據訪問技術相結合,包括 EJB,JDBC 和 Object?Relation?Bridge 。在視圖層, Struts 能夠與 JSP,?Velocity?Templates,XSL 等等這些表示層組件想結合。
Struts 的 體系結構
struts?framework 是 MVC? 模式的體現,下面我們就從分別從模型、視圖、控制來看看 struts 的體系結構( Architecture )。 ?
從視圖角度( View )
主要由 JSP 建立, struts 自身包含了一組可擴展的自定義標簽庫( TagLib ),可以簡化創建用戶界面的過程。目前包括: Bean?Tags , HTML?Tags , Logic?Tags , Nested?Tags , Template?Tags 這幾個 Taglib 。有關它們的詳細資料請參考 struts 用戶手冊
從模型角度( Model )
模型主要是表示一個系統的狀態(有時候,改變系統狀態的業務邏輯操作也也劃分到模型中)。在 Struts 中,系統的狀態主要有 ActiomForm?Bean 體現,一般情況下,這些狀態是非持久性的。如果需要將這些狀態轉化為持久性數據存儲, Struts 本身也提供了 Utitle 包,可以方便的與數據庫操作
從控制器角度( Controller )
在 Struts?framework 中, ?Controller 主要是 ActionServlet ,但是對于業務邏輯的操作則主要由 Action 、 ActionMapping 、 ActionForward 這幾個組件協調完成(也許這幾個組件,應該劃分到模型中的業務邏輯一塊)。其中, Action 扮演了真正的業務邏輯的實現者,而 ActionMapping 和 ActionForward 則指定了不同業務邏輯或流程的運行方向。
對于 Struts? 如何控制、處理客戶請求,讓我們通過對 struts 的四個核心組件介紹來具體說明。這幾個組件就是: ActionServlet 。 Action?Classes , Action?Mapping (此處包括 ActionForward ), ActionFrom?Bean 。
二、 Spring
Spring? 實際上是 Expert?One-on-One?J2EE?Design?and?Development? 一書中所闡述的設計思想的具體實現。在 One-on-One? 一書中, Rod?Johnson? 倡導 J2EE? 實用主義的設計思想,并隨書提供了一個初步的開發框架實現( interface21? 開 發包 )。而 Spring? 正是這一思想的更全面和具體的體現。 Rod?Johnson? 在 interface21? 開發包的基礎之上,進行了進一步的改造和擴充,使其發展為一個更加開放、清晰、全面、高效的開發框架。
Spring 是一個開源框架,由 Rod?Johnson 創建并且在他的著作《 J2EE 設計開發編程指南》里進行了描述。它是為了解決企業應用開發的復雜性而創建的。 Spring 使使用基本的 JavaBeans 來完成以前只可能由 EJB 完成的事情變得可能了。然而, Spring 的用途不僅限于服務器端的開發。從簡單性、可測試性和松耦合的角度而言,任何 Java 應用都可以從 Spring 中受益。
簡單來說, Spring 是一個輕量的控制反轉和面向切面的容器框架。當然,這個描述有點過于簡單。但它的確概括出了 Spring 是做什么的。為了更好地理解 Spring ,讓我們分析一下這個描述: ?
1 、輕量,從大小與開銷兩方面而言 Spring 都是輕量的。完整的 Spring 框架可以在一個大小只有 1MB 多的 JAR 文件里發布。并且 Spring 所需的處理開銷也是微不足道的。此外, Spring 是非侵入式的:典型地, Spring 應用中的對象不依賴于輕量 ?? 從大小與開銷兩方面而言 Spring 都是輕量的。完整的 Spring 框架可以在一個大小只有 1MB 多的 JAR 文件里發布。并且 Spring 所需的處理開銷也是微不足道的。此外, Spring 是非侵入式的:典型地, Spring 應用中的對象不依賴于 Spring 的特定類。
2 、控制反轉 ??Spring 通過一種稱作控制反轉( IoC )的技術促進了松耦合。當應用了 IoC ,對象被動地傳遞它們的依賴而不是自己創建或者查找依賴對象。你可以認為 IoC 與 JNDI 相反 ?? 不是對象從容器中查找依賴,而是容器在對象初始化時不等被請求就將依賴傳遞給它。 ?
3 、面向切面 ??Spring 包含對面向切面編程的豐富支持,允許通過分離應用的業務邏輯與系統服務(例如審計與事物管理)進行內聚性的開發。應用對象只做它們應該做的 ?? 完成業務邏輯 ?? 僅此而已。它們并不負責(甚至是意識)其它的系統關注點,例如 日志 或事物支持。 ?
4 、容器 ??Spring 包含和管理應用對象的配置和生命周期,在這個意義上它是一種容器。你可以配置你的每個 bean 如何被創建 ?? 基于一個配置原形為你的 bean 創建一個單獨的實例或者每次需要時都生成一個新的實例 ?? 以及它們是如何相互關聯的。然而, Spring 不應該被混同于傳統的重量的 EJB 容器,它們經常是龐大與笨重的,難以使用。 ?
框架: Spring 使由簡單的組件配置和組合復雜的應用成為可能。在 Spring 中,應用對象被聲明式地組合,典型地是在一個 XML 文件里。 Spring 也提供了很多基礎功能(事務管理、持久性框架集成等等),將應用邏輯的開發留給了你。 ?
所有 Spring 的這些特征使你能夠編寫更干凈、更可管理、并且更易于測試的代碼。它們也為 Spring 中的各種子框架提供了基礎。
凡是有該標志的文章,都是該blog博主Caoer(草兒)原創,凡是索引、收藏
、轉載請注明來處和原文作者。非常感謝。
如何選擇一個好的框架應用在你的項目中,將會對你的項目的效率和可重用是至關重要的。本文將對目前最流行、最常用的兩種 framework 進行介紹。
一、 Struts
Struts 是 Apache 軟件基金下 Jakarta 項目的一部分。 Struts 框架的主要架構設計和開發者是 Craig?R.McClanahan 。 Struts? 是目前 Java?Web?MVC 框架中不爭的王者。經過長達五年的發展, Struts 已經逐漸成長為一個穩定、成熟的框架,并且占有了 MVC 框架中最大的市場份額。但是 Struts 某些技術特性上已經落后于新興的 MVC 框架。面對 Spring?MVC 、 Webwork2? 這些設計更精密,擴展性更強的框架, Struts 受到了前所未有的挑戰。但站在產品開發的角度而言, Struts 仍然是最穩妥的選擇。
Struts 有一組相互協作的類(組件)、 Serlvet 以及 jsp?tag?lib 組成?;?/span> struts 構架的 web 應用程序基本上符合 JSP?Model2 的設計標準,可以說是 MVC 設計模式的一種變化類型。根據上面對 framework 的描述,我們很容易理解為什么說 Struts 是一個 web?framwork ,而不僅僅是一些標記庫的組合。但 ?Struts? 也包含了豐富的標記庫和獨立于該框架工作的實用程序類。 Struts 有其自己的控制器( Controller ),同時整合了其他的一些技術去實現模型層( Model )和視 圖層 ( View )。在模型層, Struts 可以很容易的與數據訪問技術相結合,包括 EJB,JDBC 和 Object?Relation?Bridge 。在視圖層, Struts 能夠與 JSP,?Velocity?Templates,XSL 等等這些表示層組件想結合。
Struts 的 體系結構
struts?framework 是 MVC? 模式的體現,下面我們就從分別從模型、視圖、控制來看看 struts 的體系結構( Architecture )。 ?
從視圖角度( View )
主要由 JSP 建立, struts 自身包含了一組可擴展的自定義標簽庫( TagLib ),可以簡化創建用戶界面的過程。目前包括: Bean?Tags , HTML?Tags , Logic?Tags , Nested?Tags , Template?Tags 這幾個 Taglib 。有關它們的詳細資料請參考 struts 用戶手冊
從模型角度( Model )
模型主要是表示一個系統的狀態(有時候,改變系統狀態的業務邏輯操作也也劃分到模型中)。在 Struts 中,系統的狀態主要有 ActiomForm?Bean 體現,一般情況下,這些狀態是非持久性的。如果需要將這些狀態轉化為持久性數據存儲, Struts 本身也提供了 Utitle 包,可以方便的與數據庫操作
從控制器角度( Controller )
在 Struts?framework 中, ?Controller 主要是 ActionServlet ,但是對于業務邏輯的操作則主要由 Action 、 ActionMapping 、 ActionForward 這幾個組件協調完成(也許這幾個組件,應該劃分到模型中的業務邏輯一塊)。其中, Action 扮演了真正的業務邏輯的實現者,而 ActionMapping 和 ActionForward 則指定了不同業務邏輯或流程的運行方向。
對于 Struts? 如何控制、處理客戶請求,讓我們通過對 struts 的四個核心組件介紹來具體說明。這幾個組件就是: ActionServlet 。 Action?Classes , Action?Mapping (此處包括 ActionForward ), ActionFrom?Bean 。
二、 Spring
Spring? 實際上是 Expert?One-on-One?J2EE?Design?and?Development? 一書中所闡述的設計思想的具體實現。在 One-on-One? 一書中, Rod?Johnson? 倡導 J2EE? 實用主義的設計思想,并隨書提供了一個初步的開發框架實現( interface21? 開 發包 )。而 Spring? 正是這一思想的更全面和具體的體現。 Rod?Johnson? 在 interface21? 開發包的基礎之上,進行了進一步的改造和擴充,使其發展為一個更加開放、清晰、全面、高效的開發框架。
Spring 是一個開源框架,由 Rod?Johnson 創建并且在他的著作《 J2EE 設計開發編程指南》里進行了描述。它是為了解決企業應用開發的復雜性而創建的。 Spring 使使用基本的 JavaBeans 來完成以前只可能由 EJB 完成的事情變得可能了。然而, Spring 的用途不僅限于服務器端的開發。從簡單性、可測試性和松耦合的角度而言,任何 Java 應用都可以從 Spring 中受益。
簡單來說, Spring 是一個輕量的控制反轉和面向切面的容器框架。當然,這個描述有點過于簡單。但它的確概括出了 Spring 是做什么的。為了更好地理解 Spring ,讓我們分析一下這個描述: ?
1 、輕量,從大小與開銷兩方面而言 Spring 都是輕量的。完整的 Spring 框架可以在一個大小只有 1MB 多的 JAR 文件里發布。并且 Spring 所需的處理開銷也是微不足道的。此外, Spring 是非侵入式的:典型地, Spring 應用中的對象不依賴于輕量 ?? 從大小與開銷兩方面而言 Spring 都是輕量的。完整的 Spring 框架可以在一個大小只有 1MB 多的 JAR 文件里發布。并且 Spring 所需的處理開銷也是微不足道的。此外, Spring 是非侵入式的:典型地, Spring 應用中的對象不依賴于 Spring 的特定類。
2 、控制反轉 ??Spring 通過一種稱作控制反轉( IoC )的技術促進了松耦合。當應用了 IoC ,對象被動地傳遞它們的依賴而不是自己創建或者查找依賴對象。你可以認為 IoC 與 JNDI 相反 ?? 不是對象從容器中查找依賴,而是容器在對象初始化時不等被請求就將依賴傳遞給它。 ?
3 、面向切面 ??Spring 包含對面向切面編程的豐富支持,允許通過分離應用的業務邏輯與系統服務(例如審計與事物管理)進行內聚性的開發。應用對象只做它們應該做的 ?? 完成業務邏輯 ?? 僅此而已。它們并不負責(甚至是意識)其它的系統關注點,例如 日志 或事物支持。 ?
4 、容器 ??Spring 包含和管理應用對象的配置和生命周期,在這個意義上它是一種容器。你可以配置你的每個 bean 如何被創建 ?? 基于一個配置原形為你的 bean 創建一個單獨的實例或者每次需要時都生成一個新的實例 ?? 以及它們是如何相互關聯的。然而, Spring 不應該被混同于傳統的重量的 EJB 容器,它們經常是龐大與笨重的,難以使用。 ?
框架: Spring 使由簡單的組件配置和組合復雜的應用成為可能。在 Spring 中,應用對象被聲明式地組合,典型地是在一個 XML 文件里。 Spring 也提供了很多基礎功能(事務管理、持久性框架集成等等),將應用邏輯的開發留給了你。 ?
所有 Spring 的這些特征使你能夠編寫更干凈、更可管理、并且更易于測試的代碼。它們也為 Spring 中的各種子框架提供了基礎。
凡是有該標志的文章,都是該blog博主Caoer(草兒)原創,凡是索引、收藏
、轉載請注明來處和原文作者。非常感謝。