Struts2系列:通配符和动态方法调用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts2系列:通配符和动态方法调用相关的知识,希望对你有一定的参考价值。
当前存在的问题:在struts.xml配置文件中,每个action标签对应一个类中的方法。但是,在实际JavaWeb项目开发中,有许多继承自ActionSupport类的类(其中也包括很多方法),如果每个方法对应一个action标签,那么就会造成struts.xml非常庞大。
本节中介绍的通配符 和 动态方法调用 就是为了解决这一问题。本节分成2个部分:(1)通配符映射 和 (2)动态调用
概念:Struts应用可能有很多action 声明,可把多个相似的映射关系简化为一个(通用)映射关系的机制 (多个Action类----一个action标签)
1、通配符映射规则
一般使用“*” 匹配零个或多个字符
被通配符匹配到的 URI 字符串的子串可以用 {1}, {2} 来引用. {1} 匹配第一个子串, {2} 匹配第二个子串…{n}
(1)精确匹配优先。若找到多个匹配, 没有通配符的那个将使用。
(2)若指定的动作不存在, Struts 将会尝试把这个 URI 与任何一个包含着通配符 * 的动作名及进行匹配。
(3)若带有通配符的匹配多个, 以第一个匹配为准。因此要注意带有通配符的action的顺序问题。
映射案例1
<action name="*" class="com.rk.strut.d_wildcard.{1}" method="add"> <result name="add">/wildcard/{1}.jsp</result> </action>
映射案例2
<action name="user_*" class="com.rk.strut.d_wildcard.UserAction" method="{1}"> <result name="success">/wildcard/user/{1}.jsp</result> </action>
映射案例3
<action name="*_*" class="com.rk.strut.d_wildcard.{1}" method="{2}"> <result name="success">/wildcard/{1}/{2}.jsp</result> </action>
完整的3个案例的排列顺序:user_* --> *_* --> *
<action name="user_*" class="com.rk.strut.d_wildcard.UserAction" method="{1}"> <result name="success">/wildcard/user/{1}.jsp</result> </action> <action name="*_*" class="com.rk.strut.d_wildcard.{1}" method="{2}"> <result name="success">/wildcard/{1}/{2}.jsp</result> </action> <action name="*" class="com.rk.strut.d_wildcard.{1}" method="add"> <result name="add">/wildcard/{1}.jsp</result> </action>
2、动态调用
动态方法调用: 通过在 url 中指定方法名动态调用 Action 中的方法
语法形式:action名字+!+调用的Action方法名
Struts 2动态方法默认可用, 则可在 struts.xml 文件中添加 constant 元素禁用该功能:
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
完整的struts.xml中配置
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="true" /> </struts>
案例1
<action name="flower" class="com.rk.strut.d_wildcard.FlowerAction" > <result name="add">/wildcard/flower/add.jsp</result> <result name="delete">/wildcard/flower/delete.jsp</result> </action>
访问地址:
http://127.0.0.1:8080/hello/rk/wildcard/flower!add.action
http://127.0.0.1:8080/hello/rk/wildcard/flower!delete.action
以上是关于Struts2系列:通配符和动态方法调用的主要内容,如果未能解决你的问题,请参考以下文章
Struts2.5动态方法调用action和使用通配符访问action