1. 程式人生 > >struts2 2.5.5 中出現404 異常,沒有對應的名稱空間,或者沒有對應的Action(套路)

struts2 2.5.5 中出現404 異常,沒有對應的名稱空間,或者沒有對應的Action(套路)

2.5.5版本套路一 出現異常 There is no Action mapped for namespace [/] and action name [roleAction_addUI] associated with context path [/OA]. - [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:554)
    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:241)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
    org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
    org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
    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)

解決辦法,在包節點中加入如下開通禁用的萬用字元即可 <package name="cai" namespace="/" extends="struts-default" strict-method-invocation="false"> 注意版本: <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> 套路2: filterDispatcher不再使用 2.3.24.1如下: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 2.5 版本中如下
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter 其他常亮的配置: <constant name="struts.ui.theme" value="simple"></constant> <!-- 配置為開發模式,更改檔案配置之後不用重新啟動,可以看到更多的錯誤資訊 --> <constant name="struts.devMode" value="true"></constant> <constant name="struts.configuration.xml.reload" value="true"></constant> <!-- 禁止快取 --> <constant name="struts.serve.static.browserCache" value="false" /> <!-- 配置副檔名 --> <constant name="struts.action.extension" value="action" /> <!-- 啟用DMI 設定是否支援動態方法呼叫,true為支援,false不支援. --> <constant name="struts.enable.DynamicMethodInvocation" value="true" /> <!-- 設定編碼 --> <constant name="struts.il8n.encoding" value="UTF-8" /> <!-- 由spring 管理action的建立 --> <constant name="struts.objectFactory" value="spring" /> <!--當使用約定時,指定掃描Controller 結尾的類為Action --> <constant name="struts.convention.action.suffix" value="Controller"/> <!--當使用約定時,獲取Action 所指定的掃描的包--> <constant name="struts.convention.package.locators" value="example"/>