异常捕捉

wufeifei_1985 2010-06-23 04:10:34
需求:在catch的时候记录异常。
问题描述:现在我做的是在finally的时候通过ls_errmsg串来记录,但是发现问题在finally写的时候会出现问题,如插入,删除的时候无响应。如果在各个catch后面都记录的话这样同样的代码要重复多次,希望能得到指点。


public ActionForward doSave(Action action, HttpServletRequest request,HttpServletResponse response) throws Throwable {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
String policemanid= (String)request.getSession().getAttribute(Constants.ACC_LOGINNAME);
Hashtable requestData = WebUtil.getRequestData(request);
requestData.put("policemanid", policemanid);
String ls_errmsg = null, ls_ret = null;
try {
AddressBusiness business = (AddressBusiness)BasBusinessFactory
.getBusiness(REG_CODE);
business.doSave(requestData);
RecordSysOperate.setLog(requestData,"保存", Constants.NORMAL_POLICE, "保存核查地址", "普通民警保存核查地点");
} catch (BusinessException e) {
ls_errmsg = e.getMessage();
} catch (DaoException e) {
ls_errmsg = e.getMessage();
} catch (Exception e) {
ls_errmsg = "失败";
} finally {
// RecordSysOperate.setErrorLog(requestData,"保存", "保存核查地址",ls_errmsg);
ls_ret = "{\"success\":" + (ls_errmsg == null ? "true" : "false")
+ ",\"errmsg\":\"" + (ls_errmsg == null ? "" : ls_errmsg)
+ "\"}";
}
PrintWriter out = response.getWriter();
out.print(ls_ret);
out.close();
return null;
}

...全文
58 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wufeifei_1985 2010-06-23
  • 打赏
  • 举报
回复
谢谢楼上的,
我在finally加个判断就行了,,
if(ls_errmsg != null){
RecordSysOperate.setErrorLog(requestData,"保存", "保存核查地址",ls_errmsg);
}
stl0 2010-06-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wufeifei_1985 的回复:]

像doSave()方法,我在finally的时候做记录
RecordSysOperate.setErrorLog(requestData,"保存", "保存核查地址",ls_errmsg);
当我在调用到doSave()方法的时候,整个方法就没有相应了,也不报错。
[/Quote]
可能当ls_errmsg为NULL时,你的setErrorLog方法会抛出异常,而这个异常没有在doSave中捕获,直接throw出去了
stl0 2010-06-23
  • 打赏
  • 举报
回复
不知道我理解对不对

public ActionForward doSave(Action action, HttpServletRequest request,HttpServletResponse response) throws Throwable {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
String policemanid= (String)request.getSession().getAttribute(Constants.ACC_LOGINNAME);
Hashtable requestData = WebUtil.getRequestData(request);
requestData.put("policemanid", policemanid);
String ls_errmsg = null, ls_ret = null;
boolean resFlg = true; //DB操作结果
try {
AddressBusiness business = (AddressBusiness)BasBusinessFactory
.getBusiness(REG_CODE);
business.doSave(requestData);
RecordSysOperate.setLog(requestData,"保存", Constants.NORMAL_POLICE, "保存核查地址", "普通民警保存核查地点");
} catch (BusinessException e) {
resFlg = false;
ls_errmsg = e.getMessage();
} catch (DaoException e) {
resFlg = false;
ls_errmsg = e.getMessage();
} catch (Exception e) {
resFlg = false;
ls_errmsg = "失败";
} finally {
if(!resFlg){ //判断DB操作结果
RecordSysOperate.setErrorLog(requestData,"保存", "保存核查地址",ls_errmsg);
ls_ret = ls_errmsg;
}else{
ls_ret = "true"
}
}
PrintWriter out = response.getWriter();
out.print(ls_ret);
out.close();
return null;
}
wufeifei_1985 2010-06-23
  • 打赏
  • 举报
回复
像doSave()方法,我在finally的时候做记录
RecordSysOperate.setErrorLog(requestData,"保存", "保存核查地址",ls_errmsg);
当我在调用到doSave()方法的时候,整个方法就没有相应了,也不报错。
---------------------------------------------------------------------
我需要在方法抛出异常的时候记录日志,假如我在每个catch后面都加上
RecordSysOperate.setErrorLog(requestData,"保存", "保存核查地址",e.getMessage());
这句话,那它在doSave()方法里重复好多次,,有没有更好的策略,只做一次记录,捕捉到所有的异常??

closewbq 2010-06-23
  • 打赏
  • 举报
回复
你单步调试过吗?
为什么要

PrintWriter out = response.getWriter();
out.print(ls_ret);
out.close();


这么做?
valen_jia 2010-06-23
  • 打赏
  • 举报
回复
啥叫插入,删除的时候无响应
a312983516 2010-06-23
  • 打赏
  • 举报
回复
不懂什么意思

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧