7.10--SSH学习之Struts2 Action配置

在说struts2之前当然要先下载好其框架了,官网有推荐
压缩包含:
apps:使用struts开发的一些demo
src:一个示例
docs:文档
lib:jar包


三种创建Action的方式

  1. 创建普通类,编写execute()方法
  2. 创建Action类,实现Action接口
  3. 创建Action类,继承ActionSupport类

    示例一:
public class FirstAction {

    public String execute()throws Exception{
        System.out.println("in FirstAction method execute()");
        return "success";
    }

}


示例二:

public class SecondAction implements Action {

    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        System.out.println("in SecondAction method execute()");
        return SUCCESS;
    }

}


示例三:

public class ThirdAction extends ActionSupport {

    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        System.out.println("in ThirdAction method execute()");
        return "success";
    }

}

三种调用Action方法的方式

  1. 调用execute()方法响应客户端请求
  2. 动态方法调用
  3. 调用指定名字的方法响应客户端请求, 一个Action 类可包含多个方法,最好是3-5个

    struts.xml
<!-- 动态方法盗用 -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    <constant name="struts.devMode" value="true" />

    <package name="default" namespace="/" extends="struts-default">
        <!-- 第一种调用方式,execute()方法,如后面有method="",则不调用默认execute().而调用
             method指定的方法              -->
        <action name="first" class="com.su.web.action.FirstAction">
            <result type="dispatcher" name="success">/success.jsp</result>
        </action>

        <action name="stu" class="com.su.web.action.StudentAction">
            <result type="dispatcher" name="success">/success.jsp</result>
        </action>

        <!-- 第二种调用方式,动态调用      stu!addStudent,调用StudentAction类中的addStudent方法-->
        <action name="addStu" class="com.su.web.action.StudentAction" method="addStudent">
            <result type="dispatcher" name="success">/success.jsp</result>
        </action>

        <action name="updateStu" class="com.su.web.action.StudentAction" method="updateStudent">
            <result type="dispatcher" name="success">/success.jsp</result>
        </action>

        <action name="deleteStu" class="com.su.web.action.StudentAction" method="deleteStudent">
            <result type="dispatcher" name="success">/success.jsp</result>
        </action>


        <!-- 第三种调用方式,调用指定的方法 ,stu_addStudent,后面的{1}中为addStudent,也称为占位符调用-->
        <action name="stu_*" class="com.su.web.action.StudentAction" method="{1}">
            <result type="dispatcher" name="success">/success_{1}.jsp</result>
        </action>
        <!-- 
            后缀有两个时,可往后加
        <action name="stu_*_*" class="com.su.web.action.StudentAction" method="{1}_{2}">
            <result type="dispatcher" name="success">/success_{1}_{2}.jsp</result>
        </action>

         -->


示例一:

 <form action="first" method="post">
        <input type="submit" value="提交">
    </form>


示例二:

<form action="stu!addStudent" method="post">
        <input type="submit" value="提交">
    </form>


示例三:

form action="stu_addStudent" method="post">
        <input type="submit" value="提交">
    </form>

三种接收表单数据的方式

  1. Action的普通属性传参
  2. Action对象属性传参
  3. ModekDriven传参(缺点是只能由一个实体)

示例一:

public class UserAction extends ActionSupport {
    //普通属性传参
        private String userName;
        private String userPwd;

        public String getUserName() {
            return userName;
        }

        public void setUserName(String userName) {
            this.userName = userName;
        }

        public String getUserPwd() {
            return userPwd;
        }

        public void setUserPwd(String userPwd) {
            this.userPwd = userPwd;
        }

        public String execute() throws Exception{
            System.out.println("in execute!!!");
            System.out.println(userName);
            System.out.println(userPwd);
            return "success";
        }

}


示例二:

public class UserTwoAction extends ActionSupport{
    //对象属性传参
        private User user;
        public User getUser() {
            return user;
        }
        public void setUser(User user) {
            this.user = user;
        }

        public String execute() throws Exception{
            System.out.println("in execute!!!");
            System.out.println(user.getUserName());
            System.out.println(user.getUserPwd());
            ActionContext.getContext().put("message", "!!!密码或用户名错误!!!");
            return "success";
        }

        public String userlogin() throws Exception{
            System.out.println("in userlogin!!!");
            System.out.println(user.getUserName());
            System.out.println(user.getUserPwd());
            if(user.getUserName().equals("susu") && user.getUserPwd().equals("1111")){
                ActionContext.getContext().put("message", "!!!登录成功!!!");
                return "success";
            }
            return "nextAction";
        }
}


示例三:

    //ModelDriven传参
    private User user= new User();

    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }

    //@Override
    public User getModel() {
        // TODO Auto-generated method stub
        return user;
    }

    public String userlogin() throws Exception{
        System.out.println("in userlogin!!!");
        System.out.println(user.getUserName());
        System.out.println(user.getUserPwd());

        return "success";
    }

}


表单JSP页面

  <body>
    <form action="user_userlogin" method="post">
        <!-- 普通属性传参 -->
        <!--  用户名:<input type="text" name="userName">
        密&nbsp;&nbsp;码:<input type="password" name="userPwd">
        <input type="submit" value="登录">-->

        <!-- 对象属性传参,表单元素的名字就是:Action的属性名.Action属性的属性名 -->
        <!--  用户名:<input type="text" name="user.userName">
        密&nbsp;&nbsp;码:<input type="password" name="user.userPwd">
        <input type="submit" value="登录">-->


        用户名:<input type="text" name="userName">
        密&nbsp;&nbsp;码:<input type="password" name="userPwd">
        <input type="submit" value="登录">

    </form>
  </body>

四种Action请求下一个资源的方法

  1. dispatcher转发,Action To JSP
  2. chain转发,Action To Action
  3. redirect重定向,Action To JSP
  4. redirectAction 重定向,Action To Action
PS:转发:在原JSP页面提交的用户名和密码之类的信息不丢失
    重定向:则丢失


示例一:

        <action name="userTwo" class="com.su.web.action.UserTwoAction" >
            <result type="dispatcher" name="success">/indexRedict.jsp</result>
        </action>


示例二:

        <action name="userTwo_*" class="com.su.web.action.UserTwoAction" method="{1}">
            <result type="chain" name="nextAction">userTwo</result>
            <result type="dispatcher" name="success">/success_user.jsp</result>
        </action>


示例三:

        <action name="userTwo_*" class="com.su.web.action.UserTwoAction" method="{1}">
            <result type="redirectAction" name="nextAction">userTwo</result>
            <result type="redirect" name="success">/success_user.jsp</result>
        </action>

Author:su1573

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ssy03092919

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值