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
IOException,
ServletException {
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{}
而且还都要如上那样判断是那种异常。代码看起来不是很简洁。
其次呢:就是页面了,页面都是到一个统一的页面,虽然错误提示信息不一样,但是始终感觉用户体验不好
比如说:
现在在一个插入页面,我填写了很多信息,准备提交(点击提交按钮后),这时候正好数据库关掉了(假如存在这种情况),页面马上就到了错误提示页面。用户只有再到添加页面去,这样之前填写的信息都没有了需要再次填写。不知道大家这个是怎么处理的!
谢谢给位的良言!!!!!所有分都献上了.....