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

Struts2教程 - 使用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/index.php/category/thread

3
1
分享到:
评论

相关推荐

    struts教程1-Action与Struts导航

    提供的"chapter2.ppt"可能是关于第二章(Action与Struts导航)的PPT教程,涵盖详细的概念、示例和步骤。而"struts_lesson2.txt"可能包含额外的文字说明或代码示例,帮助理解和应用所学知识。 总结,Struts的Action...

    struts-2.3.34-all.zip

    6. **OGNL(Object-Graph Navigation Language)**:Struts2使用OGNL作为表达式语言,用于在Action和视图之间传递数据。 7. **插件体系**:Struts2支持丰富的插件机制,如Tiles用于布局管理,Freemarker或Velocity...

    struts-1.3.8-lib(new)

    1. **struts-core.jar**:这是Struts的核心库,包含了Action类、Form Beans、RequestProcessor以及Dispatcher等核心组件。 2. **struts-bean.jar**:提供Bean相关的标签库,如logic和html标签。 3. **struts-...

    Struts2.0.11-lib

    3. **OGNL(Object-Graph Navigation Language)**:Struts2使用OGNL作为默认表达式语言,用于在Action和视图之间传递数据。开发者可以通过OGNL表达式轻松访问对象属性和调用方法。 4. **插件系统**:Struts2具有...

    struts-2.2.3-lib.zip struts2.jar 全部jar包

    Struts2是一个强大的Java web应用程序框架,用于构建和管理MVC(模型-视图-控制器)架构的应用程序。它的核心是Action和Result,提供了一种更有效、更灵活的方式来处理HTTP请求和响应。Struts2的2.2.3版本是在其发展...

    struts2-2.3.32-all

    Struts2是一个非常著名的Java Web开发框架,它提供了一种模型-视图-控制器(MVC)架构,便于开发者创建动态、数据驱动的Web应用程序。标题中的"struts2-2.3.32-all"指的是Struts2框架的2.3.32版本的完整包,通常包含...

    Struts-2.0.12-lib

    9. **javassist.jar**:一个字节码操作库,Struts 2使用它来实现运行时的AOP(面向切面编程)。 10. **commons-logging.jar**,`log4j.jar`等:日志处理库,帮助开发者跟踪和调试应用。 11. **其他的依赖库**,如`...

    Struts2讲义-作者:吴峻申

    - **使用Action类控制导航业务数据**: - Action类是Struts2中最核心的部分,负责处理具体的业务逻辑。 - 开发者需要在Action类中定义业务逻辑,并返回一个结果字符串来决定下一步的操作。 - **使用ActionSupport...

    Struts2API-javasnake

    1. **Action**:Action是Struts2的核心概念,它是业务逻辑的载体,处理用户请求并返回结果。开发者需要创建Action类,实现`com.opensymphony.xwork2.Action`接口或其子接口,如`ActionSupport`。 2. **...

    struts2版本 2.1.6 必须的jar包 和 web.xml 文件的修改

    5. **ognl.jar** - 对象-图形导航语言,Struts2中用于表达式语言和数据绑定。 6. **freemarker.jar** - 支持FreeMarker模板引擎,用于生成动态HTML或其他格式的输出。 7. **struts2-json-plugin.jar** - 提供JSON...

    struts-2.3.24-lib

    3. **OGNL库**:如`ognl.jar`,用于对象图形导航语言,是Struts 2中用于表达式语言的主要组件,用于访问和修改模型对象的属性。 4. **Freemarker库**:如`freemarker.jar`,是Struts 2默认的视图技术,用于生成动态...

    李兴华\struts\45-使用Struts _ DAO _ Hibernate完成分页

    标题 "李兴华\struts\45-使用Struts _ DAO _ Hibernate完成分页" 暗示了这是一个关于使用Struts、DAO(数据访问对象)模式和Hibernate ORM框架来实现Web应用中的分页功能的教程。描述与标签与标题相同,进一步确认了...

    struts2-easyui.

    Struts2是一个强大的MVC(模型-视图-控制器)框架,它被广泛应用于Java Web开发中,提供了灵活的控制层结构,使得开发者能够更好地组织和处理业务逻辑。EasyUI则是一个基于jQuery的前端UI库,它为Web应用提供了丰富...

    struts2--3.Ognl与值栈

    当用户提交表单数据时,Struts2会使用OGNL将这些数据绑定到值栈中的Action对象。然后,Action执行业务逻辑,处理完成后,结果再次通过OGNL解析并推入值栈,供视图层展示。这种设计使得开发者可以专注于业务逻辑,而...

    struts2-057-exp

    该漏洞是由于Struts2的OGNL(Object-Graph Navigation Language)表达式处理不当导致的,OGNL是一种强大的脚本语言,用于在对象图中导航和操作数据。 3. **漏洞原理** 当用户提交的HTTP请求包含特定的OGNL表达式时...

    struts-2.3.34-lib

    使用Struts 2开发时,开发者需要创建Action类,通过注解或XML配置文件定义Action映射、结果类型和拦截器链。在处理请求时,Struts 2的Filter会拦截请求,根据配置信息找到相应的Action,调用其方法,并将结果传递给...

    struts2讲义 struts2讲义struts2讲义struts2讲义struts2讲义

    - **使用Action类控制导航业务数据**: - Action类是Struts2中的核心组件之一,负责处理用户的请求并返回相应的结果。 - Action类通常需要实现`Action`接口或继承`ActionSupport`类。 - Action类中可以包含业务...

    struts2常用的类包

    本压缩包包含了13个Struts2框架中常用的类包,对于初学者和学生来说,掌握这些类包将对理解Struts2的工作原理及其核心功能大有裨益。 1. **struts2-core**: 这是Struts2的核心库,包含了框架的基础组件。如Action、...

Global site tag (gtag.js) - Google Analytics