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>
    
  • 相关阅读:
    SQL Server 添加数据库没有权限等
    网站图片优化的重要性与技巧方案
    5年前端经验小伙伴教你纯css3实现饼状图
    css3 斜切角/斜边的实现方式来自BAT大神的出品
    Validate表单验证插件之常用参数介绍
    html实现邮箱发送邮件_js发送邮件至指定邮箱功能
    css重设样式_清除浏览器的默认样式
    大厂前端工程师教你如何使用css3绘制任意角度扇形+动画
    WordPress教程之如何批量删除未引用(无用)的TAG标签
    css引入的方式有哪些_四种css的引入方式与特点
  • 原文地址:https://www.cnblogs.com/tieway59/p/10996124.html
Copyright © 2011-2022 走看看