struts2.5.20使用通配符和出现的问题解决
引言
在我们使用struts的过程中,struts.xml文件里对于action的配置越来越多,而且好多都有共性,比如同一模块的不同Action,那我们能不能只配置一条action,而让它可以被一系列的action访问,今天我们就使用struts2.5.20实现这个需求。
开始
定一下规则
假如我们有多个模块,每个模块使用一个Action,每个模块内有不同方法,假设有一个模块A,A中有方法B、C,我们希望访问A_B即可调用B方法的功能,使一种定义具有普适性。
根据上述规则写一下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="lf.blank.action" extends="struts-default" namespace="/">
<action name="*_*" class="lf.blank.action.{1}Action" method="{2}">
<result name="{2}">/{1}/{2}.jsp</result>
</action>
</package>
</struts>
其中*是struts中的通配符 {数字}代表第几个通配的元素
测试一下
写完之后建一下相关文件测试一下
重启服务器并访问,我激动的一批,结果…
解决问题过程走一遍
说实话我以为我上面写错了,所以找了半天错误,愣是没看出哪里错了
看了下文档
看不懂? 没关系,来个中文版
原来是要设置个参数,改一下
试一下
还是同样的错误,骗淫…
然后我又看了一下struts-default.xml文件里,里面有一条
<global-allowed-methods>execute,input,back,cancel,browse,save,delete,list,index</global-allowed-methods>
啊哈,找到了突破口,我们再改一下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>
<constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>
<package name="lf.blank.action" extends="struts-default" namespace="/">
<action name="*_*" class="lf.blank.action.{1}Action" method="{2}">
<result name="{2}">/{1}/{2}.jsp</result>
<allowed-methods>login,register,come</allowed-methods>
</action>
</package>
</struts>
重启、访问试一下
nice兄弟!!问题解决!
此问题解决方法总结一下
先设置
<constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>
再在action内加上
<allowed-methods>你允许访问的方法,方法之间用逗号隔开</allowed-methods>
如果不想禁用第一项,只设置允许的方法也是可以的,小伙伴们可以试一下!