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">

 

posted @ 2017-03-24 13:40  白夜梦想家  阅读(121)  评论(0编辑  收藏  举报