一 提出背景
动态方法调用是为了解决一个Action对应多个请求的处理,以免Action太多。
二 解决方法
三 方案1——指定method属性
1、Action编写
package
com.cakin.action;
import
com.opensymphony.xwork2.ActionSupport;
public
class
HelloWorldAction
extends
ActionSupport {
@Override
public
String execute()
throws
Exception {
System.
out
.println(
"执行Action"
);
return
SUCCESS
;
}
public
String add()
{
return
SUCCESS
;
}
public
String update()
{
return
SUCCESS
;
}
}
2、Struts编写
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<!
DOCTYPE
struts
PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"
http://struts.apache.org/dtds/struts-2.1.dtd"
;
>
<
struts
>
<
package
name
=
"default"
namespace
=
"/"
extends
=
"struts-default"
>
<
action
name
=
"helloworld"
class
=
"com.cakin.action.HelloWorldAction"
>
<
result
>
/result.jsp
</
result
>
</
action
>
<
action
name
=
"addAction"
method
=
"add"
class
=
"com.cakin.action.HelloWorldAction"
>
<
result
>
/add.jsp
</
result
>
</
action
>
<
action
name
=
"updateAction"
method
=
"update"
class
=
"com.cakin.action.HelloWorldAction"
>
<
result
>
/update.jsp
</
result
>
</
action
>
</
package
>
</
struts
>
3、测试
四 方案2——感叹号方式
1、Action编写
package
com.cakin.action;
import
com.opensymphony.xwork2.ActionSupport;
public
class
HelloWorldAction
extends
ActionSupport {
@Override
public
String execute()
throws
Exception {
System.
out
.println(
"执行Action"
);
return
SUCCESS
;
}
public
String add()
{
return
"add"
;
}
public
String update()
{
return
"update"
;
}
}
2、Struts编写
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<!
DOCTYPE
struts
PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"
http://struts.apache.org/dtds/struts-2.1.dtd"
;
>
<
struts
>
<
package
name
=
"default"
namespace
=
"/"
extends
=
"struts-default"
>
<
action
name
=
"helloworld"
class
=
"com.cakin.action.HelloWorldAction"
>
<
result
>
/result.jsp
</
result
>
<
result
name
=
"add"
>
/add.jsp
</
result
>
<
result
name
=
"update"
>
/update.jsp
</
result
>
</
action
>
</
package
>
<
constant
name
=
"struts.enable.DynamicMethodInvocation"
value
=
"true"
></
constant
>
</
struts
>
3、测试
五 方案3——单个通配符方式
1、Action编写
package
com.cakin.action;
import
com.opensymphony.xwork2.ActionSupport;
public
class
HelloWorldAction
extends
ActionSupport {
@Override
public
String execute()
throws
Exception {
System.
out
.println(
"执行Action"
);
return
SUCCESS
;
}
public
String
add()
{
return
"add"
;
}
public
String update()
{
return
"update"
;
}
}
2、Struts编写
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<!
DOCTYPE
struts
PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"
http://struts.apache.org/dtds/struts-2.1.dtd"
;
>
<
struts
>
<
package
name
=
"default"
namespace
=
"/"
extends
=
"struts-default"
>
<
action
name
=
"helloworld_*"
method
=
"{1}"
class
=
"com.cakin.action.HelloWorldAction"
>
<
result
>
/result.jsp
</
result
>
<
result
name
=
"add"
>
/{1}.
jsp
</
result
>
<
result
name
=
"update"
>
/{1}.
jsp
</
result
>
</
action
>
</
package
>
<
constant
name
=
"struts.enable.DynamicMethodInvocation"
value
=
"false"
></
constant
>
</
struts
>
3、测试
六 方案3——多个通配符方式
1、Action编写
package
com.cakin.action;
import
com.opensymphony.xwork2.ActionSupport;
public
class
HelloWorldAction
extends
ActionSupport {
@Override
public
String execute()
throws
Exception {
System.
out
.println(
"执行Action"
);
return
SUCCESS
;
}
public
String add()
{
return
"add"
;
}
public
String update()
{
return
"update"
;
}
}
2、Struts编写
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<!
DOCTYPE
struts
PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"
http://struts.apache.org/dtds/struts-2.1.dtd"
;
>
<
struts
>
<
package
name
=
"default"
namespace
=
"/"
extends
=
"struts-default"
>
<
action
name
=
"*_*"
method
=
"{2}"
class
=
"com.cakin.action.{1}Action"
>
<
result
>
/result.jsp
</
result
>
<
result
name
=
"add"
>
/{2}.
jsp
</
result
>
<
result
name
=
"update"
>
/{2}.
jsp
</
result
>
</
action
>
</
package
>
<
constant
name
=
"struts.enable.DynamicMethodInvocation"
value
=
"false"
></
constant
>
</
struts
>
3、测试