Struts2之动态调用

2018-05-10 18:54:30 浏览数 (1)

动态调用

  • 本人独立博客https://chenjiabing666.github.io

什么是动态调用

  • 动态调用就是一个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和通配符的方式实现动态调用

0 人点赞