在日常学习中遇到一个关于struts2配置通配符的问题。
<?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="privilege" namespace="/" extends="struts-default">
<action name="privilege_*" class="com.jm.struts.action.PrivilegeAction" method="{1}">
<result name="success">/index.jsp</result>
</action>
</package>
</struts>
以上是struts2的struts.xml配置文件中的一段配置,目的是想通过struts2的通配符解决action重复冗余的问题。但是启动项目使用浏览器访问时,出现一个意想不到的错误:
There is no Action mapped for namespace [/] and action name [privilege_login] associated with context path [/demo_struts]
这个错误大致意思是找不到privilege_login对应的action。这是为啥呢?查阅了很多资料发现,原来是struts2的dtd的版本问题。在这个struts.xml配置文件中我使用的是2.5版本,这个版本会有一个校验的过程,内部会验证是否允许访问这个方法。
解决方案:
- 修改版本,即改为2.3版本
- 不改变版本号,在action标签中添加,形如:
<allowed-methods>login,register</allowed-methods>
标签中指定允许访问的方法名称。
测试通过,完美解决!