在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}}由您现有的某个操作引起的,而不是一个不存在的操作。
答案 0 :(得分:3)
你走了:
<default-action-ref name="index"/>
如果未找到匹配项,将调用此操作。
我在所有应用中使用此功能,以避免日志中出现不需要的错误/警告。
答案 1 :(得分:1)
实际上,exception
拦截器捕获了异常,defaultStack
拦截器是NullPointerException
中的第一个拦截器,它允许处理不仅在操作中而且在拦截器调用期间发生的异常。
为此,您已经定义了一个配置。
如果输入的URL未映射到任何操作配置,通常调度程序将返回404错误代码。如果您在结果之前得到{{1}},那么项目配置就会出错。
如果没有堆栈跟踪,很难说出发生了什么。但是,如果您想要处理发出未知URL的情况而不是之前处理它的调度程序,那么您应该查看可以帮助您定义this的unknownHandler
答案。
阅读有关具有此功能的支持Struts版本的说明。