2012-10-15 28 views
0

我正在学习struts2应用程序开发,感谢一些帮助实现自定义404页面。 在我的应用程序,如何在Struts2中实现自定义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" 

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

严重:异常处理ErrorPage [errorCode = 404,位置=/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页。我在哪里做错了?任何帮助解决这个问题都会有很大的帮助。

在此先感谢

小号

回答

0

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