j2ee项目中的异常处理方式

阿诺 2013-01-31 10:05:31
小弟子啊做项目项目采用 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{}
而且还都要如上那样判断是那种异常。代码看起来不是很简洁。
其次呢:就是页面了,页面都是到一个统一的页面,虽然错误提示信息不一样,但是始终感觉用户体验不好
比如说:
现在在一个插入页面,我填写了很多信息,准备提交(点击提交按钮后),这时候正好数据库关掉了(假如存在这种情况),页面马上就到了错误提示页面。用户只有再到添加页面去,这样之前填写的信息都没有了需要再次填写。不知道大家这个是怎么处理的!
谢谢给位的良言!!!!!所有分都献上了.....
...全文
245 12 点赞 打赏 收藏 举报
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
a5237606 2013-01-31
抛出是好方法·、,
  • 打赏
  • 举报
回复
a5237606 2013-01-31
抛出是好方法·、,
  • 打赏
  • 举报
回复
yxk790302 2013-01-31
是我来领分了啊
  • 打赏
  • 举报
回复
妖异的邪 2013-01-31
捕捉异常处理,或者全部抛出,在某个类里处理,或者友好页面提示
  • 打赏
  • 举报
回复
june900430 2013-01-31
我想多半楼主是想确认从页面获取的数据是否正确是吧? 1.可以考虑在servlet上做数据检查,检查格式ok了再调用dao,或者是页面上做简单的数据校验 2.要灵活使用bean,实体对象,通过实体来保存参数传递参数 3.同意楼上的说法,在xml上配置错误页面,例如:
<!-- Error Page定义 -->
	<error-page>
		<error-code>500</error-code>
		<location>/commons/error/error.jsp</location>
	</error-page>

	<error-page>
		<error-code>404</error-code>
		<location>/commons/error/error.jsp</location>
	</error-page>

	<error-page>
		<error-code>403</error-code>
		<location>/commons/error/error.jsp</location>
	</error-page>

	<error-page>
		<exception-type>java.lang.RuntimeException</exception-type>
		<location>/commons/error/error.jsp</location>
	</error-page>
  • 打赏
  • 举报
回复
sgyyz 2013-01-31
我觉得你如果嫌麻烦,那你就要确定你要在那一层去捕获你的异常。 如果你觉得在Dao这一层捕获麻烦,你可以统一的抛向外层,在servlet里面去catch,然后处理。 但是500的错最好在servlet里面捕获了,不然会影响页面显示。
  • 打赏
  • 举报
回复
阿诺 2013-01-31
嗯 好像好像有点模模糊糊..........能说说你们大家是怎么做的么!我想大家应该明白我的困惑在哪
  • 打赏
  • 举报
回复
herestay 2013-01-31
1、首先你要决定在哪里捕捉异常。在不需要处理的地方将异常抛出:throws exception 2、关于数据保存,如果是使用ajax,提交表单有异常可以捕捉。 3、通用的一些异常可以在web里面配置,根据不同异常类型对应处理。
  • 打赏
  • 举报
回复
菖蒲芭芭 2013-01-31
除了不可预知的系统错误才转到systemerror画面, 其他的业务错误应该就在发生错误的画面上报出来, 这样再保存住发生错误前输入的值就可以了。。 还有只要在servlet里catch就可以了。。。
  • 打赏
  • 举报
回复
阿诺 2013-01-31
还是木有人来...
  • 打赏
  • 举报
回复
阿诺 2013-01-31
在线等着 不要沉了啊
  • 打赏
  • 举报
回复
balabala_sean 2013-01-31
dao的异常要给service service再给servlet 最后由servlet来处理就OK了。 也可以在dao之后catch到SQLException之后, catch(SQLException sqle){ throw new RuntimeException("dao异常"); }
  • 打赏
  • 举报
回复
相关推荐
发帖
Java EE
加入

6.7w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
申请成为版主
帖子事件
创建了帖子
2013-01-31 10:05
社区公告
暂无公告