【SSH项目实战】国税协同平台-9.全局异常映射-阿里云开发者社区

开发者社区> 安全> 正文
登录阅读全文

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

简介:
上次我们的校验工作已经完成,下面我们谈谈系统异常的处理。

假设我们在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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
+ 订阅

云安全开发者的大本营

其他文章
最新文章
相关文章