Struts2入门基础之Action详解(四)

Action的实现方法

在传统的自定义MVC框架中,action都要实现action接口,这些接口都需要自定义MVC框架自己定义,实现MVC框架接口与MVC框架耦合。在shtruts框架中action的实现方法很灵活,主要有三种方法。

第一种继承ActionSupport

自定义的action一般直接继承ActionSupport类,并定义变量,覆盖的execute()的方法,变量通过struts中的set进行赋值,execute()方法中直接使用即可。Execute中方法的返回值必须在strutsz.xml中进行<result>配置。例如(getset方法)

package cn.test.action;

import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class LoginAction  extends ActionSupport{
        private String name;//帐号
        private String password;//密码
        //主方法
        public String execute(){
        	//如何匹配就返回成功页面
        	if("hello".equals(name)&&"123".equals(password)){
        		return "success";
        	}else{
        		return "fail";//失败返回登录页面
        	}
        }

		public String getPassword() {
			return password;
		}

		public void setPassword(String password) {
			this.password = password;
		}		
	
}

第二种定义Action接口

自定义的action也可以实现action的接口,在继承actionsupport类时也可以实现自定义的接口,在接口中只自定义一个execute()主方法以及常用的结果名称例如(failSuccessinputlogin等),编程中尽量要使用这些结果名称。例如

public interface Action {
       public abstract String excute() throws Exception;//主方法
       public static final String SUCCESS = "success";//预设置的result
       public static final String ERROE = "erroe";//预设置的result
       public static final String INPUT = "input";//预设置的result
       public static final String FAIL = "fail";//预设置的result
       public static final String LOGIN = "login";//预设置的result
    
}

直接实现实现接口以及execute()方法即可。

第三不继承任何类的ACTION

struts2中不一定要实现Action接口,任何的POJO都可以用作Action,只是在这个action中我们必须定义一个public String execute()方法,如果action没有实现这个方法,会通过反射机制来实现execute方法。例如(setget方法省略)

public class LoginAction {
        private String name;//帐号
        private String password;//密码
        //主方法
        public String execute(){
        	//如何匹配就返回成功页面
        	if("hello".equals(name)&&"123".equals(password)){
        		return "success";
        	}else{
        		return "fail";//失败返回登录页面
        	}
        }
		public String getPassword() {
			return password;
		}

		public void setPassword(String password) {
			this.password = password;
		}	


Action的搜索顺序

第一步:假设获取的请求路径urlhttp://localhost:8080/Test/test/path/login.

第二步:Action的搜索顺序是首先搜索寻找namespace/test/pathpackage。如果不存在package则执行步骤三,如果存在package,则在这个package中寻找名字为tloginaction,,当在该package中寻找不到就会直接跑到默认的package里面寻找action,如果在默认的namespace的包中还寻找不到action,页面提示找不到action。(在这里说一下默认的命名空间,,它的格式如下:

	<package name="default" namespace="" extends="/struts-default">
		<action name="test_*" class="cn.test.action.TestAction" method="{1}">
			<result name="hello">/result.jsp</result>
		</action>
         	<package>		

默认的命名空间为空字符串。

第三步:寻找namespace/testpackage。如果不存在package则执行步骤四,如果存在package,则在这个package中寻找名字为loginaction,,当在该package中寻找不到就会直接跑到默认的package里面寻找action,如果在默认的namespace的包中还寻找不到action,页面提示找不到action

第四部;寻找namespace/package。如果不存在package则执行步骤三,如果存在package,则在这个package中寻找名字为loginaction,,当在该package中寻找不到就会直接跑到默认的package里面寻找action,如果在默认的namespace的包中还寻找不到action,页面提示找不到action

Action的各项默认值

strut2中我们希望可以把处理的结果直接转发到页面了在struts.xml配置.如图

<struts>
	<package name="default" namespace="/test" extends="/struts-default">
		<action name="test" class="cn.test.action.TestAction" method="add">
			<result name="hello">/result.jsp</result>
		</action>

	</package>
</struts>    

在有的开发只能struts,xml中没有配置class,method或者result等属性的值,但是我们要知道他们各自有自己的默认值,在没有配置的时候他们会自动调用他们额默认值,class的默认属性为Acttiononsupport,method的默认值为execute,result的默认值为success,关于这个几个属性的默认值,可以到actionsupport类中查看。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值