`
xpp02
  • 浏览: 1020134 次
社区版块
存档分类
最新评论

Struts2教程 - 3.3使用Action类控制导航业务数据

阅读更多

Struts2 Action 充当着一个关键的角色。它解决了如何把 JSP 页面上的数据根据实际开发项目中具体的业务逻辑来进行处理的问题。

技术要点

本节代码使用登录功能作为例子,详细解析 LoginAction 类。

=    如何使用 Execute 方法处理业务逻辑。

=    如何处理 Form 表单数据。

=    HTTP session 对象在 Action 主要使用方式。

=    ActionMapping 对象配置文件中处理流程。

演示代码

<!------------------------------------------- 文件名:   LoginAction .java-------------------------------->

public class LoginAction {

// Action 类公用私有变量,用来做页面导航标志

private static String FORWARD = null;

// 用户名属性

private String username;

// 密码属性

private String password;

// 取得用户名值

public String getUsername() {

           return username;

}

// 设置用户名值

public void setUsername(String username) {

           this.username = username;

}

// 取得密码值

public String getPassword() {

           return password;

}

// 设置密码值

public void setPassword(String password) {

           this.password = password;

}

 

public String execute() throws Exception {

           username = getUsername();            // 属性值即 JSP 页面上输入的值

           password = getPassword();   // 属性值即 JSP 页面上输入的值

 

           try {

                    //  判断输入值是否是空对象或没有输入

                    if (username != null && !username.equals("") && password != null

                                       && !password.equals("")) {

                             ActionContext.getContext().getSession().put("user", getUsername());

                    //  根据标志内容导航到操作成功页面

                             FORWARD = "success";

                    } else {

                    //  根据标志内容导航到操作失败页面

                             FORWARD = "input";

                    }

           } catch (Exception ex) {

                    ex.printStackTrace();

           }

           return FORWARD;

}

}

Action 类映射配置。

<!------------------------------------------- 文件名: struts.xml-------------------------------->

<action name="Login"  class="com.example.struts.action.LoginAction">

           <result name="input">/jsp/login.jsp</result>

           <result name="success">/jsp/success.jsp</result>

</action>

代码解释

1 Struts2 中每一具体的 Action 类其实都是将 Struts1 中的 FormBean 类和 Action 类代码都放在一起,所以看起来就是一个简单的 JavaBean 类(按照现在流行说法是 POJO Plains Ordinary Java Object 。无格式普通 Java 对象)。比如代码中用户名和密码两个变量都是字符串类型变量,使用 get set 方法可以从 JSP 页面上得到输入的值内容。

2 Action 类中最主要的方法为 execute 方法, Struts1 中它一共有四个参数。返回一个 ActionForward 对象。而在 Struts2 中为了不侵入 Servlet 的类和方法,同时为了更好的解耦,符合现在 Web 项目松耦合开发理念,所以这四个参数都已经不用了。 Struts2 中返回的也是一个普通字符串,此字符串内容就是之前所述的导航页面的唯一标识。

2 )代码中用户名和密码两个变量通过 get 方法得到 JSP 页面上输入的值内容,然后判断这两个变量是否为空对象或者字符串内容为“”,即没有输入任何数据。如果为空或者没有输入任何数据则 mapForward 赋值为“ input ”,这样就导航到错误页面。反之,则 mapForward 赋值为“ success ”,导航到成功页面。

细心的读者可以发现 LoginAction 类中给它赋的   success ”、“ input ”两个值在 struts.xml <action> 元素的 < result > 属性中都有定义。这就是之前所说的唯一标识指向 URL 中的 JSP 页面。

注意:之所以操作失败后 mapForward 赋值为“ input ”,而不是“ error ”或“ failure ”是为了 Struts2 校验使用考虑,具体原因见下节。

3 )用户名变量的值在实际项目中有可能会被用到,因此把它放入 session 属性里。注意:该 session hibernate 中的 session 是两回事情,它是 HTTP 请求中的 session 对象, getAttribute 方法和 setAttribute 方法是开发中经常用到的。它的应用范围是整个当前 HTTP 请求中,所以当用 setAttribute 方法将对像值放入后,可以在任何业务逻辑需要使用对象值时候用 getAttribute 方法取出。至于 hibernate 中的 session 我们在之后章节中另外具体讲述。在代码里 Struts2 session 也封装起来。通过 Struts2 包里自带的 ActionContext 类来调用,首先先得到当前 HTTP 应用中内容,然后通过 getSession 方法得到 Sessions 对象,但 Struts2 是用一个 map 对象来标识,也就是说 getSession 方法得到是一个 Sessions 对象封装处理后的结果。所以代码中可以使用 put map 的方法,而不是 setAttribute 方法来将用户名变量值放入 session

4 Action 类的每一个实例都是和 struts.xml 中每一个 <action> 元素对应。这些 struts.xml 中的配置信息其实都是在系统开始运行时候读入内存,以供系统运行时候使用。比如此代码中通过 name 中的“ Login ”提交请求信息, control 层将信息传递给 LoginAction 处理, LoginAction 实例的 execute 方法被调用,将所对应的 Form 数据传入 LoginAction, 然后进行相应业务逻辑处理。

更多信息请查看 java进阶网 http://www.javady.com

2
0
分享到:
评论

相关推荐

    asm-3.3.jar,asm-commons-3.3,asm-tree-3.3.jar

    struts2.3开发依赖的asm包.不然有以下报错java.lang.NoClassDefFoundError: com/opensymphony/xwork2/util/finder/ClassFinder$InfoBuildingVisitor,导入asm-3.3.jar,asm-commons-3.3,asm-tree-3.3.jar即可

    asm-3.3,asm-commons-3.3,asm-tree-3.3.jar

    struts2.3开发依赖的asm包.不然有以下报错java.lang.NoClassDefFoundError: com/opensymphony/xwork2/util/finder/ClassFinder$InfoBuildingVisitor,导入asm-3.3.jar,asm-commons-3.3,asm-tree-3.3.jar即可

    升级struts2.3.32 需要的jar:asm-3.3.jar,asm-commons-3.3,asm-tree-3.3.jar

    升级struts2.3.32版本的时候依赖的asm包.不然有以下报错java.lang.NoClassDefFoundError: com/opensymphony/xwork2/util/finder/ClassFinder$InfoBuildingVisitor,导入asm-3.3.jar,asm-commons-3.3,asm-tree-3.3.jar...

    struts-2.3.30-all所有jar包

    struts-core-1.3.10.jar, struts2-cdi-plugin-2.3.30.jar, struts2-codebehind-plugin-2.3.30.jar, struts2-config-browser-plugin-2.3.30.jar, struts2-convention-plugin-2.3.30.jar, struts2-core-2.3.30.jar, ...

    struts2-core.jar

    struts2-core-2.0.1.jar, struts2-core-2.0.11.1.jar, struts2-core-2.0.11.2.jar, struts2-core-2.0.11.jar, struts2-core-2.0.12.jar, struts2-core-2.0.14.jar, struts2-core-2.0.5.jar, struts2-core-2.0.6.jar,...

    andromda-bpm4struts-cartridge-3.3.jar

    官方版本,亲测可用

    struts-2.5.2-all所有jar包

    struts2-bean-validation-plugin-2.5.2.jar, struts2-cdi-plugin-2.5.2.jar, struts2-config-browser-plugin-2.5.2.jar, struts2-convention-plugin-2.5.2.jar, struts2-core-2.5.2.jar, struts2-dwr-plugin-2.5.2....

    Struts2_s2-016&017&ognl2.6.11_patch漏洞补丁

    -- 为修复struts2 s2-016、s2-017漏洞,重写DefaultActionMapper --&gt; &lt;bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="myDefaultActionMapper" class=...

    struts2-spring-plugin-2.3.15.2.jar ; struts2-json-plugin-2.3.16.3.jar

    struts2-spring-plugin-2.3.15.2.jar ; struts2-json-plugin-2.3.16.3.jarstruts2-spring-plugin-2.3.15.2.jar ; struts2-json-plugin-2.3.16.3.jar

    struts-2.3.24-apps.zip包测试Struts2 S2-048高危漏洞

    2017年7月7日,Apache Struts发布最新的安全公告,Apache ...攻击者可以构造恶意的字段值(value)通过Struts2的struts2-struts1-plugin的插件传递给被攻击主机,从而实现远程代码执行攻击,直接获取远程主机的控制权限。

    struts2-hibernate3.3-Oracle-无冲突

    大家在学习struts2和Hibernate框架时是不是经常为两个框架包有冲突而烦恼呢,现在我整理了一份无冲突这些包,方便大家开发使用

    struts-taglib-1.3.8.jar

    struts-taglib-1.3.8.jar struts-taglib-1.3.8.jar

    Struts2-3.24集合jar

    struts2-config-browser-plugin-2.3.24.jar, struts2-core-2.3.24.jar, struts2-jasperreports-plugin-2.3.24.jar, struts2-jfreechart-plugin-2.3.24.jar, struts2-pell-multipart-plugin-2.3.24.jar, struts2-...

    struts2--2.Action

    struts2--2.Action

    Struts2--3.Action及相关-1

    Struts2--3.Action及相关-1

    struts2 s2-045

    struts2 s2-045

    struts2开发jar包基本全部包含

    asm-3.3,asm-commons-3.3,asm-tree-3.3,c3p0-0.9.1.2,commons-dbutils-1.4,commons-fileupload-1.3,freemarker-2.3.19,commons-io-2.0.1,mysql-connector-java-5.0.8-bin,struts2-config-browser-plugin-2.3.15.1,...

    struts2-json-plugin-2.3.24-API文档-中文版.zip

    赠送jar包:struts2-json-plugin-2.3.24.jar; 赠送原API文档:struts2-json-plugin-2.3.24-javadoc.jar; 赠送源代码:struts2-json-plugin-2.3.24-sources.jar; 赠送Maven依赖信息文件:struts2-json-plugin-...

    struts2-json-plugin

    struts2-json-plugin,Struts JSON插件

    Struts1.0教程(简版)

    3.3 Struts - 8 - 4. JSP 自定义标签库 - 43 - 4.1 概述 - 43 - 4.2 Struts包含的标签库 - 44 - 4.3 在Struts应用中使用标签库 - 44 - 4.4 Struts HTML标签库 - 45 - 5. 示例 - 52 - 5.1 命名规范 - 55 - 5.2 文件 -...

Global site tag (gtag.js) - Google Analytics