struts2 配置片段
<package name="default" extends="struts-default">
<default-action-ref name="pageNotFound"></default-action-ref>
<action name="pageNotFound" class="com.TD.action.DefaultAction"></action>
</package>
<package name="login" namespace="/login" extends="default">
<action name="*" class="com.TD.action.LoginAction" method="{1}" >
<result name="success_jsp">/success.jsp</result>
</action>
</package>
当不使用通配符时(<action name="login" class="com.TD.action.LoginAction" method="login" >),访问命名空间login下的不存在的action(http://localhost:8080/TD/login/asd.action),能正常被默认action捕获处理。
但是使用了通配符后(<action name="*" class="com.TD.action.LoginAction" method="{1}" >),再访问不存在的action时,页面会报struts500,控制台会报(
严重: Exception occurred during processing request:com.TD.action.LoginAction.asd()
java.lang.NoSuchMethodException: com.TD.action.LoginAction.asd()
)。
求解。
------解决方案--------------------
用通配符之后,无论你在/login/后输入任意字符都默认走了com.TD.action.LoginAction这个类,也就是说<action name="pageNotFound" class="com.TD.action.DefaultAction"></action>将不会再进行触发,因为*号已经包含pageNotFound这种情况,除非你使用x*,访问/login/后的第一个字符不是x的情况下才会跳转到com.TD.action.DefaultAction中
------解决方案--------------------
照你的配置 访问时的方法名要跟action名相同
我使用了默认action ,
当我的访问的方法(action)不存在时, 理论上应该由默认action(我的定义的)处理,
也确实是这样的,
但是我使用了通配符,之后, 我的默认action 就不起作用了
你自己看下报错 是找不到LoginAction里asd这个方法 并不是说Asd这个action
所以并没有进入到默认的action而是在LoginAction里找asd方法
对啊, 我知道啊, 但是为什么啊
我在没有配置通配符之前,访问asd()的时候,是可以进到默认的action ,
但是我配置了通配符之后就不行了
看下楼上说的 有助于理解