在Struts2的配置文件:struts.xml中可以使用通配符
优势:大大减少配置文件的内容
劣势:减少了配置文件的可读性
通配符使用原则:约定高于配置,即优先按照约定规则执行,之后才会按照配置执行。
例如,struts 配置:
<!--对投资的管理--> <package name="invest" extends="json-default"> <action name="investAction_*" class="investAction" method="{1}"> <result name="success"> /jsp/invest_{1}.jsp </result> </action> </package>
解释:(1) * 表示后面匹配任意字符;
(2)第一个 {1} 表示的就是第一个 * 。
例如我们访问 "/invest/investAction_addInvest",根据struts配置,就会默认访问 InvestAction.java中addInvest方法,返回参数后,再根据struts的配置,去
找到 "/jsp/invest_addInvest.jsp"
(3)如果是下面配置:
<!--对投资的管理--> <package name="invest" extends="json-default"> <action name="*/*_*" class="com.cn.{1}.action.{2}Action" method="{3}"> <result name="success"> /jsp/{2}/update{2}.jsp </result> </action> </package>
即:我们访问一个action:/myProgram/invest_addInvest ,可以知道: {1} 表示myProgram; {2}表示invest ; {3}表示addInvest
那么相应的class解析为:com.cn.myProgram.action.investAction
jsp地址为: /jsp/invest/updateinvest.jsp
试想,如果我们页面访问多个Action,如:
<body> <a href="invest_addInvest.action">添加页面</a><br> <a href="invest_updateInvest.action">删除页面</a><br> <a href="invest_deleteInvest.action">修改页面</a><br> </body>
我们上面的一个配置就可以满足这3个请求。
最后,匹配的先后顺序是:
优先对应完全名称相同的配置,然后再去配置通配符;如果同是通配符配置的路径,那么会优先匹配前面的。
即有请求: "/invest/invest_addInvest",有strust配置:
<!--对投资的管理--> <package name="invest" extends="json-default"> <!-- 1--> <action name="invest/invest_addInvest" class="com.cn.invest.action.InvestAction" method="addInvest"> <result name="success"> /jsp/invest/addInvest.jsp </result> </action> <!-- 2--> <action name="invest/*_*" class="com.cn.invest.action.InvestAction" method="{2}"> <result name="success"> /jsp/invest/addInvest.jsp </result> </action> <!-- 3--> <action name="invest/invest_*" class="com.cn.invest.action.InvestAction" method="{1}"> <result name="success"> /jsp/invest/addInvest.jsp </result> </action> </package>
那么:
不管配置1在什么位置,会优先匹配。
配置2和配置3具有相同的优先级,谁在前面先匹配谁。尽管配置3匹配度更高一些。