前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Struts2之动态调用

Struts2之动态调用

原创
作者头像
爱撒谎的男孩
发布2018-05-10 18:54:30
8631
发布2018-05-10 18:54:30
举报
文章被收录于专栏:码猿技术专栏码猿技术专栏

动态调用

什么是动态调用

  • 动态调用就是一个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名!方法名
代码语言:javascript
复制
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类
代码语言:javascript
复制
<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
代码语言:javascript
复制
<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和通配符的方式实现动态调用

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 动态调用
    • 什么是动态调用
      • 好处
        • method实现动态调用
          • action名!方法名
            • 实现
            • 输入地址
          • 通配符的方式
            • 实现
          • 总结
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档