动态action是指一个action中实现多个方法,用户能够请求调用action中的某个方法。
动态action有三种实现方法,分别为:
1、请求URL为actionName!methodName形式
该方法要想开启动态action功能,必须在struts.xml中配置常量:struts.enable.DynamicMethodInvocation = true,如下所示:
该方法的配置如下:
"-//Apache SoftwareFoundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
示例代码如下:
package com.struts2.test;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorld extends ActionSupport {
private static final longserialVersionUID = 1L;
private String message;
public StringgetMessage(){
return message;
}
public String update()throws Exception{
message ="update data!";
return"update";
}
public String add() throwsException{
message = "adddata!";
return"add";
}
}
访问URL形式为:http://localhost:8080/StrutsTest/HelloWorld!update。
注意:在struts 2.5及以上版本中为了提升安全性,该种实现方法须在struts package节点下配置:
2、指定action的method属性
该方法是在package节点下的action节点中使用method来实现,配置示例如下红色部分:
"-//Apache SoftwareFoundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
上文红色部分配置了名称为HelloWorldUpdate的action映射到类com.struts2.test.HelloWorld中的update方法上。
访问的URL形式为:http://localhost:8080/StrutsTest/HelloWorldUpdate。
3、使用通配符
仔细看上面struts.xml中两个action的定义,可以发现他们除了name和method属性不同以外,其余的都一样,这种定义相当的冗余,为了解决这种类型的问题,Struts2提供了通配符定义方式。
在配置
"-//Apache SoftwareFoundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
{1}表示为第一个*,也可能使用多个*,{N}表示第N个*。
代码示例如下:
package com.struts2.test;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorld extends ActionSupport {
private static final longserialVersionUID = 1L;
private String message;
public StringgetMessage(){
return message;
}
public String update()throws Exception{
message ="update data!";
return"update";
}
public String add() throwsException{
message = "adddata!";
return"add";
}
}
注意:在struts 2.5及以上版本中为了提升安全性,该种实现方法须在struts package节点下配置:
访问的URL形式为:http://localhost:8080/StrutsTest/updateAction。