一新来同事看代码的时候
发现struts.xml 中配置的method属性无效,
struts.xml 配置如下:
class="java" name="code">
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" />
<constant name="struts.i18n.encoding" value="UTF-8"/>
<constant name="struts.serve.static.browserCache" value="false"/>
<package name="default" namespace="/" extends="struts-default">
<action name="custom" class="customAction" method="custom">
<result name="success">/WEB-INF/view/index.jsp</result>
<result name="custom">/WEB-INF/view/custom.jsp</result>
</action>
</package>
</struts>
java代码:
public class customAction{
public String index(){
try {
System.out.println("index");
} catch (Exception e) {
e.printStackTrace();
}
return "success";
}
public String custom(){
System.out.println("custom");
return "custom";
}
}
访问URL:http://localhost:6060/custom/custom!
index.do,结果却能访问到index方法。
按理来说,在struts.xml中配置了struts.enable.DynamicMethodInvocation=false、method=custom,通过上面的url是访问不到index方法。
当时我也不得其解,之后查找代码终于发现问题所在。
问题原因:
在Struts 2的核心jar包-struts2-core中,有一个default.properties的默认配置文件,default.properties是不能被更改的。如需要更改里面的配置信息,可以在src根目录下建一个
struts.properties的配置文件,然后重写所要更改的配置信息。经查看struts.properties中中配置了struts.enable.DynamicMethodInvocation=true。
结论:如果相关属性在这个文件里面设置了属性,那么在struts.xml 中再配置是无效的。
经过测试得出这个结论,还望指教。