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

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


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

系统可能出现的异常:(异常分类)
dao: 比较致命的操作异常,是会有很大可能影响整次的请求
service: 业务层的异常信息需要自定义
action: 控制层的异常信息需要自定义

我们在核心代码包中创建我们的全局异常以及各层异常处理类:
SysException.java:
[java]  view plain copy
  1. package cn.edu.hpu.tax.core.exception;  
  2.   
  3. public abstract class SysException extends Exception{  
  4.   
  5.     //错误信息  
  6.     private String errorMsg;  
  7.       
  8.     public String getErrorMsg() {  
  9.         return errorMsg;  
  10.     }  
  11.   
  12.   
  13.     public void setErrorMsg(String errorMsg) {  
  14.         this.errorMsg = errorMsg;  
  15.     }  
  16.       
  17.     //下面几个全是不同的构造方法  
  18.     public SysException() {  
  19.         super();  
  20.         // TODO Auto-generated constructor stub  
  21.     }  
  22.   
  23.   
  24.     public SysException(String message, Throwable cause,  
  25.             boolean enableSuppression, boolean writableStackTrace) {  
  26.         super(message, cause, enableSuppression, writableStackTrace);  
  27.         // TODO Auto-generated constructor stub  
  28.     }  
  29.   
  30.   
  31.     public SysException(String message, Throwable cause) {  
  32.         super(message, cause);  
  33.         errorMsg=message;  
  34.     }  
  35.   
  36.   
  37.     public SysException(String message) {  
  38.         super(message);  
  39.         errorMsg=message;  
  40.     }  
  41.   
  42.   
  43.     public SysException(Throwable cause) {  
  44.         super(cause);  
  45.     }  
  46.       
  47. }  

ServiceException.java:
[java]  view plain copy
  1. package cn.edu.hpu.tax.core.exception;  
  2.   
  3. public class ServiceException extends SysException{  
  4.   
  5.   
  6.     public ServiceException() {  
  7.         //业务层的默认错误信息  
  8.         super("业务操作错误!");  
  9.     }  
  10.   
  11.   
  12.     public ServiceException(String message) {  
  13.         super(message);  
  14.     }  
  15.       
  16. }  

ActionException.java:
[java]  view plain copy
  1. package cn.edu.hpu.tax.core.exception;  
  2.   
  3. public class ActionException extends SysException{  
  4.   
  5.     public ActionException() {  
  6.         super("请求发生错误!");  
  7.     }  
  8.   
  9.     public ActionException(String message) {  
  10.         super(message);  
  11.     }  
  12.       
  13. }  

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

然后在Action层捕获异常:
[java]  view plain copy
  1. //列表页面  
  2. public String listUI() throws SysException{  
  3.     try {  
  4.         userList=userService.findObjects();  
  5.     } catch (ServiceException e) {  
  6.         throw new ActionException("action 出现异常!"+e.getMessage());  
  7.     }  
  8.     return "listUI";  
  9. }  

接下来我们配置总的全局异常处理配置,我们在struts的配置文件struts.xml中加入以下代码:
[html]  view plain copy
  1. <!-- 配置全局结果集异常映射 -->  
  2. <package name="base-default" extends="struts-default">  
  3.     <!-- 全局返回结果 -->  
  4.     <global-results>  
  5.         <result name="sysError">/WEB-INF/jsp/error.jsp</result>  
  6.         <result name="input">/WEB-INF/jsp/error.jsp</result>  
  7.     </global-results>  
  8.       
  9.     <!-- 全局异常映射 -->  
  10.     <global-exception-mappings>  
  11.         <exception-mapping result="sysError" exception="cn.edu.hpu.tax.core.exception.SysException"/>  
  12.         <exception-mapping result="input" exception="java.lang.Exception"/>  
  13.     </global-exception-mappings>  
  14. </package>  

然后编写error.jsp界面:
[html]  view plain copy
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  2. <%@ taglib prefix="s" uri="/struts-tags" %>  
  3.   
  4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  5. <html>  
  6.   <head>  
  7.     <title>系统异常信息</title>  
  8.   </head>  
  9.     
  10.   <body>  
  11.     <img src="<%=request.getContextPath() %>/images/common/error.jpg">  
  12.     <br>  
  13.     <s:if test="exception.errorMsg != '' && exception.errorMsg != null">  
  14.         <s:property value="exception.errorMsg"/>  
  15.     </s:if>  
  16.     <s:else>  
  17.         操作失败!<s:property value="exception.message"/>  
  18.     </s:else>  
  19.   </body>  
  20. </html>  

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

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


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值