动态方法调用(DMI)作用: 一个Action中包含多个方法,通过DMI可只配一个action访问路径,通过不同的url, http://localhost:8080/project-name/package-namespace/action-name!方法名来访问不同的方法。
后台 VstAction.class
public class VstTestAction extends ActionSupport{
/**
*
*/
private static final long serialVersionUID = 1L;
private String TAG = VstTestAction.class.getSimpleName();
private Log logger = LogFactory.getLog(VstTestAction.class);
public String add() throws Exception{
logger.debug(TAG + "[执行add()方法]");
return SUCCESS;
}
public String del() throws Exception{
logger.debug(TAG + "[执行del()方法]");
return SUCCESS;
}
}
1.传统的action访问,配置structs.xml
<pre name="code" class="plain"><package name="default" namespace="/" extends="struts-default">
<action name="vst1" class="com.danny.structs.test.VstTestAction" method="add">
<result>/Hello.jsp</result>
</action>
<span> </span><action name="vst2" class="com.danny.structs.test.VstTestAction" method="del">
<result>/Hello.jsp</result>
</action>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></package></span>
通过action 里的method属性,决定调用哪个方法,几个方法就有几个action
但是这样的方法会导致structs.xml很臃肿,因此可采用structs2.xml的动态方法调用或通配符方法调用,实现在只配置一个Action但可调用action里的所有方法,这里先学习动态方法调用。
2.动态方法调用访问配置strcuts.xml<constant name="struts.enable.DynamicMethodInvocation" value="true"/><!-- 打开动态方法调用DMI -->
<package name="test" namespace="/test" extends="struts-default">
<span style="white-space:pre"> </span><action name="vst" class="com.danny.structs.test.VstTestAction">
<span style="white-space:pre"> </span><result>/index.jsp</result>
</action>
</package>
注意,一定要加上,structs2默认不支持动态方法调用(DMI),要通过下面这句话打开动态方法调用,否则是无效的
<constant name="struts.enable.DynamicMethodInvocation" value="true"/><!-- 打开动态方法调用DMI -->
访问方式:
http://localhost:8080/structs_demo/test/vst!del
http://localhost:8080/structs_demo/test/vst!add
通过package-namespace/action-name!方法名来访问不同的方法