【SSH快速进阶】——struts2调用action的三种方式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/48066167

经过前段时间对struts2的学习与实践,总结了一下在struts2中调用action的三种方式。

1、直接调用


我前面的博客【SSH快速进阶】系列第一篇《【SSH快速进阶】——struts2简单的实例》采用的就是这种方式。

有两种情景:

(1) 在form中指定访问的action

<form action="userLogin">
    username:<input type="text" name="username" /><br>
    password:<input type="password" name="password" /><br>
    <input type="submit" value="submit" /><br>
 </form>   

struts.xml中的配置为:

    <struts>
        <package name="struts2" extends="struts-default">
            <action name="userLogin" class="com.danny.user.action.UserAction">
                <result name="success">/success.jsp</result>
                <result name="error">/error.jsp</result>
            </action>
        </package>          
    </struts>

这时,页面点击提交会直接访问UserAction.java中的execute方法:

    public String execute() {
        if("admin".equals(username) && "admin".equals(password))
        {
            return "success";
        }else{
            return "error";
        }
    }

(2) 直接在浏览器通过地址访问action:

比如输入 http://localhost:8080/struts2/index.action

对应的struts.xml为:

    <struts>
        <package name="struts2" extends="struts-default">
            <action name="index" class="com.danny.user.action.IndexAction">
                <result name="index">/index.jsp</result>
            </action>
        </package>          
    </struts>

这时,也会直接访问IndexAction.java中的execute方法:

public String execute() {
        return "index";
    }

2、在配置文件中指定action的方法名称


通过第一种访问action的方式可以发现一个弊端,每个action中只有一个execute方法,如果我想在一个action中处理多个请求呢? 下面这种方法就派上用场啦!

比如注册和登陆这两个场景,想在同一个action中处理,那么struts.xml可以这样配:

    <struts>
        <package name="struts2" extends="struts-default">
            <!--处理用户注册-->
            <action name="userRegister" class="com.danny.user.action.UserAction" method="Register">
                <result name="success">/registersuccess.jsp</result>
            </action>
            <!--处理用户登录-->
            <action name="userLogin" class="com.danny.user.action.UserAction" method="Login">
                <result name="success">/loginsuccess.jsp</result>
            </action>           
        </package>          
    </struts>

这样,在同一个action—UserAction中可以写两个方法 Register和Login:

public String Register(){
    //处理注册
    return "registersuccess";
}
public String Login(){
    //处理登录
    return "loginsuccess";
}

然后我们处理注册时,调用userRegister这个action;处理登录时,调用userLogin这个action即可。

3、通配符方式的调用


看了上面第二种方法,还会有一个问题:处理一个请求除了再action中建立相应的方法外,还需要在struts.xml中配置一个对应的action标签,这样下来,一个系统中会有多少个调用啊?struts.xml的复杂程度大大提高了。这是可以用这种方法来简化struts.xml的复杂程度。

同样以上面的注册和登录两个场景来举例。

struts.xml中可以这样配置:

    <struts>
        <package name="struts2" extends="struts-default">
            <action name="user_*" class="com.danny.user.action.UserAction" method="{1}">
                <result name="registersuccess">/registersuccess.jsp</result>
                <result name="loginsuccess">/loginsuccess.jsp</result>
            </action>
        </package>          
    </struts>

UserAction不变,还是对应的Register和Login两个方法。

在action的name属性中,user_后面是 * 号,method的值是{1},代表前面第一个通配符的内容,当访问user_*时,会调用对应action(这里是UserAction)中名为 * 的方法。

比如处理用户注册时访问user_Register,那么调用的就是UserAction中的Register方法;处理用户登录时访问user_Login,那么调用的就是UserAction中的Login方法。

这种方法的好处就是,可以简化struts.xml的配置,同时还可以统一系统开发的标准,比如系统中处理用户的各种请求统一由名为“ user_* ”的action来处理,处理订单的各种请求统一由名为“ order_* “的action来处理 【 转载请注明出处——胡玉洋《【SSH快速进阶】——struts2调用action的三种方式》】

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java思维导图

Web 安全漏洞之 XSS 攻击

编者说:作为JS系工程师接触最多的漏洞我想就是 XSS 漏洞了,然鹅并不是所有的同学对其都有一个清晰的认识。今天我们请来了@卢士杰 同学为我们分享他眼中的 XS...

11520
来自专栏逆向技术

32位汇编第六讲,OllyDbg逆向植物大战僵尸,快速定位阳光基址

      32位汇编第六讲,OllyDbg逆向植物大战僵尸,快速定位阳光基址 一丶基址,随机基址的理解 首先,全局变量的地址,我们都知道是固定的,是在PE文件...

38170
来自专栏vue学习

10、less的引用及公共变量的抽离

less是什么自然不用多言,乃一个css预编译器,可以扩展css语言,添加功能如如允许变量(variables),混合(mixins),函数(functions...

12710
来自专栏macOS 开发学习

Mac OSX 给现有的应用追加基于文档的功能

在Xcode中创建Cocoa Application 工程时,通常有两种选择类型:<code>基于文档的Application</code> 和<code>非文...

9920
来自专栏崔庆才的专栏

分析Ajax爬取今日头条街拍美图

17340
来自专栏从零开始学自动化测试

python测试开发django-4.获取url参数和name的作用

如打开博客园按时间分类标签页【https://www.cnblogs.com/yoyoketang/archive/2018/10.html】,里面是时间参数是...

8010
来自专栏北京马哥教育

案例+解读,来自有道大神的17个常用Linux命令深度解析

命令后带(Mac)标记的,表示该命令在Mac OSX下测试,其它的在Debian下测试。 1. grep命令 文本查找命令, 能够使用正则表达式的方式搜索文本...

34050
来自专栏老九学堂

编码秘籍,Java程序员必看的调试技巧

调试可以帮助我们识别和解决应用程序缺陷,老九君下面介绍的调试方法基本都是通用的,有了下面的这些技巧在开发中会让我们在编程中事半功倍,避免浪费时间! 1.条件断点...

41260
来自专栏技术之路

go微服务框架go-micro深度学习(二) 入门例子

    上一篇帖子简单介绍了go-micro的整体框架结构,这一篇主要写go-micro使用方式的例子,中间会穿插一些go-micro的源码,和调用流程图,帮大...

1.9K50
来自专栏逸鹏说道

Git异常:Cannot delete the branch 'test&' which you are currently on

GitHub实战系列汇总:http://www.cnblogs.com/dunitian/p/5038719.html ————————————————————...

30160

扫码关注云+社区

领取腾讯云代金券