Action是一个逻辑控制器,并不直接对浏览器生成响应,而是返回指定逻辑视图(一个字符串)。
不推荐在Action的name属性值中使用点(.)和中划线(-),有可能会引发一些未知异常。
1使用Action的动态方法调用(DMI)
1)设置struts.enable.DynamicMethodInvocation常量值为true(存在安全缺陷)
2)targetForm.action = "actionName!methodName"(method是Action里面跟execute性质一样的方法)
2指定method属性及使用通配符
通过通配符将一个Action处理类定义成多个逻辑Action
1)一个Action里多个方法写多个class和result 一样,方法不一样的Action
<action name="login" class="org.crazyit.app.action.LoginRegistAction">
<!-- 定义逻辑视图和物理视图之间的映射关系 -->
<result name="error">/WEB-INF/content/error.jsp</result>
<result>/WEB-INF/content/welcome.jsp</result>
</action>
<!-- 配置regist Action,处理类为LoginRegistAction
指定使用regist方法处理请求-->
<action name="regist" class="org.crazyit.app.action.LoginRegistAction" method="regist">
<!-- 定义逻辑视图和物理视图之间的映射关系 -->
<result name="error">/WEB-INF/content/error.jsp</result>
<result>/WEB-INF/content/welcome.jsp</result>
</action>
action=actionName
2)在name属性里加通配符,在class、method属性及result子元素中使用{N}的形式来代替前面第N个*号所匹配的子串
<!-- 使用模式字符串定义Action的name,指定所有以Action结尾的请求,
都可用LoginRegistAction来处理,method属性使用{1},
这个{1}代表进行模式匹配时第一个*所代替的字符串 -->
<action name="*Action" class="org.crazyit.app.action.LoginRegistAction"
method="{1}">
3)<action name="*Action" class="org.crazyit.app.action.{1}Action">
4)<action name="*_*" class="org.crazyit.app.action.{1}Action" method="{2}">
5)<action name="*">
<result>/WEB-INF/content/{1}.jsp</result>
</action>
Action 搜索顺序:
除非请求的URL与Action的name一模一样,否则按struts.xml中Action定义的先后顺序来决定处理请求的Action.
3配置默认Action
<default-action-ref name="aaa">
<!-- 该元素可以出现0至多次-->
<param name="参数名">参数值</param>
</default-action-ref>
<action name="aaa" class="" method="" converter="">
...
</action>
4配置Action默认处理类
<default-class-ref name="com.opensymphony.xwork2.ActionSupport"/>
5Config Browser插件
安装:struts2-config-browser-plugin-2.3.16.3.jar复制到项目WEB-INF\lib下重启项目
localhost:8080/项目名/config-browser/index.action