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>

如果不想禁用第一项,只设置允许的方法也是可以的,小伙伴们可以试一下!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值