Struts 2.5 动态方法调用(DMI)问题

错误:

HTTP Status 404 - There is no Action mapped for namespace [/] and action name [helloworld_add] associated with context path [/Struts2Demo].

Struts 2.5 动态方法调用(DMI)问题_第1张图片
Struts 2.5 中的通配符使用出错

解决方法:

DMI(Dynamic Method Invocation,动态方法调用),动态方法调用是为了解决一个 Action 对应多个请求的处理,以免 Action 太多。有三种方法:

  • 指定 method 属性;
  • 感叹号方式(官方不推荐);
  • 通配符方式。

在 Struts 2.5 中,为了限制 DMI,默认启用了严格的方法访问,增加了新的标签(strict-method-invocation)设置,strict-method-invocation 的值默认为 true 。

Struts 2.5 ,Struts 官网文档建议使用的头部信息(struts.xml 如下):

Struts 2.5 DTD




...

Struts 2.5 中 SMI(strict-method-invocation)的使用方式:

  • 在 package 中添加属性 strict-method-invocation="false" 就可以正常使用通配符了;

  • 设置 strict-method-invocation="true" 的情况下,设置 allowed 标签、global-allowed-methods 标签,只在设置的标签中起作用,如:

SMI via struts.xml


    ...
    execute,input,back,cancel,browse
    ...
    
        foo,bar
    
    ...

示例代码:

  1. strict-method-invocation="false"

    
        /result.jsp
        /{2}.jsp
        /{2}.jsp
    

  1. strict-method-invocation="true",同时设置

    
        /result.jsp
        /{2}.jsp
        /{2}.jsp
        add,update
    

  1. strict-method-invocation="true",同时设置 标签

    add,update
    
            /result.jsp
            /{2}.jsp
            /{2}.jsp
    

参考链接:
http://www.jianshu.com/p/3aaadaef5c80
https://struts.apache.org/docs/action-configuration.html

你可能感兴趣的:(Struts 2.5 动态方法调用(DMI)问题)