`
勤业思行
  • 浏览: 83785 次
  • 性别: Icon_minigender_1
  • 来自: 贵阳
社区版块
存档分类
最新评论

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>

 

 

2
0
分享到:
评论

相关推荐

    Struts 2实战 struts2 in Action

    根据提供的文件信息,我们可以从《Struts 2实战 Struts2 in Action》这一书籍中提炼出与Struts 2框架相关的多个重要知识点。Struts 2是一个基于Java的开源Web应用框架,它继承了Struts 1的优点并进行了大量的改进和...

    struts2 action的三种访问方式

    本篇文章将详细介绍Struts2 Action的三种访问方式:传统方式、通配符方式和动态方式。 1. **传统方式(Static Dispatch)** 传统方式是最基础的Action访问方式,通过硬编码URL来映射Action。在`struts.xml`配置...

    Struts2 in action(struts2实战)

    - Struts2拥有丰富的插件库,如Struts2-dojo-plugin、Struts2-convention-plugin等,可以方便地集成第三方库。 7. **国际化与本地化**: - Struts2提供对多语言的支持,通过资源包(Properties文件)实现内容的...

    Struts2 in action

    #### 三、Struts2的工作流程 1. **用户发起请求**:用户通过浏览器向服务器发送请求。 2. **前端控制器拦截**:所有请求首先被Struts2的前端控制器(FilterDispatcher)拦截。 3. **查找并执行Action**:根据请求中...

    Struts 2实战 Struts 2 in action 的中文版

    根据提供的信息,我们可以推断出这是一本关于Struts 2框架的书籍——《Struts 2实战 Struts 2 in action 的中文版》。本书主要介绍了Struts 2框架的相关概念、工作原理以及实际应用案例等内容。接下来,我们将根据...

    struts2 result转向到action

    在 Struts2 中使用 `redirect-action` 来实现 Action 之间的跳转是一种常见的做法,特别是在需要按顺序执行多个 Action 的业务场景中。通过这种方式,不仅可以保持应用程序的良好结构,还能有效地组织业务流程。同时...

    Struts2实战(Struts2 In Action中文版)

    **Struts2实战——《Struts2 In Action中文版》** 《Struts2 In Action》是一本专为Java开发者设计的实战指南,旨在深入解析Struts2框架的使用与实践。Struts2作为一款强大的MVC(Model-View-Controller)框架,极...

    struts2 Action 包 命名空间 servlet API

    Struts2通过FilterDispatcher这个Servlet过滤器来拦截所有到达服务器的请求,判断是否需要由Struts2框架处理,如果是,则根据配置的Action映射调用相应的execute()方法。 Struts2的包结构清晰,每个包都有其特定的...

    struts 2 action 动态调用

    ### Struts 2 Action 动态方法调用详解 #### 一、引言 在Struts 2框架中,Action动态方法调用是一项非常实用的功能。它允许开发者在一个Action类中定义多个处理方法,而不仅仅局限于传统的`execute()`方法。这种...

    Struts的小列子三个Action

    在描述中提到的"三个Action"可能分别代表了三种不同的用户请求处理逻辑。每个Action类对应一个特定的用户交互,负责接收HTTP请求,处理数据,然后转发到相应的视图进行展示。 1. **Action类的创建**:在Struts中,...

    Struts2 in action中文版+配套源代码

    "Struts2 in Action" 是一本深入探讨Struts2框架的专业书籍,旨在帮助开发者掌握这一框架的核心概念和实践技巧。这本书的中文版不仅提供了理论知识,还附带有配套的源代码,方便读者进行实践操作,加深理解。 ...

    Struts2 in action 中文版

    《Struts2 in Action》中文版是一本深入探讨Struts2框架的专业书籍,该书不仅提供了详尽的理论知识,还包含了大量的实战案例,对于希望掌握Struts2框架的开发者来说,是一本不可或缺的参考书。 ### Struts2框架概览...

    struts2 in action 源码

    struts2 in action 源码

    struts2 Action 电子书 下载

    实现Struts2的Action可以通过两种途径:实现框架提供的`Action`接口或继承`ActionSupport`基类。不论采用哪种方式,Action类都需实现`execute()`方法,这是Action的核心方法,用于处理业务逻辑和请求响应。 #### ...

    Struts2 in action 中文版.pdf

    Struts2是Apache软件基金会旗下的一个开源项目,它是MVC(Model-View-Controller)架构模式的一种实现,旨在简化Web应用程序的开发流程,提高代码的可维护性和可扩展性。 本书首先介绍了Struts2的基础概念和设计...

    struts2注解配置Action及拦截器几种不同方式写法对应的路径指向.docx

    "Struts2 注解配置 Action 及拦截器几种不同方式写法对应的路径指向" Struts2 注解配置 Action 及拦截器是 Struts2 框架中的核心组件之一,负责处理用户请求并返回响应结果。下面,我们将通过详细的解释和示例代码...

    Struts2中Action接收参数的方法

    Struts2 中 Action 接收参数的方法 Struts2 框架中,Action 组件可以通过多种方式接收参数,这些方式包括使用 Action 的属性、使用 DomainModel 和使用 ModelDriven。下面将详细介绍这些方法: 使用 Action 的属性...

    struts2 in Action

    如果你想自学struts2,此文档是很好的自学宝典,经典struts2 in Action,能帮你建立整体的struts2思想,你还在犹豫什么

    Struts2 三种下载方法 源码(有图有真相)

    为了帮助理解,`三种下载方式.png`很可能是展示了这三种方法在Web页面上的呈现效果,而`13Struts2DownLoad`可能包含了具体实现这些功能的源代码文件。研究这些文件将有助于深入理解Struts2文件下载的实现过程。 总...

Global site tag (gtag.js) - Google Analytics