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

noahxinhao 2013-06-28 11:30:59
项目中要捕获一些未捕获的异常 现在的情况是有的时候能捕获异常 实在web.xml中配置的错误处理,ajax请求的服务器产生的异常根本无法拦截 后台报了一堆异常信息但是前台根本没有跳转 怎么破
...全文
236 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
weiythi 2013-07-08
  • 打赏
  • 举报
回复
在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();
	}
luojitao1020 2013-07-08
  • 打赏
  • 举报
回复
引用 10 楼 ayong95 的回复:
ajax请求是无法跳转页面的,ajax请求到后台,后台发生了异常没有作处理,前台也没有得到返回结果,倒致系统该功能挂掉,你应该在后台捕获异常,返回异常信息和错误代码给ajax,前台判断如果是异常,则直接重定向到错误页面,并将错误代码和错误信息带过去,如果不是,则进入你的业务逻辑代码中。
+1 就是这个节奏
noahxinhao 2013-07-07
  • 打赏
  • 举报
回复
引用 12 楼 xukaihua2006 的回复:
最好的解决方案是采用struts2框架,在action中将异常抛出,然后用异常拦截器拦截异常统一处理。
呵呵 status的异常处理我会做,但是现在的项目不用status前台全是html页面 与后台的数据交互都是用ajax 所以status那一套东西根本没用
风萧萧 2013-07-07
  • 打赏
  • 举报
回复
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);
  }
侠龙 2013-06-29
  • 打赏
  • 举报
回复
最好的解决方案是采用struts2框架,在action中将异常抛出,然后用异常拦截器拦截异常统一处理。
m443062375 2013-06-29
  • 打赏
  • 举报
回复
楼上+1,ajax请求后台,后台发生异常是不会处理的,除非你后台能返回异常信息给ajax。
noahxinhao 2013-06-28
  • 打赏
  • 举报
回复
引用 1 楼 forgetsam 的回复:
除非你ajax不访问本地代码,否则我想不出来为什么没法捕获。 闲要改的代码太多就用AOP。
AOP?不太懂 能不能讲清楚一些 谢拉
forgetsam 2013-06-28
  • 打赏
  • 举报
回复
除非你ajax不访问本地代码,否则我想不出来为什么没法捕获。 闲要改的代码太多就用AOP。
ayong95 2013-06-28
  • 打赏
  • 举报
回复
ajax请求是无法跳转页面的,ajax请求到后台,后台发生了异常没有作处理,前台也没有得到返回结果,倒致系统该功能挂掉,你应该在后台捕获异常,返回异常信息和错误代码给ajax,前台判断如果是异常,则直接重定向到错误页面,并将错误代码和错误信息带过去,如果不是,则进入你的业务逻辑代码中。
kemucc 2013-06-28
  • 打赏
  • 举报
回复
你是ajax完了,想要父窗口跳转到错误页面?
noahxinhao 2013-06-28
  • 打赏
  • 举报
回复
引用 7 楼 gb19861012 的回复:
可以考虑ajax直接返回错误页面的代码,不过这样就很麻烦咯
就是这样做很麻烦所以才不想要这么做,好像ajax请求跟普通的form表单请求的方式是不同的,测试ajax请求让它产生异常之后直接sendredict都不能跳转到错误页面
Ciffer 2013-06-28
  • 打赏
  • 举报
回复
可以考虑ajax直接返回错误页面的代码,不过这样就很麻烦咯
noahxinhao 2013-06-28
  • 打赏
  • 举报
回复
引用 4 楼 gb19861012 的回复:
意见是后台对异常进行捕获整理,作为消息返回前台,然后前台判断,想输出就直接输出,要跳转页面就自己再请求就行
如果是这样的话 每次都要进行判断 然后每次都要返回错误信息 这样做的不是太麻烦了吗 现在要做的就是只要后台打印错误堆栈信息 前台就跳转到错误页面
noahxinhao 2013-06-28
  • 打赏
  • 举报
回复
引用 4 楼 gb19861012 的回复:
意见是后台对异常进行捕获整理,作为消息返回前台,然后前台判断,想输出就直接输出,要跳转页面就自己再请求就行
不可以的吗 但是有的时候是可以跳转到提示页面的啊
Ciffer 2013-06-28
  • 打赏
  • 举报
回复
意见是后台对异常进行捕获整理,作为消息返回前台,然后前台判断,想输出就直接输出,要跳转页面就自己再请求就行
Ciffer 2013-06-28
  • 打赏
  • 举报
回复
ajax你还指望怎么跳转页面

81,091

社区成员

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

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