如何在Struts2中实现自定义404页面

时间:2012-10-15 15:43:40

标签: struts2 http-status-code-404 action-mapping

我正在学习struts2 app开发,感谢一些帮助实现自定义404页面。 在我的申请中,

web.xml包含以下内容:

<error-page>
    <error-code>404</error-code>
    <location>/jsp/pub/error404.jsp</location>
</error-page>

struts.xml有:

    <package name="actions-default" extends="struts-default">

    <global-results>
        <result name="exception">/jsp/pub/exception.jsp</result>
    </global-results>

    <global-exception-mappings>
        <exception-mapping exception="java.lang.Exception"
            result="exception" />
        <exception-mapping exception="java.lang.RuntimeException"
            result="exception" />
    </global-exception-mappings>

</package>

另外,在struts.xml中devMode设置为false

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

error404.jsp: Please click here to see the jsp source at jsfiddle

问题:

当我点击带有无效网址或未映射操作的应用时,我看到以下消息而不是我的自定义404网页

"HTTP Status 404 - There is no Action mapped for namespace [/] and action name [invalidurl] associated with context path"

在应用程序控制台,我看到以下内容:

  

SEVERE:异常处理ErrorPage [errorCode = 404,location = / jsp / pub / error404.jsp]   org.apache.jasper.JasperException:在第6行处理JSP页面/jsp/pub/error404.jsp时发生异常

6: <s:url value='/' var="contextPrefix" />

如果我删除所有's'标签并将error404.jsp作为普通jsp页面,那么我可以看到自定义404页面。我在哪里做错了?任何帮助解决这个问题都会有很大的帮助。

提前致谢

取值

1 个答案:

答案 0 :(得分:0)

大多数S2 JSP标记都希望在S2请求的上下文中运行。直接引用JSP会绕过S2请求进程,因此没有任何价值堆栈,因此大多数标签都会中断。