经常要使用到ServletException和PersistenceException,亲们讲解一下

解决方案 »

  1.   

    可以从内往外抛action时补获给出用户一个提示  比如 xxx失败请联系管理人员...
      

  2.   

    不同层的异常要转换,比如在logic或service层将PersistenceException转换为DataAccessException,因为异常也是接口的一个方面。
      

  3.   

    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>
      

  4.   

    经常要使用到ServletException和PersistenceException?
    经常使用到是啥意思哪?
    如果是经常出这种异常,哪就去找指定的地方