前言
有時(shí)我們需要用戶進(jìn)入首頁(yè)時(shí)經(jīng)過(guò)struts2filter
處理养篓,但用戶一般情況下只會(huì)輸入主機(jī)名+web應(yīng)用名,此時(shí)選擇<default-action-ref>
來(lái)實(shí)現(xiàn)跳轉(zhuǎn)(以CategoryAction
為例)
<default-action-ref name="Category_list"></default-action-ref>
<action name="Category_list" class="cn.xxxxx.action.CategoryAction" method="list">
<result>/index.jsp</result>
</action>
但并不能起作用忠聚,問題如下:
如果不輸入Category_list
,理論上會(huì)默認(rèn)跳轉(zhuǎn)到Category_list
,執(zhí)行相應(yīng)的action并跳到指定jsp頁(yè)面设哗,但不幸的是:
如果在jsp頁(yè)面加上<s:property value="[0]"/>
,結(jié)果如下:
[com.opensymphony.xwork2.DefaultTextProvider@1faa21d]
理論上两蟀,應(yīng)該執(zhí)行的action沒有被創(chuàng)建出來(lái)网梢,理想結(jié)果如下:
[cn.xxxxx.action.CategoryAction@13fa415, com.opensymphony.xwork2.DefaultTextProvider@1faa21d]
解決方法:
在web.xml
中,struts2filter
前面赂毯,加上(注:xxxxx可為任意不與其他action mapping的值战虏,不能為空)
<welcome-file-list>
<welcome-file>XXXXX</welcome-file>
</welcome-file-list>
在struts.xml
中,加上
<default-action-ref name="Category_list"></default-action-ref>
<action name="Category_list" class="cn.xxxxx.action.CategoryAction" method="list">
<result>/index.jsp</result>
</action>
原理:
當(dāng)用戶輸入例如主機(jī)名/web應(yīng)用名時(shí)党涕,web.xml
中配的welcome-file
會(huì)將uri替換為主機(jī)名/web應(yīng)用名/XXXXX烦感,struts2filter發(fā)現(xiàn)XXXXX無(wú)法mapping到任何action,便轉(zhuǎn)交給<default-action-ref>
,如上name="Category_list"
,Category_list
將會(huì)被執(zhí)行膛堤。
結(jié)論:
如果用戶只輸入主機(jī)名/web應(yīng)用名手趣,頁(yè)面會(huì)跳轉(zhuǎn)到web.xml
設(shè)置的默認(rèn)首頁(yè),此時(shí)并不會(huì)經(jīng)過(guò)struts2filter
處理肥荔,所以不會(huì)執(zhí)行action绿渣。此時(shí),需要自己配置welcome-file
(在struts2之前配置)燕耿,在web應(yīng)用下添加子路徑中符,struts2filter
將會(huì)對(duì)該請(qǐng)求進(jìn)行處理,如果沒有mapping到任何action誉帅,則交給<default-action-ref>
處理淀散,執(zhí)行相應(yīng)action谭期。有老師講的時(shí)候說(shuō)<default-action-ref>
只是執(zhí)行了jsp的跳轉(zhuǎn)而沒有執(zhí)行action,經(jīng)過(guò)實(shí)驗(yàn)分析這是不對(duì)的吧凉。
說(shuō)這么多的目的只有兩個(gè):
1.提出問題解決方案;
2.希望大家學(xué)習(xí)的時(shí)候多動(dòng)手做實(shí)驗(yàn)踏志,老師也有失誤的時(shí)候阀捅。