zoukankan      html  css  js  c++  java
  • struts2.5 使用感叹号和通配符实现动态方法调用无效的问题及解决!

    https://blog.csdn.net/zhixiandianji/article/details/52576742

    先说 struts2.5 使用感叹号实现动态方法调用的问题,使用通配符的方式出现的问题跟这一样!

    在 struts2.3 的版本中,我们通常这么配置 struts.xml 文件:

    <?xml version="1.0" encoding="UTF-8"?>
    
    
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
     
    <struts>
    
    <package name="default" namespace="/" extends="struts-default">
          <result>/result.jsp</result>
          <result name="add">/add.jsp</result>
          <result name="update">/update.jsp</result>
     </action>
     
    </package>
     
    <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
     
    </struts>
    

    HelloWorldAction类如下:

    package com.imooc.action;
    
    
    import com.opensymphony.xwork2.ActionSupport;
    
    
    public class HelloWorldAction extends ActionSupport {
    
    public String add(){
    
    return "add";
    }
    
    public String update(){
    
    return "update";
    }
    
    @Override
    public String execute() throws Exception {
    
    System.out.println("执行Action");
    
    return SUCCESS;
    }
    
    }
    

    这样在 struts2.3 上能够成功,但在 struts2.5 上却无论如何定位不到 http://localhost:8888/HelloWorld/helloworld!add.action,会发生如下错误:

    HTTP Status 404 - Method add for action helloworld is not allowed!

    type Status report

    message Method add for action helloworld is not allowed!

    description The requested resource is not available.
    Apache Tomcat/7.0.70

    搜了半天,有说是要添加 ,明确打开动态方法调用功能,因为 struts2 默认是关的,但在这里并不能解决问题,因为配置是正确的。

    原来是 struts2.5 为了增加安全性,在 struts.xml 添加了这么个属性:regex:.*

    同时要注意,struts.xml 的解析版本要为 2.5,即头部信息应为:

    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
    

    最后,struts.xml 应该为:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
     
    <struts>
    
    <package name="default" namespace="/" extends="struts-default">
       <global-allowed-methods>regex:.*</global-allowed-methods>
     <action name="helloworld" class="com.imooc.action.HelloWorldAction">
          <result>/result.jsp</result>
          <result name="add">/add.jsp</result>
          <result name="update">/update.jsp</result>
     </action>
     
    </package>
     
    <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
     
    </struts>
    

    同样,使用通配符实现动态方法调用时,

    <?xml version="1.0" encoding="UTF-8"?>
    
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
     
    <struts>
    
    <package name="default" namespace="/" extends="struts-default">
    <global-allowed-methods>regex:.*</global-allowed-methods>
     <action name="helloworld_*" method="{1}" class="com.imooc.action.HelloWorldAction">
          <result>/result.jsp</result>
          <result name="add">/{1}.jsp</result>
          <result name="update">/update.jsp</result>
     </action>
     
    </package>
     
    <constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>
     
    </struts>
    
  • 相关阅读:
    739. Daily Temperatures
    556. Next Greater Element III
    1078. Occurrences After Bigram
    1053. Previous Permutation With One Swap
    565. Array Nesting
    1052. Grumpy Bookstore Owner
    1051. Height Checker
    数据库入门及SQL基本语法
    ISCSI的概念
    配置一个IP SAN 存储服务器
  • 原文地址:https://www.cnblogs.com/tieway59/p/10996124.html
Copyright © 2011-2022 走看看