(2)动态方法的调用
Dynamic method invocation (DMI)在action的名字使用!来标示要调用的方法名
格式如下:
actionName!methodName.action
当我我们请求/news!create.action的时候就会调用news的create()方法
由于安全的原因关闭DMI 在struts.xml中配置,使用constant 元素将
struts.enable.DynamicMethodMethidInvocation属性设为false。
MDI的本质是,其实现代码扫描action中“!”,如果找到则“欺骗”框架条用“!”后的方法。
而非execute方法,但使用还是用execute的方法配置,包括验证,框架相信它正在执行
execute方法
那么什么时候用MDI什么时候Action元素的method方法?
如果Action的不同的方法的使用的是相同的配置(相同的引用 相同的result映射)那么可以,
使用DMI,反之使用method属性。
(3)模拟struts1的ForwardAction
<action name="index">
<package name="default" extends="struts-default"> <default-action-ref name="hello"> <action name="hello"> <result>/hello.jsp</result> </action> </package>
<result >index</result>
</action>
当action的原始Class的属性值省略,那么默认使用com.opensymphoy.xword2.ActionSupport类。
ActionSupport类实现了Action的节后,并给出了execute的方法的默认实现,这个实现只是简单的返回
success 字符串,但请求/index.action时 ,框架会创建ActionSupport类的实例,调用execute的方法;
execute返回success ,于是请求被导向到/index.jsp
(4)默认的action
如果请求一个不存在的action是会发生404错误,采用默认action可以默认执行
<package name="default" extends="struts-default"> <default-action-ref name="hello"/> <action name="hello"> <result>/index.jsp</result> </action> </package>