一·:动态方法调用(DMI)
struts.xml中新增一个<package>配置,如下
<!-- DMI -->
<package name="DMI" namespace="/DMI" extends="struts-default">
<!-- 1.action中包含method参数(不常用,不太重要) -->
<action name="DMI_add" class="com.rt.struts2.actionDemo.UserAction" method="add">
<result>
/result.jsp
</result>
</action>
<!-- 2.jsp连接地址中包含 “ basePath + namespace+ action + !+方法名 ”,动态方法调用 -->
<action name="DMI" class="com.rt.struts2.actionDemo.UserAction">
<result>
/result.jsp
</result>
</action>
</package>
第一种仅仅是在在访问时指定和限制了方法而已
第二种则是在连接中用叹号“!”来指定方法,这种方法只要修改 超链接<a>标签,就行了。具体超链接是:
<a href="<%=basePath%>DMI/DMI!add"> 动态方法调用 :basePath + namespace+ action + !+方法名</a><br>
(其中namespace和action名称参照struts.xml就行了)
UserAction测试类巨简单,只有一个add方法,如下:
package com.rt.struts2.actionDemo;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport
{
public String add()
{
System.out.println("DMI_add()");
return SUCCESS;
}
}
二:action通配符
struts.xml中增加一个新的<package>,用于通配符的使用
<!-- actionWilcard -->
<package name="aw" namespace="/aw" extends="struts-default">
<!-- 1.通配符*和字串混用 -->
<action name="Student_*" class="com.rt.demo.actionWildcard.StudentAction" method="{1}">
<result>
/Student{1}_success.jsp
</result>
</action>
<!-- 2.多个通配符* -->
<action name="*_*" class="com.rt.demo.actionWildcard.{1}Action" method="{2}">
<result>
/{1}{2}_success.jsp
</result>
</action>
</package>
action类如下:Teacher类和Student类只是名字不同而已
package com.rt.demo.actionWildcard;
import com.opensymphony.xwork2.ActionSupport;
public class StudentAction extends ActionSupport
{
public String add()
{
System.out.println("StudentAction_add");
return SUCCESS;
}
public String delete()
{
System.out.println("StudentAction_delete");
return SUCCESS;
}
}
此外还需要对应通配符名称的jsp文件,用于显示输出
比如:Studentadd_success.jsp,Studentdelete_success.jsp,Teacheradd_success.jsp等
这样在URL上传递相应的方法名称就能调用到需要的action,比如
http://127.0.0.1:8080/Struts2Project/aw/Student_delete
http://127.0.0.1:8080/Struts2Project/Teacher_add 等等
虽然struts.xml中的<package>配置只有一个,但只要符合命名规范,通过通配符*就能处理n个配置
最后还有个通配符的执行顺序问题,是优先精确匹配,
都用通配符的前提下按顺序匹配。