Struts2之动态调用

动态调用

什么是动态调用

  • 动态调用就是一个Action类对应着多个请求,比如一个Action类中包含许多的方法,实现动态调用就是让这些方法都配上不同的URL请求映射,这个就是动态调用

好处

  • 我们知道如果一个Action类只是对应着一个URL请求,那么我们要写很多Action类,但是如果我们使用了动态调用,那么就可以减少很多的重复工作

method实现动态调用

-在struts核心配置文件详解(action)中已经详细讲解了method的用法,使用这个方式可以指定Action类中的不同的方法映射请求,那么就完成了动态调用

action名!方法名

  • 这种方式不推荐使用,要想使用的话还要开启开关,如下
    • <constant name="struts.enable.DynamicMethodInvocation" value="true" />将这个常量设置true才能使用

实现

  • 创建SimpleAction的类
    • 这个Action类中有一个login方法,我们的动态调用这个login方法,使用action名!方法名
public class SimpleAction implements Action {
    @Override
    public String  execute(){
        return SUCCESS;
    }
    //实现登录的action
    public String login(){
        System.out.println("这个是login方法......");
        return INPUT;
    }
}
​
  • struts.xml中的配置(在src目录下)
    • 开启开关
    • 配置SimpleAction这Action类
<struts>
    <!-- 开启开关,否则不能使用!的方式 -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
    <package name="test" extends="struts-default" namespace="/">
        <!-- 定义这个包下的默认处理类 -->
        <default-class-ref class="com.jsnu.struts2.controller.SimpleAction"></default-class-ref>
​
        <!-- 这个是SimpleAction的类 -->
        <action name="simple">
            <result name="success">/jsp/success.jsp</result>
            <result name="input">/jsp/input.jsp</result>
        </action>
​
    </package>
</struts>

输入地址

  • 假设项目的名称为web1,那么在地址栏中输入的url为:http://localhost:8080/web1/simple!login,注意这个感叹号一定是英文的
  • 输入成功之后我们看到可以正确跳转,那么就成功了

通配符的方式

  • 使用这种方式首先需要关闭上面开启的开关,当然如果你没有开启,那么就不用配置,因为其中默认就是关闭的
    • <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    • 这种方式是官网推荐使用
  • 在Servelt设置url的时候也使用过通配符,一般都是使用*来替代的。现在使用通配符也是一样的道理,也是可以使用动态调用的。
  • 这种方式是和method方式配合使用的,在我看来就是method方式,只不过通过通配符传参而已

实现

  • 我们还是使用上面的SimpleAction类,仍然是调用其中的login方法,不过struts.xml此时的配置文件改变了
  • struts.xml
    • 关闭开关(默认是关闭的)
    • 定义SimpleAction类的action
<struts>
    <!-- 设置为false,关闭开关,默认是关闭的,因此可以不设置  -->
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <package name="test" extends="struts-default" namespace="/">
        <!-- 定义action,其中name属性使用一个*的通配符,method={1},这个1就是用来接收第一个通配符*的内容
            假设此时输入的Simple_regist ,那么此时{1}=regist
        -->
        <action name="simple_*" class="com.jsnu.struts2.controller.SimpleAction" method="{1}">
            <result name="success">/jsp/success.jsp</result>
            <result name="input">/jsp/input.jsp</result>
        </action>
    </package>
</struts>
  • 此时如果我们的项目名称为让web1,那么输入的url为http://localhost:8080/Struts2/simple_login.action,那么就会调用SimpleAction中的login方法执行

总结

  • 推荐使用method和通配符的方式实现动态调用

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏游戏开发那些事

【Linux程序设计】之进程控制&守护进程

这个系列的博客贴的都是我大二的时候学习Linux系统高级编程时的一些实验程序,都挺简单的。

1862
来自专栏chafezhou

小说python的路径操作

1482
来自专栏编程坑太多

python os模块详解

2047
来自专栏张伟博客

双系统下Linux(ubuntu)不能进入windows的NTFS分区之挂载错误问题解决

1765
来自专栏海天一树

小朋友学Python(17):文件

Python 提供了必要的函数和方法进行默认情况下的文件基本操作。你可以用 file 对象做大部分的文件操作。 一、打开和关闭文件 例1 (1)创建名为test...

2795
来自专栏玄魂工作室

Python 黑帽编程 4.2 Sniffer之数据本地存储和加载

在上一节,我们完成了编写一个简易的Sniffer的第一步——数据捕获。 很多时候,我们需要将捕获的数据先保存到磁盘上,之后再使用工具或者自己编写代码来进行详细分...

2924
来自专栏黑泽君的专栏

Myeclipse中java web.xml报错cvc-complex-type.2.3: Element 'web-app' cannot have character [children], be

  由于是粘贴过来的编码可能有问题,将xml中的文本重新手打输入一遍,一般就会解决这种问题。

1422
来自专栏雅俗

Linux服务器通过crontab自动备份数据库

执行 crontab 命令如果报 command not found,就表明没有安装

2976
来自专栏python3

linux批量kill进程

ps -ef|grep orderMatcherSend.php |grep -v grep|cut -c 9-15|xargs kill -9

952
来自专栏码洞

自己动手实现 Shell多进程套套符

一篇技术文章如今仅仅是理论上讲得天花乱坠,却不能自己撸出东西来,那么它写的再好,也只能算纸上谈兵。继上一篇 《我们天天都在使用的套套符命令,Shell 在里面到...

1041

扫码关注云+社区

领取腾讯云代金券