关注WebWork(四)
生活随笔
收集整理的這篇文章主要介紹了
关注WebWork(四)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
??????? 時(shí)間過(guò)得很快,《WebWork In Action》第三章的翻譯工作也接近尾聲了。這一章的標(biāo)題是Setting up WebWork,主要講述了與WebWork緊密相關(guān)的配置以及如何運(yùn)用這些配置讓我們的應(yīng)用程序組織得更為模塊化,讓我們?cè)谠O(shè)計(jì)上可以更加靈活機(jī)動(dòng)。
??????? 在這一章中,我了解到了很多之前并不熟悉的配置,而這些配置所帶來(lái)的影響,我不得不為之贊嘆。以action為例,通常我們會(huì)根據(jù)邏輯來(lái)劃分action,譬如Login、Register、Search和Logout等等,這些從邏輯語(yǔ)義上獨(dú)立的部分都應(yīng)該分別作為一個(gè)action,這一點(diǎn)是大家都認(rèn)可的。在以上這些action的周邊仍然會(huì)有一些其他附屬功能,譬如在Login之前需要做的準(zhǔn)備工作——PreLogin;在Search之后需要作進(jìn)一步搜索的SearchMore。在面對(duì)這樣的功能時(shí)候,你或許會(huì)將它們獨(dú)立出來(lái),作為一個(gè)新的action,同時(shí)也有可能想著將這些功能放到主邏輯功能當(dāng)中去。如果你選擇了后者,然后興沖沖地打開(kāi)IDE想往里面加方法的時(shí)候,或許你會(huì)犯愁了:方法加了進(jìn)去,該在哪里調(diào)用呢?因?yàn)樵趹?yīng)用程序運(yùn)行的時(shí)候,WebWork框架只會(huì)調(diào)用繼承的execute方法,那么自己加進(jìn)去的方法呢?難道真的要在execute中調(diào)用?這不是又跟其他功能扯上關(guān)系了嘛?不要著急,且聽(tīng)我慢慢說(shuō)來(lái)。
??????? 其實(shí),以上說(shuō)了那么多,只是想為大家勾勒一個(gè)應(yīng)用場(chǎng)景而已。撇開(kāi)那些復(fù)雜的場(chǎng)景不談,需要解決的問(wèn)題實(shí)際就是:如何讓框架調(diào)用execute以外的方法。了解WebWork的您應(yīng)該都十分清楚:我們通常所寫(xiě)的action都會(huì)extend了ActionSupport類并且需要提供一個(gè)override的execute方法,然后在收到請(qǐng)求之后,WebWork框架會(huì)將請(qǐng)求分派給不同的action,由action的execute方法來(lái)處理這個(gè)請(qǐng)求。這就是框架所帶來(lái)的好處:更加有序地組織代碼;同時(shí)這也是一個(gè)限制。框架都會(huì)在限制與功能之間尋找一個(gè)平衡點(diǎn),一個(gè)好的框架則會(huì)將這對(duì)矛盾處理得很好:有一定程度的限制,又不失靈活和強(qiáng)大功能,而WebWork就是這樣一個(gè)框架。正當(dāng)你為無(wú)法調(diào)用execute以外的方法而懊惱的時(shí)候,你會(huì)驚喜地發(fā)現(xiàn)WebWork提供了一種靈活的方式,讓你只需修改一下配置文件就可以調(diào)用action中execute以外的方法,這樣就不需要為一些主邏輯的周邊功能而創(chuàng)建新的action類了,讓你在設(shè)計(jì)的時(shí)候有更多的選擇。要實(shí)現(xiàn)框架調(diào)用action中execute以外的方法,只需要設(shè)置好action節(jié)點(diǎn)的method屬性即可。如以下例子所示: <action?name="Login"?class="com.fantasysoft.Login">
????<result?name="success">userProfile.jsp</result>
????<result?name="input">login.jsp</result>
</action>
<action?name="PreLogin"?class="com.fantasysoft.Login"?method="preLogin">
????<result?name="success">login.jsp</result>
????<result?name="error">error.jsp</result>
</action>
??????? 以上例子中名為PreLogin的action節(jié)點(diǎn)配置就會(huì)調(diào)用Login action中的preLogin方法,而不是常見(jiàn)的execute方法了。這里還有一個(gè)十分靈活的地方需要注意的,如果preLogin方法找不到的話,WebWork并不會(huì)馬上拋出Exception,而是進(jìn)而查找doPreLogin方法(注意大小寫(xiě))。這樣做的原因是為了避免方法名和Java的關(guān)鍵字沖突,譬如你想使用default這樣的方法名,那么你在配置文件仍然可以寫(xiě)上method="default",然后在Java代碼中,你就不能用default做方法名了,因?yàn)閐efault是Java的關(guān)鍵字。但是這并不意味著就要把配置文件中method的value給改掉,你只要把方法名換上doDefault就行了。從這里可以看出WebWork考慮入微的一面,當(dāng)然,我不贊成使用這種方式,畢竟這是以損失效率為代價(jià)的。
??????? 除了以上方式之外,WebWork還提供了另外一種更為簡(jiǎn)單的方式調(diào)用action中非execute方法:使用actionName!method.action樣式的URL。而這種方式并不需要在xwork.xml中增加新的action節(jié)點(diǎn),它將會(huì)使用actionName已經(jīng)定義好的配置。還是以上的例子,如果我們使用Login!preLogin.action這樣的URL就會(huì)調(diào)用Login action中的preLogin方法,也將使用名為L(zhǎng)ogin那個(gè)action節(jié)點(diǎn)中的配置,同時(shí)PreLogin這個(gè)節(jié)點(diǎn)就可以省略了。這樣的方式的好處就是使得xwork.xml配置文件更加簡(jiǎn)短,不過(guò),兩個(gè)方法共享一個(gè)action配置也給這種方式平添了許多限制,畢竟兩個(gè)方法返回的結(jié)果碼不一定都是success和input,即使返回的結(jié)果碼相同,那么結(jié)果碼所對(duì)應(yīng)的location呢?完全相同的配置需求確實(shí)還是比較少見(jiàn)的。不管怎樣,多一個(gè)選擇總比沒(méi)有選擇要好。
????????以上只是講述了WebWork在配置靈活多變的一面,但管中窺豹,WebWork的靈活性已經(jīng)可見(jiàn)一斑。說(shuō)完管中窺豹這個(gè)成語(yǔ),另外一個(gè)成語(yǔ)在我的腦海中浮現(xiàn)——庖丁解牛。呵呵,真的很期待“以無(wú)厚入有間,恢恢乎其于游刃必有余”那種境界。
??????? 在這一章中,我了解到了很多之前并不熟悉的配置,而這些配置所帶來(lái)的影響,我不得不為之贊嘆。以action為例,通常我們會(huì)根據(jù)邏輯來(lái)劃分action,譬如Login、Register、Search和Logout等等,這些從邏輯語(yǔ)義上獨(dú)立的部分都應(yīng)該分別作為一個(gè)action,這一點(diǎn)是大家都認(rèn)可的。在以上這些action的周邊仍然會(huì)有一些其他附屬功能,譬如在Login之前需要做的準(zhǔn)備工作——PreLogin;在Search之后需要作進(jìn)一步搜索的SearchMore。在面對(duì)這樣的功能時(shí)候,你或許會(huì)將它們獨(dú)立出來(lái),作為一個(gè)新的action,同時(shí)也有可能想著將這些功能放到主邏輯功能當(dāng)中去。如果你選擇了后者,然后興沖沖地打開(kāi)IDE想往里面加方法的時(shí)候,或許你會(huì)犯愁了:方法加了進(jìn)去,該在哪里調(diào)用呢?因?yàn)樵趹?yīng)用程序運(yùn)行的時(shí)候,WebWork框架只會(huì)調(diào)用繼承的execute方法,那么自己加進(jìn)去的方法呢?難道真的要在execute中調(diào)用?這不是又跟其他功能扯上關(guān)系了嘛?不要著急,且聽(tīng)我慢慢說(shuō)來(lái)。
??????? 其實(shí),以上說(shuō)了那么多,只是想為大家勾勒一個(gè)應(yīng)用場(chǎng)景而已。撇開(kāi)那些復(fù)雜的場(chǎng)景不談,需要解決的問(wèn)題實(shí)際就是:如何讓框架調(diào)用execute以外的方法。了解WebWork的您應(yīng)該都十分清楚:我們通常所寫(xiě)的action都會(huì)extend了ActionSupport類并且需要提供一個(gè)override的execute方法,然后在收到請(qǐng)求之后,WebWork框架會(huì)將請(qǐng)求分派給不同的action,由action的execute方法來(lái)處理這個(gè)請(qǐng)求。這就是框架所帶來(lái)的好處:更加有序地組織代碼;同時(shí)這也是一個(gè)限制。框架都會(huì)在限制與功能之間尋找一個(gè)平衡點(diǎn),一個(gè)好的框架則會(huì)將這對(duì)矛盾處理得很好:有一定程度的限制,又不失靈活和強(qiáng)大功能,而WebWork就是這樣一個(gè)框架。正當(dāng)你為無(wú)法調(diào)用execute以外的方法而懊惱的時(shí)候,你會(huì)驚喜地發(fā)現(xiàn)WebWork提供了一種靈活的方式,讓你只需修改一下配置文件就可以調(diào)用action中execute以外的方法,這樣就不需要為一些主邏輯的周邊功能而創(chuàng)建新的action類了,讓你在設(shè)計(jì)的時(shí)候有更多的選擇。要實(shí)現(xiàn)框架調(diào)用action中execute以外的方法,只需要設(shè)置好action節(jié)點(diǎn)的method屬性即可。如以下例子所示: <action?name="Login"?class="com.fantasysoft.Login">
????<result?name="success">userProfile.jsp</result>
????<result?name="input">login.jsp</result>
</action>
<action?name="PreLogin"?class="com.fantasysoft.Login"?method="preLogin">
????<result?name="success">login.jsp</result>
????<result?name="error">error.jsp</result>
</action>
??????? 以上例子中名為PreLogin的action節(jié)點(diǎn)配置就會(huì)調(diào)用Login action中的preLogin方法,而不是常見(jiàn)的execute方法了。這里還有一個(gè)十分靈活的地方需要注意的,如果preLogin方法找不到的話,WebWork并不會(huì)馬上拋出Exception,而是進(jìn)而查找doPreLogin方法(注意大小寫(xiě))。這樣做的原因是為了避免方法名和Java的關(guān)鍵字沖突,譬如你想使用default這樣的方法名,那么你在配置文件仍然可以寫(xiě)上method="default",然后在Java代碼中,你就不能用default做方法名了,因?yàn)閐efault是Java的關(guān)鍵字。但是這并不意味著就要把配置文件中method的value給改掉,你只要把方法名換上doDefault就行了。從這里可以看出WebWork考慮入微的一面,當(dāng)然,我不贊成使用這種方式,畢竟這是以損失效率為代價(jià)的。
??????? 除了以上方式之外,WebWork還提供了另外一種更為簡(jiǎn)單的方式調(diào)用action中非execute方法:使用actionName!method.action樣式的URL。而這種方式并不需要在xwork.xml中增加新的action節(jié)點(diǎn),它將會(huì)使用actionName已經(jīng)定義好的配置。還是以上的例子,如果我們使用Login!preLogin.action這樣的URL就會(huì)調(diào)用Login action中的preLogin方法,也將使用名為L(zhǎng)ogin那個(gè)action節(jié)點(diǎn)中的配置,同時(shí)PreLogin這個(gè)節(jié)點(diǎn)就可以省略了。這樣的方式的好處就是使得xwork.xml配置文件更加簡(jiǎn)短,不過(guò),兩個(gè)方法共享一個(gè)action配置也給這種方式平添了許多限制,畢竟兩個(gè)方法返回的結(jié)果碼不一定都是success和input,即使返回的結(jié)果碼相同,那么結(jié)果碼所對(duì)應(yīng)的location呢?完全相同的配置需求確實(shí)還是比較少見(jiàn)的。不管怎樣,多一個(gè)選擇總比沒(méi)有選擇要好。
????????以上只是講述了WebWork在配置靈活多變的一面,但管中窺豹,WebWork的靈活性已經(jīng)可見(jiàn)一斑。說(shuō)完管中窺豹這個(gè)成語(yǔ),另外一個(gè)成語(yǔ)在我的腦海中浮現(xiàn)——庖丁解牛。呵呵,真的很期待“以無(wú)厚入有間,恢恢乎其于游刃必有余”那種境界。
總結(jié)
以上是生活随笔為你收集整理的关注WebWork(四)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 变态题大串烧:微软面试问题 -- 二.没
- 下一篇: 搜索引擎设计实用教程(3)-以百度为例