【问题标题】:Struts 2 global-exception-mappings for HTTP error codesStruts 2 用于 HTTP 错误代码的全局异常映射
【发布时间】:2013-08-24 10:43:44
【问题描述】:

是否可以处理web.xml 中定义的错误页面,如Struts 2 操作中的global-exception-mappings。 例如,而不是

<error-page>
    <error-code>404</error-code>
    <location>/common/jsp/FilkeNotFine.jsp</location>
</error-page>

定义如下:

<global-exception-mppings>
    <exception-mapping ErrorCode="404" result="internernal-error" /> 
</global-exception-mppings>

是否有任何插件或拦截器可以做到这一点?

【问题讨论】:

    标签: java exception struts2 error-handling http-error


    【解决方案1】:

    当然可以

    <global-results>
      <result name="error">/common/jsp/FilkeNotFine.jsp</result>
    </global-results>
    
    <global-exception-mappings>
      <exception-mapping exception="java.lang.Exception" result="error"/>
    </global-exception-mappings>
    

    拦截器是在包struts-default中定义的exception和defaultStack的一部分。

    【讨论】:

    • 你确定吗?我们在哪里定义 http 错误代码。例如错误 404> 找不到文件。 400>错误的请求
    • 这是您的应用程序中抛出的异常的常见错误处理,您可以将代码发送到响应。
    • 那么我应该根据错误代码重定向到我的jsp页面中的不同页面!
    • 你不能重定向,只是发送错误并转义,web容器会为你处理。
    【解决方案2】:

    我搜索并据我所知,恕我直言,没有办法做到这一点。 Struts2 不是抛出 404 的那个,它是 web 服务器。 Struts2 会抛出异常。

    RomanC 的回答非常清楚地解释了如何处理异常,但是您所期待的,并不能 100% 得到满足。

    相反,您可以尝试这样的事情:

    <error-page>
        <error-code>404</error-code>
        <location>/common/jsp/my404.action</location>
    </error-page>
    

    然后您可以将 my404 映射到您的 struts xml 中的某些操作。

    虽然我不确定它是否可行,但我想它取决于服务器。 恕我直言,在这种情况下不能使用动态资源,因为服务器要求该文件实际存在。

    如果发生这种情况,你可以简单地在你的 web-root 中创建一个名为 my404.action 的文件,然后 struts2 将处理其余的,如果你明白我在说什么的话。

    未经测试,但应该可以工作。

    【讨论】:

      【解决方案3】:

      您必须首先将您的 struts.xml 中的 devMode 更改为 false,以便您现在可以使用您的 404 页面。

      <constant name="struts.devMode" value="false" /> 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-23
        • 1970-01-01
        • 1970-01-01
        • 2017-09-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多