請求和處理的映射,也就是常說的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等但不限于這些返回結果,自定義的返回結果只要有對應的相應視圖即可。
優點:配置靈活,精簡
缺點:配置時要求仔細,使用統一的規則,所謂的“約定優于配置”
實際開發中,根據各個配置方式的優缺點自行選擇,配置沒有絕對的好壞