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