Struts Action匹配出错解决方案

今天准备试一试通配符来匹配Action,struts.xml里是这样配置的

<package name="demo1" extends="struts-default">
        <action name="*Action" class="struts2demo.Login2Action" method="{1}">
            <result name="success">/jsp/{1}.jsp</result>
        </action>
        
        <action name="*">
            <result>/jsp/{1}.jsp</result>
        </action>
    </package>

表单提交页是这样写的

<s:form action="loginAction">
	<s:textfield name="username" key="username"/>
	<s:textfield name="password" key="password"/>
	<s:submit key="submit_login"/>
</s:form>

处理Action的类也是有的,但一提交就出错:

There is no Action mapped for namespace [/] and action name [loginAction] associated with context path [/Structs2Demo]. - [unknown location]

    com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:192)
    org.apache.struts2.factory.StrutsActionProxy.prepare(StrutsActionProxy.java:63)
    org.apache.struts2.factory.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:37)
    com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:546)
    org.apache.struts2.dispatcher.ExecuteOperations.executeAction(ExecuteOperations.java:81)
    org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:113)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
    java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Unknown Source)

这个问题我终于找到了解决方案:答案是别人回答我的

2.5版本的与2.2版本之前的不一样,2,2版本以前,直接这样配置就行,从2.3以后,使用通配符的时候需要加入<allowed-methods>,2.5版本取得方法名称后,会验证改方法是否允许访问。所以需要加,里面可以写*,或者多个方法,login,logout等等,用逗号分隔
<action name="*Action" class="XXX.LoginAction" method="{1}" >
            <result name="success">/jsp/a1.jsp</result>
            <result name="error">/jsp/a2.jsp</result>
         <allowed-methods>*</allowed-methods>  <!-- 这就是需要添加的地方-->
</action>

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值