一、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>
分享到:
相关推荐
根据提供的文件信息,我们可以从《Struts 2实战 Struts2 in Action》这一书籍中提炼出与Struts 2框架相关的多个重要知识点。Struts 2是一个基于Java的开源Web应用框架,它继承了Struts 1的优点并进行了大量的改进和...
本篇文章将详细介绍Struts2 Action的三种访问方式:传统方式、通配符方式和动态方式。 1. **传统方式(Static Dispatch)** 传统方式是最基础的Action访问方式,通过硬编码URL来映射Action。在`struts.xml`配置...
- Struts2拥有丰富的插件库,如Struts2-dojo-plugin、Struts2-convention-plugin等,可以方便地集成第三方库。 7. **国际化与本地化**: - Struts2提供对多语言的支持,通过资源包(Properties文件)实现内容的...
#### 三、Struts2的工作流程 1. **用户发起请求**:用户通过浏览器向服务器发送请求。 2. **前端控制器拦截**:所有请求首先被Struts2的前端控制器(FilterDispatcher)拦截。 3. **查找并执行Action**:根据请求中...
根据提供的信息,我们可以推断出这是一本关于Struts 2框架的书籍——《Struts 2实战 Struts 2 in action 的中文版》。本书主要介绍了Struts 2框架的相关概念、工作原理以及实际应用案例等内容。接下来,我们将根据...
在 Struts2 中使用 `redirect-action` 来实现 Action 之间的跳转是一种常见的做法,特别是在需要按顺序执行多个 Action 的业务场景中。通过这种方式,不仅可以保持应用程序的良好结构,还能有效地组织业务流程。同时...
**Struts2实战——《Struts2 In Action中文版》** 《Struts2 In Action》是一本专为Java开发者设计的实战指南,旨在深入解析Struts2框架的使用与实践。Struts2作为一款强大的MVC(Model-View-Controller)框架,极...
Struts2通过FilterDispatcher这个Servlet过滤器来拦截所有到达服务器的请求,判断是否需要由Struts2框架处理,如果是,则根据配置的Action映射调用相应的execute()方法。 Struts2的包结构清晰,每个包都有其特定的...
### Struts 2 Action 动态方法调用详解 #### 一、引言 在Struts 2框架中,Action动态方法调用是一项非常实用的功能。它允许开发者在一个Action类中定义多个处理方法,而不仅仅局限于传统的`execute()`方法。这种...
在描述中提到的"三个Action"可能分别代表了三种不同的用户请求处理逻辑。每个Action类对应一个特定的用户交互,负责接收HTTP请求,处理数据,然后转发到相应的视图进行展示。 1. **Action类的创建**:在Struts中,...
"Struts2 in Action" 是一本深入探讨Struts2框架的专业书籍,旨在帮助开发者掌握这一框架的核心概念和实践技巧。这本书的中文版不仅提供了理论知识,还附带有配套的源代码,方便读者进行实践操作,加深理解。 ...
《Struts2 in Action》中文版是一本深入探讨Struts2框架的专业书籍,该书不仅提供了详尽的理论知识,还包含了大量的实战案例,对于希望掌握Struts2框架的开发者来说,是一本不可或缺的参考书。 ### Struts2框架概览...
struts2 in action 源码
实现Struts2的Action可以通过两种途径:实现框架提供的`Action`接口或继承`ActionSupport`基类。不论采用哪种方式,Action类都需实现`execute()`方法,这是Action的核心方法,用于处理业务逻辑和请求响应。 #### ...
Struts2是Apache软件基金会旗下的一个开源项目,它是MVC(Model-View-Controller)架构模式的一种实现,旨在简化Web应用程序的开发流程,提高代码的可维护性和可扩展性。 本书首先介绍了Struts2的基础概念和设计...
"Struts2 注解配置 Action 及拦截器几种不同方式写法对应的路径指向" Struts2 注解配置 Action 及拦截器是 Struts2 框架中的核心组件之一,负责处理用户请求并返回响应结果。下面,我们将通过详细的解释和示例代码...
Struts2 中 Action 接收参数的方法 Struts2 框架中,Action 组件可以通过多种方式接收参数,这些方式包括使用 Action 的属性、使用 DomainModel 和使用 ModelDriven。下面将详细介绍这些方法: 使用 Action 的属性...
如果你想自学struts2,此文档是很好的自学宝典,经典struts2 in Action,能帮你建立整体的struts2思想,你还在犹豫什么
为了帮助理解,`三种下载方式.png`很可能是展示了这三种方法在Web页面上的呈现效果,而`13Struts2DownLoad`可能包含了具体实现这些功能的源代码文件。研究这些文件将有助于深入理解Struts2文件下载的实现过程。 总...