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

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

 




 

对不起,系统发生了未知的错误



 

${requestScope.errorMsg}

 

 

 



 

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

 


 /Web/common/page/error.jsp


  

 

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

  以上异常拦截器可以使用其它很多技术替换:比如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;
   }

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