当前位置:编程学习 > JAVA >>

项目整体异常处理 怎么破 ????

项目中要捕获一些未捕获的异常 现在的情况是有的时候能捕获异常 实在web.xml中配置的错误处理,ajax请求的服务器产生的异常根本无法拦截 后台报了一堆异常信息但是前台根本没有跳转 怎么破   --------------------编程问答-------------------- 除非你ajax不访问本地代码,否则我想不出来为什么没法捕获。

闲要改的代码太多就用AOP。 --------------------编程问答--------------------

引用 1 楼 forgetsam 的回复:
除非你ajax不访问本地代码,否则我想不出来为什么没法捕获。

闲要改的代码太多就用AOP。
AOP?不太懂 能不能讲清楚一些 谢拉 --------------------编程问答-------------------- ajax你还指望怎么跳转页面 --------------------编程问答-------------------- 意见是后台对异常进行捕获整理,作为消息返回前台,然后前台判断,想输出就直接输出,要跳转页面就自己再请求就行 --------------------编程问答--------------------
引用 4 楼 gb19861012 的回复:
意见是后台对异常进行捕获整理,作为消息返回前台,然后前台判断,想输出就直接输出,要跳转页面就自己再请求就行
不可以的吗 但是有的时候是可以跳转到提示页面的啊 --------------------编程问答--------------------
引用 4 楼 gb19861012 的回复:
意见是后台对异常进行捕获整理,作为消息返回前台,然后前台判断,想输出就直接输出,要跳转页面就自己再请求就行
如果是这样的话  每次都要进行判断 然后每次都要返回错误信息 这样做的不是太麻烦了吗  现在要做的就是只要后台打印错误堆栈信息 前台就跳转到错误页面 --------------------编程问答-------------------- 可以考虑ajax直接返回错误页面的代码,不过这样就很麻烦咯 --------------------编程问答--------------------
引用 7 楼 gb19861012 的回复:
可以考虑ajax直接返回错误页面的代码,不过这样就很麻烦咯
就是这样做很麻烦所以才不想要这么做,好像ajax请求跟普通的form表单请求的方式是不同的,测试ajax请求让它产生异常之后直接sendredict都不能跳转到错误页面 --------------------编程问答-------------------- 你是ajax完了,想要父窗口跳转到错误页面? --------------------编程问答-------------------- ajax请求是无法跳转页面的,ajax请求到后台,后台发生了异常没有作处理,前台也没有得到返回结果,倒致系统该功能挂掉,你应该在后台捕获异常,返回异常信息和错误代码给ajax,前台判断如果是异常,则直接重定向到错误页面,并将错误代码和错误信息带过去,如果不是,则进入你的业务逻辑代码中。 --------------------编程问答-------------------- 楼上+1,ajax请求后台,后台发生异常是不会处理的,除非你后台能返回异常信息给ajax。 --------------------编程问答-------------------- 最好的解决方案是采用struts2框架,在action中将异常抛出,然后用异常拦截器拦截异常统一处理。 --------------------编程问答--------------------
引用 12 楼 xukaihua2006 的回复:
最好的解决方案是采用struts2框架,在action中将异常抛出,然后用异常拦截器拦截异常统一处理。
呵呵  status的异常处理我会做,但是现在的项目不用status前台全是html页面 与后台的数据交互都是用ajax 所以status那一套东西根本没用 --------------------编程问答-------------------- I. 写一个拦截器,内容为:

intercept method:
if ("XMLHttpRequest".equalsIgnoreCase(request.getHeader("x-requested-with"))) {
  response.setContentType("application/x-json; charset=utf-8");
    try {
      return invocation.invoke();
    } catch (Exception e) {
e.printStackTrace();
JSONObject returnObj = new JSONObject();
returnObj.put("results", new JSONArray());
returnObj.put("success", false);
returnObj.put("errorMsg", e.getMessage());
response.getWriter().print(returnObj);
return null;
    }
} else {
    return invocation.invoke();
}

将拦截器配置到defaultStack之后,也就是让自己写的这个拦截器去拦截由ajax产生的exception


II.在自己的Action中去写自己需要实现的功能模块,如果需要使用ajax的话,则按如下模式进行编码

  // 进行自己的操作,然后得到结果result
  response.setContentType("application/x-json; charset=utf-8");
  JSONObject returnObj = new JSONObject();
  returnObj.put("results", result);
  returnObj.put("success", true);
  response.getWriter().print(returnObj);
  return NONE;




III.在JS中得到结果

  /*  回调函数
      1. 得到rsponseText
      2. 将responseText转换为JSON对象:json
  */
  if(json.success){
    // 进行正确的操作:json.results
  }else{
    alert(json.errorMsg);
  }
--------------------编程问答--------------------
引用 10 楼 ayong95 的回复:
ajax请求是无法跳转页面的,ajax请求到后台,后台发生了异常没有作处理,前台也没有得到返回结果,倒致系统该功能挂掉,你应该在后台捕获异常,返回异常信息和错误代码给ajax,前台判断如果是异常,则直接重定向到错误页面,并将错误代码和错误信息带过去,如果不是,则进入你的业务逻辑代码中。

+1 就是这个节奏 --------------------编程问答-------------------- 在action层中控制

public String managerLogOut() {
try {
                        ..........
result = JsonPack.mapToJsonData(rtnMap);
} catch (Exception e) {
result = JsonPack.exceptionToJson(e);
}
}



public static String exceptionToJson(Throwable e) {
JSONObject jsonData = new JSONObject();
jsonData.put(CommonConstant.JSON_LIST_RESULT_CODE,CommonConstant.JSON_LIST_RESULT_FAIL);
logger.error("系统内部异常", e);
jsonData.put(CommonConstant.ITEM_RSPCODE, ErrCode.SYSTEM_ERROR);
jsonData.put(CommonConstant.ITEM_RSPMSG, ErrDeal.getErrMsg(ErrCode.SYSTEM_ERROR));
jsonData.put(CommonConstant.JSON_LIST_MSG, ErrDeal.getErrMsg(ErrCode.SYSTEM_ERROR));
return jsonData.toString();
}
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,