Struts2 Action动态方法调用
动态方法调用就是为了解决一个Action对应多个请求的处理,以免Action太多。
第一种:指定method属性,这是最基础的一种,不详细说明。
第二种:使用感叹号方式
使用感叹号模式我们需要在struts.xml开启功能 就是这:<constant name="struts.enable,DynamicMethodInvocation" value="true"></constant>
struts,xml文件如下:
<?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> <constant name="struts.devMode" value="true"/> <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant> <package name="default" namespace="/test" extends="struts-default"> <action name="Helloworld1" class="struts2study.Helloworld"> <result name="success">/index.jsp</result> <result name="Hello">/Hello.jsp</result> </action> <action name="test11" class="struts2study.TestStruts2" method="test"> <result>/index.jsp</result> </action> </package> </struts>
Helloworld这个类代码如下:
package struts2study; import com.opensymphony.xwork2.ActionSupport; public class Helloworld extends ActionSupport{ @Override public String execute() throws Exception { // TODO Auto-generated method stub return SUCCESS; } public String Hello(){ return "Hello"; } }
结果我们先输入http://localhost:8888/struts2study/test/Helloworld1.action,结果:
运用!+方法名输入:
第三种:通过通配符来动态调用,要将<constant name="struts.enable.DynamicMethodInvocation" value="false"/>这样设置
例子:
struts.xml
Helloworld.java代码:
package struts2study; import com.opensymphony.xwork2.ActionSupport; public class Helloworld extends ActionSupport{ public String Add(){ // TODO Auto-generated method stub return "add"; } public String Hello(){ return "Hello"; } }
当我们输入:localhost:8888/struts2study/test/Addworld1.action跳转到
当输入:http://localhost:8888/struts2study/test/Helloworld1.action跳转到
可以发现是动态的跳转,在此例子中在这个struts.xml中我们可以看到符号*,和{1},例如我们输入的url是http://localhost:8888/struts2study/test/Addworld1.action,则此时,*代表的就是Add这个字符串,而{1}就代表第一个*所代表的字符串也就是Add,同理我可以有多个*,如*_*,则此时{1}代表第一个*,{2}代表第二个*.这样使得灵活性大大提升。
补充:
Struts版本已经更新至2.5.2,配置不一样了
1.感叹号方法
除了要常量<constant .../>,还要在<package>中增加属性:strict-method-invocation="false"
2.通配符方法
不需要常量<constant.../>,但要在<package>中增加属性:strict-method-invocation="false"
即:<package name="default" namespace="/" extends="struts-default" strict-method-invocation="false">