Starting Struts2--Where Struts2 fits into the Web Paradigm
Posted on 2007-08-03 09:55 puras 閱讀(1205) 評(píng)論(2) 編輯 收藏 所屬分類: Struts2.0現(xiàn)今的開(kāi)發(fā)者有許多不同的WEB框架可用.其中一些是來(lái)自開(kāi)源的團(tuán)體,一些則來(lái)自商業(yè)公司,還有一些為了當(dāng)前WEB發(fā)展的需要而正在開(kāi)發(fā)的.現(xiàn)在有超過(guò)400個(gè)開(kāi)源框架,雖然這是一個(gè)大數(shù)目,但還有很多內(nèi)部使用的框架部署在生產(chǎn)環(huán)境中.
所有,有很多的選擇,為什么要選擇Struts2? 這有一些特征也許會(huì)吸引你使用Struts2:
Servlets
Servlets提供了第一個(gè)基于Java的WEB開(kāi)發(fā)方法.在HTTP協(xié)議下,servlets提供了一種映射URL到調(diào)用特定的類的方法.
很快它就被驗(yàn)證,雖然這是一個(gè)很大的進(jìn)步,但在Java代碼中生成HTML代碼,維護(hù)起來(lái)簡(jiǎn)直是個(gè)惡夢(mèng).每當(dāng)一個(gè)簡(jiǎn)單的用戶接口需要更改,Java程序員則需要修改Servlet代碼,重新編譯這些源碼,并將其發(fā)布到應(yīng)用所在的服務(wù)器環(huán)境中.
JSP and Scriptlet Development
"維護(hù)惡夢(mèng)"的結(jié)果,就是將發(fā)展的結(jié)果顛倒了.比起將HTML代碼放置在Servlet或是Java代碼中,將Java代碼放HTML代碼中(JSP)則會(huì)更好一些.每個(gè)JSP里包含請(qǐng)求的邏輯處理和展示邏輯.
一個(gè)問(wèn)題解決了,但另一個(gè)問(wèn)題又引進(jìn)來(lái)了.Java代碼是在類文件中的,然而,這里卻沒(méi)有方法或類的結(jié)構(gòu).看看早期的JSP文件,你會(huì)發(fā)現(xiàn)兩個(gè)現(xiàn)像:
做為JSP規(guī)范的發(fā)展,標(biāo)簽被引進(jìn)入來(lái),用于復(fù)用Java對(duì)象.Tag提供一個(gè)類似于HTML的寫法來(lái)訪問(wèn)底層的代碼,允許設(shè)計(jì)者(而非開(kāi)發(fā)者)利用IDEs使用動(dòng)態(tài)標(biāo)簽編輯網(wǎng)布的布局.例如JSP提供的<jsp:useBean.../>和<jsp:getProperty.../>標(biāo)簽.隨同提供JSP標(biāo)簽庫(kù)一起,JSPs提供了一個(gè)讓開(kāi)發(fā)人員創(chuàng)建自己的標(biāo)簽庫(kù)的方法.
Action-Based Frameworks
基于Action的框架,是在結(jié)合了Servlets和JSPs兩者的概念之上.想法是拆分用戶發(fā)送的請(qǐng)求的頁(yè)面的請(qǐng)求處理和顯示邏輯,讓每個(gè)部分都做它做的最好的一塊.這個(gè)實(shí)現(xiàn)使用一個(gè)來(lái)自Smalltalk的模式,MVC模式,或是更多常說(shuō)的前端控制器,或是Sun說(shuō)法中的Model2.
在這個(gè)模式中,Servlet是一個(gè)控制器,提供一個(gè)對(duì)所有客戶端頁(yè)面請(qǐng)求的集中的控制點(diǎn).它映射請(qǐng)求的URL到工作單元中的一個(gè)action.這個(gè)action的工作則將對(duì)給定的URL執(zhí)行特定的方法, 訪問(wèn)HTTPsession, HTTP請(qǐng)求和參數(shù),調(diào)用商業(yè)服務(wù),并將響應(yīng)映射到一個(gè)Model中,一般使用POJO.最后,action返回一個(gè)結(jié)果,映射(通過(guò)配置文件)到JSP來(lái)瀉染視圖.
Struts2是一個(gè)基于action的MVC的WEB框架.
Component-Based Frameworks
由于WEB應(yīng)用變得越來(lái)越復(fù)雜,人們認(rèn)識(shí)到一個(gè)頁(yè)面不再是將邏輯分離,WEB應(yīng)用了多種頁(yè)面形式,鏈接內(nèi)容更新和其他許多自義定的窗口小部件--所有的都需要處理邏輯以實(shí)現(xiàn)他們的任務(wù).
為了解決這些復(fù)雜性,基于組件的框架變得開(kāi)始受歡迎.它們提供了一種封閉的由用戶界面組件和類的組件,并且是由事件驅(qū)動(dòng)的,而且比基于action的框架更加面向?qū)ο?一個(gè)組件可以是一個(gè)HTML輸入框,一個(gè)HTML的窗體或是提供的自定義窗口小部件.事件,像窗體的提交或鏈接這種,映射到描述組件的類的方法,或到特定的監(jiān)聽(tīng)類.另一個(gè)好處是基于組件的框架,允許你方便的復(fù)用你的組件在多個(gè)WEB應(yīng)用中.基于組件的框架有JSF,Wicket和Tapestry等.
The Great Equalizer – Ajax
在2005年初,一種新的魔力出現(xiàn)在WEB開(kāi)發(fā)中.Jesse James Garrett杜撰的,AJAX代表"Asynchronous JavaScript and XML".相對(duì)來(lái)說(shuō),技術(shù)并不新鮮.事實(shí)上,主要的WEB瀏覽組件已經(jīng)創(chuàng)建了這個(gè)異步調(diào)用--XMLHttpRequest對(duì)象, 早在6年前就已經(jīng)可用了.
但是有什么新應(yīng)用使用了這項(xiàng)技術(shù)呢.Google Maps是最早充分利用這項(xiàng)技術(shù)的應(yīng)用.網(wǎng)頁(yè)活躍了起來(lái)--您能與控制和裝飾物交互.使用鼠標(biāo)你可以在屏幕內(nèi)滾動(dòng)地圖;當(dāng)輸入一個(gè)地址時(shí),信息將在地圖上被物化出來(lái);最后,the culmination being route planning which orchestrated all these features into a useable web application.并且,所有這些,都沒(méi)有發(fā)生整個(gè)頁(yè)面的刷新.
用戶界面使用Ajax功能允許WEB瀏覽器對(duì)服務(wù)器的請(qǐng)求使用更小的信息量,并且只有它被需要的時(shí)候.請(qǐng)求結(jié)果被服務(wù)器格式化或操作,并直接返回給頁(yè)面顯示,使用WEB瀏覽器將變化傳遞給用戶.只有頁(yè)面的部分被更新,而不是整個(gè)頁(yè)面,使用戶覺(jué)得這個(gè)WEB應(yīng)用可以更快的響應(yīng)他們的操作.
從UI來(lái)的請(qǐng)求,類似事件--它們非常的分散,為一個(gè)單獨(dú)的組件或方法傳遞信息.不再需要一個(gè)action為整個(gè)頁(yè)面檢索數(shù)據(jù),它們 更加簡(jiǎn)潔,而且因此更方便在各個(gè)應(yīng)用中復(fù)用.實(shí)際上,一個(gè)Ajax用戶界面調(diào)用基于action的框架允許action框架的行為與基于組件的框架相似.事實(shí)上,這種技術(shù)的組合提供了更加松耦合和可復(fù)用性更加的系統(tǒng).同樣的actions可以為Ajax組件提供JSON,XML或HTML的視圖片段,和其他actions結(jié)合提供非Ajax用戶界面的HTML視圖相似.
上一章:Starting Struts2--緒論
下一章:Starting Struts2--Core Components(1)
所有,有很多的選擇,為什么要選擇Struts2? 這有一些特征也許會(huì)吸引你使用Struts2:
- 基于Action的框架
- 成熟與蓬勃發(fā)展和用戶社區(qū)
- 注釋和XML配置選項(xiàng)
- 基于POJO的Action,非常容易測(cè)試
- 集成Spring, SiteMesh和Tiles
- 集成OGNL表達(dá)式語(yǔ)言
- 基于主題的標(biāo)簽庫(kù)和Ajax標(biāo)簽
- 多種視圖選選擇(JSP,Freemarker,Velocity和XSLT)
- 插件擴(kuò)展和修改框架的特征
Servlets
Servlets提供了第一個(gè)基于Java的WEB開(kāi)發(fā)方法.在HTTP協(xié)議下,servlets提供了一種映射URL到調(diào)用特定的類的方法.
很快它就被驗(yàn)證,雖然這是一個(gè)很大的進(jìn)步,但在Java代碼中生成HTML代碼,維護(hù)起來(lái)簡(jiǎn)直是個(gè)惡夢(mèng).每當(dāng)一個(gè)簡(jiǎn)單的用戶接口需要更改,Java程序員則需要修改Servlet代碼,重新編譯這些源碼,并將其發(fā)布到應(yīng)用所在的服務(wù)器環(huán)境中.
JSP and Scriptlet Development
"維護(hù)惡夢(mèng)"的結(jié)果,就是將發(fā)展的結(jié)果顛倒了.比起將HTML代碼放置在Servlet或是Java代碼中,將Java代碼放HTML代碼中(JSP)則會(huì)更好一些.每個(gè)JSP里包含請(qǐng)求的邏輯處理和展示邏輯.
一個(gè)問(wèn)題解決了,但另一個(gè)問(wèn)題又引進(jìn)來(lái)了.Java代碼是在類文件中的,然而,這里卻沒(méi)有方法或類的結(jié)構(gòu).看看早期的JSP文件,你會(huì)發(fā)現(xiàn)兩個(gè)現(xiàn)像:
- 拷貝和粘貼代碼:從一個(gè)JSP文件中拷貝Java到其他的JSP文件中.從原始的代碼中傳播出來(lái)的缺陷和錯(cuò)誤,增加大量的工作量,需要同時(shí)對(duì)所有的文件做出修改.
- 調(diào)用公用的Java格式化對(duì)象:公用的格式化或邏輯代碼組成一個(gè)可復(fù)用的對(duì)象.然后JSP使用公用對(duì)象.從這些中發(fā)現(xiàn)了最佳的實(shí)踐模式--從JSPs中使用Java對(duì)象.
做為JSP規(guī)范的發(fā)展,標(biāo)簽被引進(jìn)入來(lái),用于復(fù)用Java對(duì)象.Tag提供一個(gè)類似于HTML的寫法來(lái)訪問(wèn)底層的代碼,允許設(shè)計(jì)者(而非開(kāi)發(fā)者)利用IDEs使用動(dòng)態(tài)標(biāo)簽編輯網(wǎng)布的布局.例如JSP提供的<jsp:useBean.../>和<jsp:getProperty.../>標(biāo)簽.隨同提供JSP標(biāo)簽庫(kù)一起,JSPs提供了一個(gè)讓開(kāi)發(fā)人員創(chuàng)建自己的標(biāo)簽庫(kù)的方法.
Action-Based Frameworks
基于Action的框架,是在結(jié)合了Servlets和JSPs兩者的概念之上.想法是拆分用戶發(fā)送的請(qǐng)求的頁(yè)面的請(qǐng)求處理和顯示邏輯,讓每個(gè)部分都做它做的最好的一塊.這個(gè)實(shí)現(xiàn)使用一個(gè)來(lái)自Smalltalk的模式,MVC模式,或是更多常說(shuō)的前端控制器,或是Sun說(shuō)法中的Model2.
在這個(gè)模式中,Servlet是一個(gè)控制器,提供一個(gè)對(duì)所有客戶端頁(yè)面請(qǐng)求的集中的控制點(diǎn).它映射請(qǐng)求的URL到工作單元中的一個(gè)action.這個(gè)action的工作則將對(duì)給定的URL執(zhí)行特定的方法, 訪問(wèn)HTTPsession, HTTP請(qǐng)求和參數(shù),調(diào)用商業(yè)服務(wù),并將響應(yīng)映射到一個(gè)Model中,一般使用POJO.最后,action返回一個(gè)結(jié)果,映射(通過(guò)配置文件)到JSP來(lái)瀉染視圖.
Struts2是一個(gè)基于action的MVC的WEB框架.
Component-Based Frameworks
由于WEB應(yīng)用變得越來(lái)越復(fù)雜,人們認(rèn)識(shí)到一個(gè)頁(yè)面不再是將邏輯分離,WEB應(yīng)用了多種頁(yè)面形式,鏈接內(nèi)容更新和其他許多自義定的窗口小部件--所有的都需要處理邏輯以實(shí)現(xiàn)他們的任務(wù).
為了解決這些復(fù)雜性,基于組件的框架變得開(kāi)始受歡迎.它們提供了一種封閉的由用戶界面組件和類的組件,并且是由事件驅(qū)動(dòng)的,而且比基于action的框架更加面向?qū)ο?一個(gè)組件可以是一個(gè)HTML輸入框,一個(gè)HTML的窗體或是提供的自定義窗口小部件.事件,像窗體的提交或鏈接這種,映射到描述組件的類的方法,或到特定的監(jiān)聽(tīng)類.另一個(gè)好處是基于組件的框架,允許你方便的復(fù)用你的組件在多個(gè)WEB應(yīng)用中.基于組件的框架有JSF,Wicket和Tapestry等.
The Great Equalizer – Ajax
在2005年初,一種新的魔力出現(xiàn)在WEB開(kāi)發(fā)中.Jesse James Garrett杜撰的,AJAX代表"Asynchronous JavaScript and XML".相對(duì)來(lái)說(shuō),技術(shù)并不新鮮.事實(shí)上,主要的WEB瀏覽組件已經(jīng)創(chuàng)建了這個(gè)異步調(diào)用--XMLHttpRequest對(duì)象, 早在6年前就已經(jīng)可用了.
但是有什么新應(yīng)用使用了這項(xiàng)技術(shù)呢.Google Maps是最早充分利用這項(xiàng)技術(shù)的應(yīng)用.網(wǎng)頁(yè)活躍了起來(lái)--您能與控制和裝飾物交互.使用鼠標(biāo)你可以在屏幕內(nèi)滾動(dòng)地圖;當(dāng)輸入一個(gè)地址時(shí),信息將在地圖上被物化出來(lái);最后,the culmination being route planning which orchestrated all these features into a useable web application.并且,所有這些,都沒(méi)有發(fā)生整個(gè)頁(yè)面的刷新.
用戶界面使用Ajax功能允許WEB瀏覽器對(duì)服務(wù)器的請(qǐng)求使用更小的信息量,并且只有它被需要的時(shí)候.請(qǐng)求結(jié)果被服務(wù)器格式化或操作,并直接返回給頁(yè)面顯示,使用WEB瀏覽器將變化傳遞給用戶.只有頁(yè)面的部分被更新,而不是整個(gè)頁(yè)面,使用戶覺(jué)得這個(gè)WEB應(yīng)用可以更快的響應(yīng)他們的操作.
從UI來(lái)的請(qǐng)求,類似事件--它們非常的分散,為一個(gè)單獨(dú)的組件或方法傳遞信息.不再需要一個(gè)action為整個(gè)頁(yè)面檢索數(shù)據(jù),它們 更加簡(jiǎn)潔,而且因此更方便在各個(gè)應(yīng)用中復(fù)用.實(shí)際上,一個(gè)Ajax用戶界面調(diào)用基于action的框架允許action框架的行為與基于組件的框架相似.事實(shí)上,這種技術(shù)的組合提供了更加松耦合和可復(fù)用性更加的系統(tǒng).同樣的actions可以為Ajax組件提供JSON,XML或HTML的視圖片段,和其他actions結(jié)合提供非Ajax用戶界面的HTML視圖相似.
上一章:Starting Struts2--緒論
下一章:Starting Struts2--Core Components(1)