对于struts来说,提供了一个异常处理机制,方便转到类似404或者其他异常页面,比较方便读者来得知自己的程序的问题所在。
1.事例:登陆的时候用户名必须hello,密码必须为world,否则抛异常
UsernameException:
public class UsernameException extends Exception
{
private String message;//异常信息
public UsernameException(String message)
{
super(message);//顶层父类为throwable类
this.message = message;
}
public String getMessage()
{
return message;
}
public void setMessage(String message)
{
this.message = message;
}
}
PasswordException:
public class PasswordException extends Exception
{
private String message;//异常信息
public PasswordException(String message)
{
super(message);//顶层父类为throwable类
this.message = message;
}
public String getMessage()
{
return message;
}
public void setMessage(String message)
{
this.message = message;
}
}
RegisterAction的execute()方法:
public String execute() throws Exception
{
if(!"hello".equals(username))
{
throw new UsernameException("username invalid");
}
if(!"world".equals(password))
{
throw new PasswordException("password invalid");
}
return SUCCESS;
}
注:把抛异常的步骤放在execute方法里而不放在validate,通常我们把涉及业务逻辑的放在execute(如数据库检查的)放在execute。
struts.xml:
<action name="login" class="com.erzong.struts2.LoginAction" method="myExecute">
<exception-mapping result="usernameInvalid" exception="com.erzong.exception.UsernameException"></exception-mapping>
<result name="success">/result.jsp</result>
<result name="usernameInvalid">/usernameInvalid.jsp</result>
</action>
然后编写usernameInvalid.jsp
2.全局异常及结果处理机制:
注:发生先找局部的结果异常页面,如果没有找到,再找全局的异常处理页面。也就是说全局异常及结果是可以被所有的action公用,不用重复代码段。
3.