动态调用
- 本人独立博客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名!方法名
- 这个Action类中有一个login方法,我们的动态调用这个login方法,使用
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和通配符的方式实现动态调用