溫故知新:struts2_02請求和處理的映射

          請求和處理的映射,也就是常說的action和url之間的關系,struts2提供了很多種方式來配置他們之間的映射,01中提到的struts.xml配置
           1 <?xml version="1.0" encoding="UTF-8"?>
           2 <!DOCTYPE struts PUBLIC
           3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
           4     "http://struts.apache.org/dtds/struts-2.3.dtd">
           5 <struts>
           6 
           7    <constant name="struts.action.extension" value="action,," /><!-- 請求后綴名-->  
           8    <package name="helloworld" extends="struts-default" namespace="/"><!-- struts-default這個包是一定要繼承的,否則struts很多重要功能會失效-->
           9       <action name="hello" <!-- action的名稱,namespace的值連接/hello表示請求該action  -->
          10             class="demo.action.HelloWorld"><!-- class表示該action的位置,在action的配置中,如果不指定調用哪個方法,則默認調用execute方法  -->
          11             <result name="success">/helloWorld.jsp</result><!-- action的返回結果,以及相應的視圖  -->
          12       </action>
          13    </package>
          14 
          15 </struts>
          就是一種方式。這個配置中,就已經能很明顯的看出action和url之間的關系,只是這段配置沒有指明具體調用action中的哪個方法,所有默認調用了execute方法,雖然比較笨拙,但是這可以記為配置映射的第一個方法。需要特別一提的是struts.action.extension配置,它代表了action的后綴名,逗號隔開。也就是說,它指定了哪些結尾的請求為struts請求,默認是action和空結尾的請求。

          方法一:
          一個action只對應一個請求,默認調用execute方法,這樣,為了滿足業務需求,package中就會出現大量的action配置。實際開發中,除非這個請求進行的操作非常多,以至于書寫的代碼幾千行,甚至上萬行,否則一般不會這么配置,就算真的出現這樣的情況,也極有可能和其他配置方式混搭使用,單獨使用的比較少。
          優點:配置簡單明了,而且action中只有一個方法,方便閱讀
          缺點:會出現大量的action配置,大量的action類

          方法二:
          為了讓一個action能夠對應多個請求,可以在方法一的基礎上為action的配置添加method屬性
           1 <?xml version="1.0" encoding="UTF-8"?>
           2 <!DOCTYPE struts PUBLIC
           3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
           4     "http://struts.apache.org/dtds/struts-2.3.dtd">
           5 <struts>
           6 
           7    <package name="helloworld" extends="struts-default" namespace="/">
           8       <action name="hello" method="method01"
           9             class="demo.action.HelloWorld">
          10             <result name="success">/helloWorld.jsp</result>
          11       </action>
          12    </package>
          13 
          14 </struts>
          如此一來,action中的method01方法就會對應/hello請求。
          優點:可以減少action類的數量
          缺點:還是有大量的配置!!

          方法三:
          這種請求和處理的映射有點類似于將方法名當做參數來傳遞,struts.xml的配置和方法一一致,無需更改,只是在發送請求的時候需要將請求的方法一并發送,原始的請求是/hello,而連帶方法名的請求是/hello!hello,或者還可以寫/hello?method:hello(假定Helloworld類中有hello方法),這樣一來,就是直接調用hello方法來完成處理。
          優點:不僅可以完成一個action和多個請求的映射,還能減少action的配置,僅僅只是額外配置action的result即可
          缺點:地址注意不能寫錯,實際開發中不常用,或許只是看起來請求地址怪怪的。。。但依然是個不錯的配置方式

          方法四:
          基于通配符的映射
           1 <?xml version="1.0" encoding="UTF-8"?>
           2 <!DOCTYPE struts PUBLIC
           3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
           4     "http://struts.apache.org/dtds/struts-2.3.dtd">
           5 <struts>
           6 
           7    <package name="helloworld" extends="struts-default" namespace="/">
           8       <action name="*_*" 
           9             class="demo.action.{1}action" method="{2}">
          10             <result name="success">/{1}/{2}.jsp</result>
          11       </action>
          12    </package>
          13 
          14 </struts>
          顯而易見,任何形式的“XX_XX”請求都會得到映射,{1}代表第一個*的值,{2}代表第二個,以此類推,最主要的是,一定要從action的名稱,到action內的方法,直至最后響應視圖的位置,都要好好的在請求中寫好。基于通配符的配置方式顯得十分靈活,但也要求十分的細心,是一種能同時簡化action類和配置內容的映射方式。這里要特別提到result的結果,結果可以是struts提供的SUCCESS,ERROR等但不限于這些返回結果,自定義的返回結果只要有對應的相應視圖即可。
          優點:配置靈活,精簡
          缺點:配置時要求仔細,使用統一的規則,所謂的“約定優于配置”

          實際開發中,根據各個配置方式的優缺點自行選擇,配置沒有絕對的好壞



          posted on 2014-10-30 00:38 都較瘦 閱讀(228) 評論(0)  編輯  收藏 所屬分類: MVCFramework

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          公告

          博客定位:囿于目前的水平,博客定位在記錄自己的學習心得和隨手的練習

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 三亚市| 循化| 滨海县| 抚远县| 富锦市| 尼木县| 缙云县| 师宗县| 云林县| 赣榆县| 开平市| 绥德县| 大足县| 丰顺县| 临沭县| 钦州市| 通许县| 苏尼特右旗| 丹棱县| 九江县| 化德县| 云南省| 濮阳市| 彰化市| 盈江县| 贵溪市| 白水县| 奉贤区| 南华县| 丰镇市| 新乡市| 呈贡县| 金平| 黑山县| 凌云县| 思南县| 论坛| 仪征市| 扎鲁特旗| 凭祥市| 冷水江市|