如何在Struts2中创建自定义异常处理程序类

时间:2015-12-01 08:45:38

标签: exception-handling struts2

如何在Struts2中创建自定义异常处理程序类?我尝试在execute()中添加异常代码,但失败了。

1 个答案:

答案 0 :(得分:2)

我希望此指南对您的问题有用,因为它看起来有点过于宽泛,所以如果您有特定要求,只需编辑您的问题。首先,我建议您阅读官方文档,以便检索有关Exception handlingException configurationException Interceptor的信息。

现在,我尝试更详细,因为我可以解释如何处理Struts2中的异常:

  • 全局异常处理:每次应用程序抛出异常时,Struts2都会使用<global-results>文件中的<global-exception-mappings>struts.xml标记来处理结果。
  • 操作异常处理:每当您的特定操作抛出异常时,Struts2将处理<exception-mapping>标记内的结果<action>标记

全局异常处理

  

使用Struts 2框架,您可以在struts.xml中指定框架应如何处理未捕获的异常。处理逻辑可以应用于所有操作(全局异常处理)或特定操作。我们首先讨论如何启用全局异常处理。

     

要启用全局异常处理,您需要向struts.xml添加两个节点:global-exception-mapping和global-results。例如,检查exception_handling项目中的struts.xml。

<global-results>
      <result name="securityerror">/securityerror.jsp</result>
      <result name="error">/error.jsp</result>
</global-results>

<global-exception-mappings>
     <exception-mapping exception="org.apache.struts.register.exceptions.SecurityBreachException" result="securityerror" />
     <exception-mapping exception="java.lang.Exception" result="error" />
</global-exception-mappings>

现在,当抛出SecurityBreachException时,将加载securityerror.jsp。在我看来,全局异常对于一般错误非常有用。例如,您可以创建一个ApplicationException视图,其中包含用于向您的协助发送问题的堆栈跟踪的表单。

操作异常处理

  

如果需要以特定方式处理特定操作的异常,可以使用操作节点中的异常映射节点。

<action name="actionspecificexception" class="org.apache.struts.register.action.Register" method="throwSecurityException">
      <exception-mapping exception="org.apache.struts.register.exceptions.SecurityBreachException" result="login" />
      <result>/register.jsp</result>
      <result name="login">/login.jsp</result>
</action>

在此示例中,当throwSecurityException操作的Register方法抛出SecurityBreachException时,它会返回LOGIN结果并加载login.jsp。我已经将这种解决方案用于可能在验证后抛出错误的操作(例如在我的数据库中执行CRUD操作)。

自定义错误jsp

  

默认情况下,ExceptionMappingInterceptor将以下值添加到值堆栈:

     
      
  • exception:异常对象本身
  •   
  • exceptionStack:堆栈跟踪中的值
  •   

您可以使用它们来创建自定义jsp,以打印发生的错误和堆栈跟踪。这里有一个例子:

<h2>An unexpected error has occurred</h2>
<p>
    Please report this error to your system administrator
    or appropriate technical support personnel.
    Thank you for your cooperation.
</p>
<hr/>
<h3>Error Message</h3>
<s:actionerror/>
<p>
    <s:property value="%{exception.message}"/>
</p>
<hr/>
<h3>Technical Details</h3>
<p>
    <s:property value="%{exceptionStack}"/>
</p>

<强>日志

我认为LoggingExceptions段也很有用。