您的位置:首页 > 其它

【SSH项目实战】国税协同平台-9.全局异常映射

2015-10-27 21:14 597 查看
上次我们的校验工作已经完成,下面我们谈谈系统异常的处理。

假设我们在UserAction的listUI方法中加入一句错误代码:
//列表页面
public String listUI(){
int i=1/0;
userList=userService.findObjects();
return "listUI";
}
然后我们来访问我们的我用户列http://localhost/HpuTax/tax/user_listUI.action,那么便会看到这种错误界面:



为了让用户不看到这种错误界面,转化为友好界面,我们就要对系统的异常进行包装处理。

系统可能出现的异常:(异常分类)

dao: 比较致命的操作异常,是会有很大可能影响整次的请求

service: 业务层的异常信息需要自定义

action: 控制层的异常信息需要自定义

我们在核心代码包中创建我们的全局异常以及各层异常处理类:

SysException.java:
package cn.edu.hpu.tax.core.exception;

public abstract class SysException extends Exception{

//错误信息
private String errorMsg;

public String getErrorMsg() {
return errorMsg;
}

public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}

//下面几个全是不同的构造方法
public SysException() {
super();
// TODO Auto-generated constructor stub
}

public SysException(String message, Throwable cause,
boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
// TODO Auto-generated constructor stub
}

public SysException(String message, Throwable cause) {
super(message, cause);
errorMsg=message;
}

public SysException(String message) {
super(message);
errorMsg=message;
}

public SysException(Throwable cause) {
super(cause);
}

}


ServiceException.java:
package cn.edu.hpu.tax.core.exception;

public class ServiceException extends SysException{

public ServiceException() {
//业务层的默认错误信息
super("业务操作错误!");
}

public ServiceException(String message) {
super(message);
}

}


ActionException.java:
package cn.edu.hpu.tax.core.exception;

public class ActionException extends SysException{

public ActionException() {
super("请求发生错误!");
}

public ActionException(String message) {
super(message);
}

}


我们下面来使用一下这些异常类,我们在UserServiceImpl中故意出一个错误:
@Override
public List<User> findObjects() throws ServiceException{
try {
int i = 1 / 0;
} catch (Exception e) {
throw new ServiceException("service 出错!"+e.getMessage());
}
return userDao.findObjects();
}


然后在Action层捕获异常:
//列表页面
public String listUI() throws SysException{
try {
userList=userService.findObjects();
} catch (ServiceException e) {
throw new ActionException("action 出现异常!"+e.getMessage());
}
return "listUI";
}


接下来我们配置总的全局异常处理配置,我们在struts的配置文件struts.xml中加入以下代码:
<!-- 配置全局结果集异常映射 -->
<package name="base-default" extends="struts-default">
<!-- 全局返回结果 -->
<global-results>
<result name="sysError">/WEB-INF/jsp/error.jsp</result>
<result name="input">/WEB-INF/jsp/error.jsp</result>
</global-results>

<!-- 全局异常映射 -->
<global-exception-mappings>
<exception-mapping result="sysError" exception="cn.edu.hpu.tax.core.exception.SysException"/>
<exception-mapping result="input" exception="java.lang.Exception"/>
</global-exception-mappings>
</package>


然后编写error.jsp界面:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>系统异常信息</title>
</head>

<body>
<img src="<%=request.getContextPath() %>/images/common/error.jpg">
<br>
<s:if test="exception.errorMsg != '' && exception.errorMsg != null">
<s:property value="exception.errorMsg"/>
</s:if>
<s:else>
操作失败!<s:property value="exception.message"/>
</s:else>
</body>
</html>


然后让我们的user的struts配置中使用我们的异常处理(把extends从struts-default改为base-default):
<package name="user-action" namespace="/tax" extends="base-default">


然后我们查看用户列表来测试一下:



发现弹出了我们自定义的错误界面,并且阐述了哪几层出现错误,最终错误的原因。

转载请注明出处:http://blog.csdn.net/acmman/article/details/49454059
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: