异常处理后,能够提供友好的用户界面,而不是一些错误的代码信息.
利用struts2的异常处理机制可以很方便的实现异常处理,你不再
需要在Action中捕获异常,并抛出相关的异常了,这些都交给拦截器来帮你做了。在struts-default.xml中己经设置了拦截器,因此我们
可以直接使用声明式异常.struts2-default-xml声明的拦截器如下:
- <interceptors>
- <interceptor name="exception"
- class="com.opensymphony.xwork.interceptor.ExceptionMappingInterceptor"/>
- interceptors>
异常的类型可以分为两种:局部异常映射和全局异常映射
当Action抛出异常时,会在局部中和全局中查找与之相匹配的异常,如果局部和全局中都有满足的异常映射,以局部的为准. 例子说明:
action:
- public class LogonAction {
- private String userName;
- private String userPwd;
- public String getUserName() {
- return userName;
- }
- public void setUserName(String userName) {
- this.userName = userName;
- }
- public String getUserPwd() {
- return userPwd;
- }
- public void setUserPwd(String userPwd) {
- this.userPwd = userPwd;
- }
- public String execute() throws Exception{
- if(userName.equals("callan") && userPwd.equals("fjf")){
- ActionContext.getContext().getSession().put("userName", "callan");
- return "succee";
- } else {
- throw new SQLException(“用户名密码不正确”);
- }
- }
- }
public class LogonAction {
private String userName;
private String userPwd;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
public String execute() throws Exception{
if(userName.equals("callan") && userPwd.equals("fjf")){
ActionContext.getContext().getSession().put("userName", "callan");
return "succee";
} else {
throw new SQLException(“用户名密码不正确”);
}
}
}
配置文件:
- <package name="logon" extends="struts-default">
-
- <global-exception-mappings>
- <exception-mapping result="all" exception="java.lang.Exception">
- exception-mapping>
- global-exception-mappings>
- <action name="logon" class="com.LogonAction">
- <result name="succee">/logon/welcome.jspresult>
- <result name="error">/logon/error.jspresult>
- <exception-mapping result="sql" exception="java.sql.SQLException"/>exception-mapping>
- <exception-mapping result="nullPoint" exception="java.lang.NullPointerException">exception-mapping>
- <result name="nullPoint">/logon/nullpoint.jspresult>
- <result name="sql">/logon/sql.jspresult>
- <result name="all">/logon/all.jspresult>
- action>
- package>
/logon/welcome.jsp
/logon/error.jsp
/logon/nullpoint.jsp
/logon/sql.jsp
/logon/all.jsp
上面是个用户登陆的action及配置,定义了两个局部异常和一个全局异常
当输入的用户名和密码不为callan和fjf时,会抛出SQLException异常,局部异常配置起作用,会定向到sql.jsp,如果注释局部sql异常,全局异常起作用,定向到all.jsp
可以使用Struts2的标签来输出异常信息
例如sql.jsp页面
可以输出 用户名密码不正确
阅读(2171) | 评论(0) | 转发(0) |