Java Web项目整体异常处理机制

发表于:2012-9-14 09:54

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:luqin1988    来源:51Testing软件测试网采编

分享:

  需要注意的是:在使用instanceof判断异常类型的时候一定要从子到父依次找,比如BaseException继承与RuntimeException,则必须首先判断是否是BaseException再判断是否是RuntimeException。

  最后在error JSP页面显示具体的错误消息即可:

<body>
<s:if test="%{#request.errorMsg==null}">
 <p>对不起,系统发生了未知的错误</p>
</s:if>
<s:else>
 <p>${requestScope.errorMsg}</p>
</s:else>
</body>

  以上方式可以拦截后台代码所有的异常,但如果出现数据库连接异常时不能被捕获的,大家可以使用struts2的全局异常处理机制来处理:

<global-results>
 <result name="error" >/Web/common/page/error.jsp</result>
</global-results>
  
<global-exception-mappings>
 <exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings>

  上面这是一个很简单的异常拦截器,大家可以使用自定义异常,那样会更灵活一些。

  以上异常拦截器可以使用其它很多技术替换:比如spring aop,servlet filter等,根据项目实际情况处理。

  【补充】ajax也可以进行拦截,但是因为ajax属于异步操作,action通过response形式直接把数据返回给ajax回调函数,如果发生异常,ajax是不会执行页面跳转的,所以必须把错误信息返回给回调函数,我针对json数据的ajax是这样做的:

   /**
    * 读取文件,获取对应错误消息
    */
   HttpServletResponse response = (HttpServletResponse)actioninvocation.getInvocationContext().get(StrutsStatics.HTTP_RESPONSE);
   response.setCharacterEncoding(Constants.ENCODING_UTF8);
   /**
    * 发送错误消息到页面
    */
   PrintWriter out;
   try {
    out = response.getWriter();
    Message msg = new Message(errorMsg);
    //把异常信息转换成json格式返回给前台
    out.print(JSONObject.fromObject(msg).toString());
   } catch (IOException e1) {
    throw e;
   }

  以上是个人拙见,勿拍砖,谢谢。

33/3<123
2023测试行业从业人员调查问卷已开启,千元大奖正在等你~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号