Dwr异常处理
今天在弄dwr的异常处理,想把java后台的异常信息,在浏览器展示出来,原来没处理这块,导致dwr一直报Error错误,也不知道是什么错,需要后台翻日志,现在改造了一下,终于把异常的堆栈信息加载到前台了。
?
Dwr在异常处理的时候,有很多种方式,全局的方式,部分函数的方式,具体的写—wr的官方网站上有说(http://directwebremoting.org/dwr/documentation/browser/errors.html),这里就不介绍了。
?
我这里用的是全局的方法,机配置一个全局的异常处理函数。如果java后台不做处理的话,那么Dwr的全局函数,只能显示你在Exception里写的消息,不在Exception里的消息,是无法显示出来的,这就对我们排错造成困难。
?
因此我对后台的异常信息作了处理,让java抛出的异常信息都记录下来
?
代码如下(客户端):
?
function errorHander(msg,ex){if(QH_LOADMASK){QH_LOADMASK.hide();}var errorMsg = "系统堆栈:\n"+msg;var stackMsg = "";var programMsg = '程序堆栈:\n--------------------------------\n';var continueCount = 0;for(var j=0; j<ex.stackTrace.length; j++){var obj = ex.stackTrace[j];stackMsg += "at "+ obj.className+"."+obj.methodName+"("+obj.fileName+" "+obj.lineNumber+")\n";}if(stackMsg != ""){Ext.Msg.show({title:'错误堆栈',//msg:"",//defaultTextHeight:500,width :900,icon:Ext.Msg.ERROR,buttons:Ext.Msg.OK,prompt:true,multiline:450,value:errorMsg+"\n"+programMsg +stackMsg,maxWidth:900});}}//配置DWR异常处理的全局处理函数DWREngine.setErrorHandler(errorHander);?服务端:
public int saveOrUpdateRecords(List records) throws DAOException {try {return (Integer)super.getHibernateTemplate().execute(new BatchSoUCallback(records));} catch (DataAccessException ex) {String msg = ExceptionStackTracePaser.paserStactTrace(ex);throw new DAOException("DataAccessException:" + msg);}}?
public class ExceptionStackTracePaser {/** * 描述:解析异常信息的堆栈信息,并将其转换为字符串 * @param ex * @return * 返回值:String */public static final String paserStactTrace(Exception ex){ByteArrayOutputStream outputStream = new ByteArrayOutputStream();PrintStream stream = new PrintStream(outputStream);ex.printStackTrace(stream);return ex.getMessage()+"\r\n"+outputStream.toString();}}?这样在前台就可以抓住其他部分的异常信息了。
?
注:ByteArrayOutputStream?用的是apache commons 的io包里面的类