Struts2中的异常处理有两种形式:一种是局部异常处理,一种是全局异常处理
在struts.xml中的package下有两个这样的标签:<global-exception-mappings>和<global-results>,前者指定异常处理的类,后者是异常处理结果,通常指定一个显示异常信息的页面。
而在action中,也有类似全局的异常处理,<exception-mapping>和<result>。
全局的异常处理可以被该包下所有的action使用,而局部异常处理只能被一个action使用。
若在某一个action中抛出了异常,那么struts会现先在本action查找是否有处理该异常的局部异常处理类,即<exception-mapping>,若没有,才会去找是否有全局的异常处理类,即<global-exception-mappings>
异常处理的结果的执行流程也是如此,先局部后全局,即使异常处理类是全局的,struts也会先去局部找是否有对应的异常处理结果,若没有,再去找全局的。
示例:以登录的例子,演示一下,异常处理的使用
登录页面,包含两个信息:姓名和密码
Login.jsp:
<form action="/struts2/test/login3" method="post">
姓名:<input type="text" name="username"/><br/>
密码:<input type="password" name="password"/><br/>
<input type="submit" value="提交"/>
</form>
然后再建立异常处理类,这里对姓名和密码,分别建立两个异常处理类:
UsernameException类
package com.suo.exception;
public class UsernameException extends Exception {
private String message;
public UsernameException(String message)
{
super(message);
this.message=message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
PasswordException类:
package com.suo.exception;
public class PasswordException extends Exception
{
private String message;
public PasswordException(String message)
{
super(message);
this.message=message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
配置struts.xml文件:
<package name="test" namespace="/test" extends="struts-default">
<global-results>
<result name="usernameInvalid">/WEB-INF/result/usernameInvalid.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="usernameInvalid" exception="com.suo.exception.UsernameException"></exception-mapping>
</global-exception-mappings>
<action name="login" class="com.suo.actions.LoginAction" method="execute">
<exception-mapping result="passwordInvalid" exception="com.suo.exception.PasswordException"></exception-mapping>
<result name="passwordInvalid">/WEB-INF/result/passwordInvalid.jsp</result>
<result name="success">/WEB-INF/result/LoginResult.jsp</result>
</action>
</package>
public String execute() throws Exception
{
if(!"suo".equals(username))
{
throw new UsernameException("username invalid !");
}
if(!"piao".equals(password))
{
throw new PasswordException("password invalid !");
}
return SUCCESS;
}