java web异常处理方式总结

旧城等待, 2022-03-11 03:40 272阅读 0赞

在网上找了一下午的资料,终于清楚地了解在struts2+hibernate3+spring3下比较完善的异常处理方式,有借鉴的东西,也有些是自己修改后的东东,废话不多说了,看下图:

需要的东东有:Action类、service类、异常拦截器ExceptionFilter、自定义异常类MyException、错误跳转页面error.jsp

首先,Action类

  1. /**
  2. * 查询机票
  3. * @return
  4. * @throws MyException
  5. * @throws Exception
  6. */
  7. public String searchTicket() throws MyException
  8. {
  9. try {
  10. baseService.findFlightInfos(searchTicketDto);
  11. } catch (Exception e) {
  12. // TODO Auto-generated catch block
  13. throw new MyException(101);// 抛出自定义异常
  14. }
  15. return "success";
  16. }

以上baseService.findFlightInfos方法的关键代码

  1. public List<FlightInfoDto> findFlightInfos(FlightInfoDto dto) {
  2. // TODO Auto-generated method stub
  3. int i = 5/0;// 此条语句作为测试
  4. try{
  5. // 数据库操作或一般操作
  6. } catch (Exception e) {
  7. // TODO Auto-generated catch block
  8. }
  9. return result;
  10. }

接下来,异常拦截器ExceptionFilter

  1. /**
  2. *
  3. */
  4. package com.ab.permission.Filter;
  5. import java.io.IOException;
  6. import java.lang.reflect.InvocationTargetException;
  7. import java.sql.SQLException;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpSession;
  10. import org.apache.struts2.ServletActionContext;
  11. import org.apache.struts2.StrutsStatics;
  12. import org.springframework.dao.DataAccessException;
  13. import com.ab.permission.exception.MyException;
  14. import com.opensymphony.xwork2.ActionInvocation;
  15. import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
  16. import com.opensymphony.xwork2.interceptor.StaticParametersInterceptor;
  17. import com.sun.org.apache.commons.logging.Log;
  18. import com.sun.org.apache.commons.logging.LogFactory;
  19. /**
  20. * 功能描述:异常拦截器
  21. *
  22. * @author: LRR
  23. * @date: 2014-04-07 下午05:09:25
  24. */
  25. public class ExceptionFilter extends AbstractInterceptor {
  26. private HttpServletRequest request;
  27. private HttpSession session;
  28. /**
  29. *
  30. */
  31. private static final long serialVersionUID = 1L;
  32. /**
  33. * 功能描述:异常拦截器,对异常进行相关处理
  34. */
  35. @Override
  36. public String intercept(ActionInvocation actioninvocation) throws Exception {
  37. request = ServletActionContext.getRequest();
  38. String result = null; // Action的返回值
  39. String errorMsg = "未知错误!";
  40. try {
  41. // 运行被拦截的Action,期间如果发生异常会被catch住
  42. result = actioninvocation.invoke();
  43. return result;
  44. }
  45. catch (DataAccessException ex) {
  46. errorMsg = "数据库操作失败";
  47. } catch (NullPointerException ex) {
  48. errorMsg = "调用了未经初始化的对象或者是不存在的对象";
  49. } catch (IOException ex) {
  50. errorMsg = "IO异常";
  51. } catch (ClassNotFoundException ex) {
  52. errorMsg = "指定的类不存在";
  53. } catch (ArithmeticException ex) {
  54. errorMsg = "数学运算异常";
  55. } catch (ArrayIndexOutOfBoundsException ex) {
  56. errorMsg = "数组下标越界";
  57. } catch (IllegalArgumentException ex) {
  58. errorMsg = "方法的参数错误";
  59. } catch (ClassCastException ex) {
  60. errorMsg = "类型强制转换错误";
  61. } catch (SecurityException ex) {
  62. errorMsg = "违背安全原则异常";
  63. } catch (SQLException ex) {
  64. errorMsg = "操作数据库异常";
  65. } catch (NoSuchMethodError ex) {
  66. errorMsg = "方法末找到异常";
  67. } catch (InternalError ex) {
  68. errorMsg = "Java虚拟机发生了内部错误";
  69. } catch (InvocationTargetException ex) {
  70. errorMsg = "程序内部错误,操作失败,";
  71. } catch (MyException e) {
  72. e.printStackTrace(); //开发时打印异常信息,方便调试
  73. errorMsg = e.getMessage().trim();
  74. } catch (Exception ex) {
  75. errorMsg = "程序内部错误,操作失败,";
  76. }
  77. errorMsg = "错误信息:"+errorMsg;
  78. /**
  79. * 发送错误消息到页面
  80. */
  81. request.setAttribute("tip", errorMsg);
  82. return "error";
  83. }
  84. }

错误跳转页面error.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%@taglib prefix="s" uri="/struts-tags"%>
  3. <%
  4. String path = request.getContextPath();
  5. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  6. %>
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  8. <html>
  9. <head>
  10. <base href="<%=basePath%>">
  11. <title>出错了</title>
  12. <meta http-equiv="pragma" content="no-cache">
  13. <meta http-equiv="cache-control" content="no-cache">
  14. <meta http-equiv="expires" content="0">
  15. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  16. <meta http-equiv="description" content="This is my page">
  17. <!--
  18. <link rel="stylesheet" type="text/css" href="styles.css">
  19. -->
  20. </head>
  21. <body>
  22. ${ tip } <br>
  23. </body>
  24. </html>

最后就是struts.xml了

  1. <global-results>
  2. <result name="error">/error.jsp</result>
  3. </global-results>
  4. <!-- 定义全局异常映射 -->
  5. <global-exception-mappings>
  6. <exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>
  7. </global-exception-mappings>
  8. <interceptors>
  9. <interceptor name="exceptionManager" class="com.ab.permission.Filter.ExceptionFilter"/>
  10. <interceptor-stack name="authorityStack">
  11. <interceptor-ref name="defaultStack" />
  12. </interceptor-ref>
  13. <interceptor-ref name="exceptionManager" />
  14. </interceptor-stack>
  15. </interceptors>

至此工作已做完,最后测试结果可自行测试。

发表评论

表情:
评论列表 (有 0 条评论,272人围观)

还没有评论,来说两句吧...

相关阅读

    相关 java web异常处理

    1、异常处理 默认规则 默认情况下,Spring Boot提供`/error`处理所有错误的映射 对于机器客户端,它将生成JSON响应,其中包含错误,H

    相关 Java异常处理总结

                背景               ![format_png][] 最近专门负责团队的项目质量。我在治理异常日志过程中,总结了一下Java的异常处理。