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{}
而且还都要如上那样判断是那种异常。代码看起来不是很简洁。
其次呢:就是页面了,页面都是到一个统一的页面,虽然错误提示信息不一样,但是始终感觉用户体验不好
比如说:
现在在一个插入页面,我填写了很多信息,准备提交(点击提交按钮后),这时候正好数据库关掉了(假如存在这种情况),页面马上就到了错误提示页面。用户只有再到添加页面去,这样之前填写的信息都没有了需要再次填写。不知道大家这个是怎么处理的!
谢谢给位的良言!!!!!所有分都献上了.....
首先封装了一个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{}
而且还都要如上那样判断是那种异常。代码看起来不是很简洁。
其次呢:就是页面了,页面都是到一个统一的页面,虽然错误提示信息不一样,但是始终感觉用户体验不好
比如说:
现在在一个插入页面,我填写了很多信息,准备提交(点击提交按钮后),这时候正好数据库关掉了(假如存在这种情况),页面马上就到了错误提示页面。用户只有再到添加页面去,这样之前填写的信息都没有了需要再次填写。不知道大家这个是怎么处理的!
谢谢给位的良言!!!!!所有分都献上了.....
...全文
相关推荐
JAVAEE5API开发文档
在实际项目中,结合设计模式和最佳实践,可以更好地利用JAVAEE5提供的功能,构建高效、可扩展的企业级应用。
简单纯粹的Spring MVC架构J2EE项目
- **异常处理**:全局异常处理器可以统一处理应用中的异常情况。 - **数据验证**:通过 Hibernate Validator 或 JSR-303 实现数据验证。
j2ee学习过程~~~~~~~~~~~~~~~~~~~
这包括但不限于异常处理、输入输出(I/O)流、多线程和集合类的使用。异常处理是Java程序中必不可少的部分,理解try-catch-finally结构,以及如何捕获和处理不同类型的异常。
JAVAEE 架构图
Spring提供了全面的解决方案,iBatis注重数据访问层的灵活性,而Struts1则是在Web开发中实现MVC模式的一种方式。了解和掌握这些框架,对于进行JAVAEE开发是非常重要的。
2018年最新传智博客黑马程序员JavaEE49期全套视频,亲测有效
**发展历程**:自1998年Sun Microsystems首次推出J2EE以来,JavaEE经历了多次重大更新与演进。至2017年,JavaEE 8发布,标志着JavaEE正式进入微服务时代。


