Struts2的三种Action

一、Struts2的控制器有三种形式:Struts2的Action包含了多个属性来封装用户请求的参数,这一点与Struts1的ActionForm非常类似,同时还包含一个execute方法,用来调用业务逻辑组件进行判断,并返回字符串,通过返回的字符串,Struts2会跳转到指定的视图资源。

下面以登录处理为例对Struts2的Action各种形式进行讲解:

1、普通的POJO类。

package action;
import com.LoginCheck;
import com.opensymphony.xwork2.ActionContext;

public class LoginAction {
	private String uname;
	private String upassword;
	
	//获得uname值
	public String getUname() {
		return uname;
	}
	
	//设置uname值
	public void setUname(String uname) {
		this.uname = uname;
	}
	
	//获得password值
	public String getUpassword() {
		return upassword;
	}
	
	//设置password值
	public void setUpassword(String upassword) {
		this.upassword = upassword;
	}
	
	public String execute() throws Exception {
		//new一个LoginCheck对象
		LoginCheck lc = new LoginCheck();
		//调用业务逻辑组件的判断功能来判断
		if(lc.isLogin(getUname(),getUpassword())){
			//如果为合法用户,在session范围中添加属性login,其属性值为true,
			ActionContext.getContext().getSession().put("login", "true");
			return "success";
		}else{
			return "failure";
		}
	}
}

 对应的LoginCheck为登录验证类。后面几个Action都是运用这个登录验证进行处理。

LoginCheck.java

package com;

public class LoginCheck {
	
	//判断是否为合法用户
	public boolean isLogin(String name,String password){
		if("admin".equals(name)&&"admin".equals(password)){
			return true;
		}else{
			return false;
		}
	}
	
}

 

 这里只是验证用户名和密码都为admin即为合法用户。实际运用中这里都是进行数据库验证。

 

配置Action:struts.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<!-- struts为配置文件根元素-->
<struts>
	<!-- Action必须放在指定的包名空间中-->
	<package name="struts2" extends="struts-default">
		<!-- 定义login的Action,其实现类为action.LoginAction2-->
		<action name="login" class="action.LoginAction">
			<!-- 定义处理结果与视图资源之间的关系-->
			<result name="success">/login_success.jsp</result>
			<result name="error">/login_failure.jsp</result>
		</action>
	</package>
</struts>

 

2、实现Action接口:com.opensymphony.xwoek2.Action.

Action接口源码:Action.java

package com.opensymphony.xwork2;

public interface Action{
  //定义了5个字符串常量
 public static String SUCCESS ="success";
  public static String ERROR ="error";
  public static String NONE="none";
  public static String INPUT ="input";
  public static String LOGIN ="login";

 //定义抽象方法execute,用来处理请求
  pubilc String execute() throws Exception;
}

 

这里定义的5个字符串常量和一个抽象方法execute有以下两个优点:1是可以直接返回SUCCESS等常量,不是返回success字符串,可以起到规范代码的作用,而且可以避免出现拼写错误。2是实现Action接口,就必须实现Action接口中的execute方法,从而避免了开发人员忘记定义execute方法,或者由于拼写错误带来的麻烦。

 

实现Action接口类:LoginAction2.java

package action;
import com.LoginCheck;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;

public class LoginAction2 implements Action{
	private String uname;
	private String upassword;
	
	//获得uname值
	public String getUname() {
		return uname;
	}
	
	//设置uname值
	public void setUname(String uname) {
		this.uname = uname;
	}
	
	//获得password值
	public String getUpassword() {
		return upassword;
	}
	
	//设置password值
	public void setUpassword(String upassword) {
		this.upassword = upassword;
	}
	
	public String execute() throws Exception {
		//new一个LoginCheck对象
		LoginCheck lc = new LoginCheck();
		//调用业务逻辑组件的判断功能来判断
		if(lc.isLogin(getUname(),getUpassword())){
			//如果为合法用户,在session范围中添加属性login,其属性值为true,
			ActionContext.getContext().getSession().put("login", "true");
			return SUCCESS;
		}else{
			
			return ERROR;
		}
	}
}

 同理:Action配置只需在上面的struts.xml中修改action标记中的class属性值为LoginAction2的全名。

 

3、继承ActionSupport类:ActionSupport类定义了相应的方法。我们可以直接使用或者重载ActionSupport中的相应方法来完成更多的功能实现。如输入校验public void validate()等。

实现输入校验的Action:LoginAction3.java

package action;
import com.LoginCheck;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction3  extends ActionSupport {
	private String uname;
	private String upassword;
	
	//获得uname值
	public String getUname() {
		return uname;
	}
	
	//设置uname值
	public void setUname(String uname) {
		this.uname = uname;
	}
	
	//获得password值
	public String getUpassword() {
		return upassword;
	}
	
	//设置password值
	public void setUpassword(String upassword) {
		this.upassword = upassword;
	}
	//执行输入校验
	public void validate() {
		//如果用户名为null,或者为空的话,那么提示错误信息
		if(getUname() == null || "".equals(getUname().trim())){
			this.addFieldError("uname", this.getText("username.required"));
		}
		
		//如果密码为null,或者为空的话,那么提示错误信息
		if(getUpassword() == null || "".equals(getUpassword().trim())){
			this.addFieldError("upassword", this.getText("password.required"));
		}
	}
	public String execute() throws Exception {
		//new一个LoginCheck对象
		LoginCheck lc = new LoginCheck();
		//调用业务逻辑组件的判断功能来判断
		if(lc.isLogin(getUname(),getUpassword())){
			//如果为合法用户,在session范围中添加属性login,其属性值为true,
			ActionContext.getContext().getSession().put("login", "true");
			return "success";
		}else{
			
			return "failure";
		}
	}
}

 

我们重载了validate方法来进行输入校验。因为校验失败后,页面将跳转到input对应的视图资源页面,所以必须在struts.xml中配置input逻辑视图对应的视图资源(一般为登录页面login.jsp)

struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<!-- struts为配置文件根元素-->
<struts>
	<!-- Action必须放在指定的包名空间中-->
	<package name="struts2" extends="struts-default">
		<action name="login" class="action.LoginAction3">
			<!-- 定义处理结果与视图资源之间的关系-->
			<result name="success">/login_success.jsp</result>
			<result name="error">/login_failure.jsp</result>
			<result name="input">/login.jsp</result>
		</action>
	</package>
</struts>

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值