项目中出现异常如何处理
经常要使用到
ServletException和PersistenceException,亲们讲解一下
------解决方案--------------------
1.	dao层
dao层异常处理的整体思路是:转为运行时异常(如果是就不用转了),抛出。可以分为两种情况:
1)	异常为运行时异常
如果异常本身就是运行时异常(大多数情况都是),自动抛出即可。
2)	异常不是运行时异常
如果不是运行时异常,我们需要将她转为自定义的运行时异常。自定义运行时异常类需要继承我们编写的异常基类:
public abstract class BaseException extends 
RuntimeException {
	private static final long serialVersionUID = 2761768844467932982L;
	public BaseException() {
		super();
	}
	public BaseException(String message, Throwable cause) {
		super(message, cause);
	}
	public BaseException(String message) {
		super(message);
	}
	public BaseException(Throwable cause) {
		super(cause);
	}
}
比方说我们现在自定义了一个异常类:RemoteCallException。在我们的dao层中有一个普通异常需要处理。
try{
//相应逻辑代码
}catch(
IOException e){
throw new RemoteCallException();
//日志记录
}
通过上述代码我们就将
非运行时异常转换为运行时异常并抛出。在我看来转为运行时异常更多的是为事务回滚去考虑,如果我们不抛出,那么service层认为我们的dao层没有问题,事务也就提交。在注解式的事务管理中,默认事务回滚的异常就为运行时异常。
2.	service层
service层抛出检查异常,此异常也为自定义的。我们统一为service层自定义一个已检查异常。如下:
public class ServiceException extends Exception{
	private static final long serialVersionUID = 1L;
	public ServiceException() {
		super();
	}
	public ServiceException(String message, Throwable cause) {
		super(message, cause);
	}
	public ServiceException(String message) {
		super(message);
	}
	public ServiceException(Throwable cause) {
		super(cause);
	}
}
在service层中抛出我们自定义的异常:
public void addUser(User user) throws ServiceException{
		userDao.saveUser(user);
}
在service层中抛出已检查异常,主要是考虑到如果我们继续抛出未检查异常,那么在action中可能不能得到处理。
3.	action层
在action层中try……catch…..异常,然后统一抛出。例子如下:
try{
		userService.addUser(user);
		}catch(Exception e){
			throw new ActionException(“开卡失败”);
		}
return SUCCESS;
ActionException的定义同SeviceException。
利用struts2拦截器去处理。
<global-exception-mappings><!—异常类和跳转页面配置 -->
	<exception-mapping result="error" exception="com.hxzx.card.exception.ServiceException"/>
</global-exception-mappings>
配置错误页面如下:
 <body>
 操作失败 ——${ exception.message}
 </body>