Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 491|回复: 0

[struts学习]Struts2讲义(3):用Action类控制导航业务数据

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-11 04:06:27 | 显示全部楼层 |阅读模式
    Struts2中Action充当着一个关键的角色。它解决了如何把JSP页面上的数据根据实际开发项目中具体的业务逻辑来进行处理的问题。
       

       

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

       
         如何使用Execute方法处理业务逻辑。
         
    1、 如何处理Form表单数据。
         
    2、 HTTP的session对象在Action主要使用方式。
         
    3、ActionMapping对象在配置文件中处理流程。
         
        演示代码
       

         
          
          
           java 代码
          
          
          
          <!-------------------------- 文件 名: 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;   
              }   
          }   
          
         
        <!--------------------------文件名: 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;
            }
    }[/code] Action类映射配置。
       

         
          
          
           Java 代码
          
          
          
          <!------------------------------------ 文件名: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>   
          
         
        <!------------------------------------文件名: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>[/code]
        代码解释
       
    (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中返回的也是一个普通字符串,此字符串内容就是之前所述的导航页面的唯一标识。
       

       
    代码中用户名和密码两个变量通过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,然后进行相 应业务逻辑处理。
       

       
    复制代码
      


    源码下载:http://www.zzsz.hnzz.net/kj/cwb/dir3/C03.rar
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-26 07:25 , Processed in 0.411673 second(s), 48 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表