Struts 2当用户插入不存在的动作时该怎么做

时间:2013-12-07 19:59:49

标签: java jsp struts2 error-handling actionresult

在Struts 2应用程序中,当用户插入与您的任何操作无关的网址时,java.lang.NullPointerException出现

在这些情况下,我想要显示一个漂亮的屏幕,因此我添加了struts.xml

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

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

但它不起作用。我也尝试过没有成功

<action name="exception">
    <result>/WEB-INF/jsp/exception.jsp</result>
</action>

所以,我开始认为所有的URL都必须与一个动作对应,否则当用户插入与任何动作不对应的URL时,没有机制来处理这些情况(所以这个机制是处理{ {1}}由您现有的某个操作引起的,而不是一个不存在的操作。

2 个答案:

答案 0 :(得分:3)

你走了:

 <default-action-ref name="index"/>

如果未找到匹配项,将调用此操作。

我在所有应用中使用此功能,以避免日志中出现不需要的错误/警告。

Documentation

答案 1 :(得分:1)

实际上,exception拦截器捕获了异常,defaultStack拦截器是NullPointerException中的第一个拦截器,它允许处理不仅在操作中而且在拦截器调用期间发生的异常。

为此,您已经定义了一个配置。

如果输入的URL未映射到任何操作配置,通常调度程序将返回404错误代码。如果您在结果之前得到{{1}},那么项目配置就会出错。

如果没有堆栈跟踪,很难说出发生了什么。但是,如果您想要处理发出未知URL的情况而不是之前处理它的调度程序,那么您应该查看可以帮助您定义thisunknownHandler答案。

阅读有关具有此功能的支持Struts版本的说明。