日期:2014-05-19  浏览次数:20688 次

j2ee项目中的异常处理方式
小弟子啊做项目项目采用 jsp+servler+jdbc的方式做的。功能什么的一般都能解决,但是不知道项目中的异常该如何处理 我是如下做的不知道对不对:
首先封装了一个ConnectionJdbc(专门用来做连接的)这个类里面抛出一个自定义的DaoException.部分如下:
     public static  Connection getConn()   {
        Connection  conn=null;
try {
conn=DriverManager.getConnection(url, userName, passworld);
} catch (SQLException e) {
log.error("数据库连接异常",e);
    throw new DaoException(e);//数据库连接的异常
    
}
    return conn;
    }
接下来就是Dao层。这一层中我每个方法(增,删,改,查)都捕获了异常 举例如下:
     public Project getOneProject(int id){
  Project project=new Project();
      try {
  conn =  ConnectionJDBC.getInstance().getConn();
  String sql="XXXXXXXXXXXXXXXXXXXX";
  ps=conn.prepareStatement(sql)
  rs=ps.executeQuery();
  while(rs.next()){
  project.setPROJECT_NO(rs.getInt("PROJECT_NO"));
  project.setTITLE(rs.getString("TITLE"));
  }
} catch (SQLException e) {
//throw new DaoException(e);到底这里该抛哪一种呢???我是抛的下面那种
               throw new ParamException(e);//自己定义的异常表示参数有问题导致sql异常
}finally{
  ConnectionJDBC.getInstance().closConn(conn,ps, rs);//关闭连接
}
  return project;
 }
接下里是servlet:这个里面只有有用到Dao的我都捕获了异常 举例如下:
private void sureUpdatePwd(HttpServletRequest request,
HttpServletResponse response) throws IOExceptionServletException {
try {
 //业务操作
} catch (Exception e) {
  //异常发生
                          if (e instanceof DaoException) {
  request.setAttribute("error", "数据库连接失败");
           } else if (e instanceof ParamException) {
   request.setAttribute("error","参数异常");
           } else {
   request.setAttribute("error", "未知异常");
           }
          request.getRequestDispatcher("/WEB-INF/common/message_prompt.jsp")
.forward(request, response);//统一转到一个异常显示页面
}
     }
整个思路就是这个样子,但是这样做我发现一些问题。
首先是这样的工作量很大:每个dao里面的方法都要try {}catch{} servlet中也差不多都要try {}catch{}
而且还都要如上那样判断是那种异常。代码看起来不是很简洁。
其次呢:就是页面了,页面都是到一个统一的页面,虽然错误提示信息不一样,但是始终感觉用户体验不好
比如说:
   现在在一个插入页面,我填写了很多信息,准备提交(点击提交按钮后),这时候正好数据库关掉了(假如存在这种情况),页面马上就到了错误提示页面。用户只有再到添加页面去,这样之前填写的信息都没有了需要再次填写。不知道大家这个是怎么处理的!
谢谢给位的良言!!!!!所有分都献上了.....