【问题标题】:How to handle 404 error when an action is not found in Struts 2在 Struts 2 中找不到操作时如何处理 404 错误
【发布时间】:2014-04-05 11:06:28
【问题描述】:

在 Struts 2 中,如果找不到操作,我想重定向到 404.jsp 页面 我在web.xml 文件中添加了错误代码,如下所示。

<error-page>
    <error-code>403</error-code>
    <location>/403.jsp</location>
</error-page>
<error-page>
    <error-code>404</error-code>
    <location>/404.jsp</location>
</error-page>

它呈现404.jsp 页面内容,但在日志中出现以下错误。 如何消除以下错误

2014-04-07 14:07:46,706  WARN (org.apache.struts2.dispatcher.Dispatcher:64) - Could not find action or result: /struts2-test/home11
There is no Action mapped for namespace [/] and action name [home11] associated with context path [/struts2-test]. - [unknown location]
    at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185)
    at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63)
    at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:37)
    at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:552)
    at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

【问题讨论】:

  • 断点在org.apache.struts2.dispatcher.Dispatcher:64
  • 感谢您的回复,我没听懂您的意思。你能详细解释一下吗
  • 错误页面的内容是什么?
  • 我已经更新了上述问题中错误页面的内容。如果未找到操作,那么它应该重定向到 404 页面并且不会通过警告,那么我该如何实现呢。
  • 发布错误页面,看起来你想要的似乎是不可能的,警告是由框架使用他们的日志产生的,你必须什么都不做,而不是通过调整它的级别来关闭记录器。

标签: error-handling configuration struts2 http-status-code-404 action-mapping


【解决方案1】:

当应用程序配置为在struts.devMode 中运行时,如果在呈现 JSP 页面时在运行时配置中未找到任何操作,则 Struts 2 框架会生成警告。它帮助开发人员解决 Struts 标记中动作的不适当映射。但是,动作映射并不总是静态推断,而是在运行时推断。因此,标签应该能够从值堆栈中的属性中找到映射。但是 struts 标签仅在您从错误页面重定向时不可用的操作上下文中执行。确保在重定向到 Struts 操作时,您有正确的 URL 映射到它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 2016-03-18
    • 2019-10-29
    相关资源
    最近更新 更多