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

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
分享到:
评论

相关推荐

    整合Struts2,Spring2.5,Hibernate3.3操作参考

    在Java Web开发中,Struts2、Spring和Hibernate是三个非常重要的框架,它们分别负责MVC(Model-View-Controller)模式中的控制层、业务逻辑层和服务数据访问层。这三者结合可以构建出高效、可维护的Web应用。下面...

    struts2讲义

    - **3.3 使用Action类控制导航业务数据** - **知识点**: 介绍了如何在Action类中处理业务逻辑。 - **核心内容**: - Action类是处理业务逻辑的关键组件,负责与数据库交互、数据处理等任务。 - 通过定义不同的...

    struts2讲义_吴峻申

    3.3 使用Action类控制导航业务数据 40 3.4 使用ActionSupport进行校验 42 第4章 另一Struts2核心技术:拦截器 47 4.1 拦截器在Struts2中的缺省应用 47 4.2 拦截器原理实现 50 4.3 在Struts2中配置自定义的拦截器 53 ...

    Struts2.1讲义

    - **3.3 使用Action类控制导航业务数据** - **编写Action类**:创建一个实现`Action`接口的类,重写`execute()`方法来处理具体的业务逻辑。 - **返回结果**:通过调用`Action`接口中的`SUCCESS`、`ERROR`等常量来...

    轻松入门之Struts2

    OGNL(Object-Graph Navigation Language,对象图导航语言)是Struts2使用的强大表达式语言,可以方便地访问JavaBean的属性。例如: - `#request.username`:访问请求中的`username`属性。 - `#session.user`:访问...

    strus2讲义

    - **3.3 使用Action类控制导航业务数据** - **知识点**: Action类是Struts2中处理用户请求的核心类,包含了具体的业务逻辑处理。 - **重要性**: 设计良好的Action类可以有效分离业务逻辑和表示层。 - **3.4 使用...

    J2EE电子商务系统开发从入门到精通--基于Struts和Hibernate技术实现

    - `ActionForward`类用于表示控制器返回的结果,可以指定重定向或转发到的资源。 - **2.4.3 ActionMapping类** - `ActionMapping`类用于定义一个请求到`Action`实例的映射关系,包括路径、名称等信息。 **2.5 ...

    struts in action中文版1.2

    本书还提供了使用Struts开发实际Web应用的具体步骤和示例,包括如何搭建开发环境、编写Action类、配置文件等内容。 **2.3. 为什么需要框架** 这部分内容解释了在没有框架支持的情况下进行Web开发时常见的问题,...

    struts框架及标记库

    - **3.3 ActionMapping类**:用于映射请求URL到具体的Action,同时也存储了Action执行后的转发规则。 - **3.4 Action类**:实现具体业务逻辑的接口,负责处理请求,更新模型,并返回一个表示下一个视图的Action...

    SSH整合CRUD案例+分页功能的实现+教学文档

    8. **创建视图**:通常使用JSP页面展示数据,通过Struts2标签库与Action进行交互。 在"分页功能的实现"部分,我们需要理解如何在SSH框架中添加分页查询。这通常涉及到: 1. **添加分页参数**:在Action类中添加...

    J2EE视频教程完整版下载链接

    在教程中,学员会了解到如何定义Action类,配置struts.xml文件,以及使用Tiles进行视图管理。通过Struts,开发者可以构建出结构清晰、易于扩展的Web应用。 Oracle数据库是企业级应用中常用的数据库系统,本教程中...

    JAVA程序开发大全---上半部分

    20.7.2 定义对宠物商品信息进行数据库操作的业务逻辑类ThingsBuy 370 20.8 显示宠物新闻模块的实现 373 20.8.1 对应宠物新闻的实体类News 374 20.8.2 定义对宠物新闻进行数据库操作的业务逻辑类NewsBuy 374 20.8.3 ...

    javaweb宠物医院系统

    5. **Struts框架**:Struts框架是MVC设计模式的具体实现,通过ActionForm对象接收用户请求,Action类处理业务逻辑,然后转发到指定的JSP页面展示结果。它的配置文件(struts-config.xml)定义了URL到Action的映射,...

    SSH_Web开发架构分析和实现

    Struts通过定义一系列的Action类来处理请求,并利用配置文件(如struts.xml)来管理这些Action的映射关系。 #### 2. Spring框架 Spring框架是一个轻量级的开源Java平台,提供了广泛的基础设施支持,包括但不限于...

    MyEclipse 6 Java EE 开发中文手册

    - **编写Action类**:实现Struts Action。 - **配置Struts环境**:定义Action映射。 - **编写Hibernate实体类**:定义数据模型。 - **配置Hibernate环境**:定义映射关系。 - **编写Spring Bean**:定义Spring管理的...

Global site tag (gtag.js) - Google Analytics