Struts2之异常机制

 2023-09-11 阅读 20 评论 0

摘要:当一个Action类抛出一个异常时,Struts2采用声明式的策略即异常映射匹配来处理异常。核心处理思想就是都某个Action的方法执行时抛出异常对象,该异常对象可以被Struts2的异常拦截器自动捕获,并映射到预定义结果视图;由于在struts-default.xml中已经

当一个Action类抛出一个异常时,Struts2采用声明式的策略即异常映射匹配来处理异常。核心处理思想就是都某个Action的方法执行时抛出异常对象,该异常对象可以被Struts2的异常拦截器自动捕获,并映射到预定义结果视图;由于在struts-default.xml中已经激活异常映射功能,所以作为开发者而言,要做的仅仅是定义异常映射到指定的结果集;

当异常发生时,拦截器会以检查局部异常然后全局异常的顺序,检查所有可以应用于当前Action的异常映射,在所有抛出和声明的异常中寻找与抛出异常对象最接近的异常类型,如果类型匹配,则执行对应的结果,跳转到结果对应页面;

java中异常处理机制的原理和应用,看下面一个简单的例子:

package com.ognl.action;import com.opensymphony.xwork2.ActionSupport;public class ExceptionAction extends ActionSupport {@Overridepublic String execute() throws Exception {int a = 1 / 0;return SUCCESS;}
}
然后看struts.xml配置

异常抛出机制。

	<global-results><result name="ArithmeticException">/exception.jsp</result></global-results><global-exception-mappings><exception-mapping result="ArithmeticException"	exception="java.lang.ArithmeticException"/></global-exception-mappings><action name="exception" class="com.ognl.action.ExceptionAction"><result name="success">/hello.jsp</result></action>
当执行ExceptionAction的execute方法时,会抛出ArithmeticException异常,于是首先回到Action内部,去寻找是否有匹配的异常映射,没有找到后接着去全局异常映射中寻找匹配项,找到后然后跳转到对应的异常页面;

再看一个稍微绕一点的例子:

异常的两种机制。

<global-results><result name="login" type="redirect">/Login.action</result><result name="Exception">/Exception.jsp</result>
</global-results><global-exception-mappings><exception-mapping exception="java.sql.SQLException" result="SQLException"/><exception-mapping exception="java.lang.Exception" result="Exception"/>
</global-exception-mappings>
...
<action name="DataAccess" class="com.company.DataAccess"><exception-mapping exception="com.company.SecurityException" result="login"/><result name="SQLException" type="chain">SQLExceptionAction</result><result>/DataAccess.jsp</result>
</action>
以上配置信息我们可以得出:

1、一个java.sql.SQLException将要链到SQLExceptionAction

异常处理两大机制。2、一个com.company.SecurityException 将要重定向到Login.action

3、其它异常将会请求转发到Exception.jsp页面

如果要在异常页面显示错误信息,该如何显示呢?

一般来说,ExceptionmappingInterceptor 将下列信息添加到ActionContext的Value Stack中

exception异常对象本身
exceptionStack栈轨迹详细信息
既然如此,我们就可以通过OGNL的方式会获取它

<h2>An unexpected error has occurred</h2>
<p>Please report this error to your system administrator orappropriate technical support personnel. Thank you for yourcooperation.</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>
Struts2这种声明似的异常处理方式,在Hibernate也较为常见,该处理方式简洁明了,关键在于如何弄懂它的核心处理规则,以后即使在复杂的异常处理也不怕!





版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/48377.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息