例:登录时的异常处理
先自定义两个异常。
public class PasswordException extends Exception{
private String message;
public PassowrdException(String message){
super(message);
this.message = message;
}
getter; setter;
}
(局部的,仅在此action中发生)
<action name="login" class="com.test.action.LoginAction">
//当遇到这个异常时转到此result对应的页面
<exception-mapping result="usernameInvalid" exception="com.test.exception.UsernameException">
</exception-mapping>
<result name="success">/result.jsp</result>
//与上面的异常结果相对应
<result name="usernameInvalid">/usernameInvalid.jsp</result>
</action>
(全局的)
<global-results>
<result name="passwordInvalid">/passwordInvalid.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="passwordInvalid" exception="com.test.exception.PasswordException">
</exception-mapping>
</global>
global-results标签必须放在global-exception-mappings的前面,是由DTD定义的。
当一个action抛出PassowrdException时,在它对应的action标签中未找到对应的异常处理方式,就会到全局中去找。
usrnameInvalid.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
<s:property value="exception"/> 打印出exception的toString方法
<s:property value="exception.message"/> 只打印message属性
<s:property value="exceptionStack"/> 打印出exception的堆栈信息
${exception}
${exception.message} el表达式的方式