在网上找了一下午的资料,终于清楚地了解在struts2+hibernate3+spring3下比较完善的异常处理方式,有借鉴的东西,也有些是自己修改后的东东,废话不多说了,看下图:
需要的东东有:Action类、service类、异常拦截器ExceptionFilter、自定义异常类MyException、错误跳转页面error.jsp
首先,Action类
/** * 查询机票 * @return * @throws MyException * @throws Exception */ public String searchTicket() throws MyException { try { baseService.findFlightInfos(searchTicketDto); } catch (Exception e) { // TODO Auto-generated catch block throw new MyException(101);// 抛出自定义异常 } return "success"; }
以上baseService.findFlightInfos方法的关键代码
public List<FlightInfoDto> findFlightInfos(FlightInfoDto dto) { // TODO Auto-generated method stub int i = 5/0;// 此条语句作为测试 try{ // 数据库操作或一般操作 } catch (Exception e) { // TODO Auto-generated catch block } return result; }
接下来,异常拦截器ExceptionFilter
/** * */ package com.ab.permission.Filter; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.sql.SQLException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import org.apache.struts2.StrutsStatics; import org.springframework.dao.DataAccessException; import com.ab.permission.exception.MyException; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; import com.opensymphony.xwork2.interceptor.StaticParametersInterceptor; import com.sun.org.apache.commons.logging.Log; import com.sun.org.apache.commons.logging.LogFactory; /** * 功能描述:异常拦截器 * * @author: LRR * @date: 2014-04-07 下午05:09:25 */ public class ExceptionFilter extends AbstractInterceptor { private HttpServletRequest request; private HttpSession session; /** * */ private static final long serialVersionUID = 1L; /** * 功能描述:异常拦截器,对异常进行相关处理 */ @Override public String intercept(ActionInvocation actioninvocation) throws Exception { request = ServletActionContext.getRequest(); String result = null; // Action的返回值 String errorMsg = "未知错误!"; try { // 运行被拦截的Action,期间如果发生异常会被catch住 result = actioninvocation.invoke(); return result; } catch (DataAccessException ex) { errorMsg = "数据库操作失败"; } catch (NullPointerException ex) { errorMsg = "调用了未经初始化的对象或者是不存在的对象"; } catch (IOException ex) { errorMsg = "IO异常"; } catch (ClassNotFoundException ex) { errorMsg = "指定的类不存在"; } catch (ArithmeticException ex) { errorMsg = "数学运算异常"; } catch (ArrayIndexOutOfBoundsException ex) { errorMsg = "数组下标越界"; } catch (IllegalArgumentException ex) { errorMsg = "方法的参数错误"; } catch (ClassCastException ex) { errorMsg = "类型强制转换错误"; } catch (SecurityException ex) { errorMsg = "违背安全原则异常"; } catch (SQLException ex) { errorMsg = "操作数据库异常"; } catch (NoSuchMethodError ex) { errorMsg = "方法末找到异常"; } catch (InternalError ex) { errorMsg = "Java虚拟机发生了内部错误"; } catch (InvocationTargetException ex) { errorMsg = "程序内部错误,操作失败,"; } catch (MyException e) { e.printStackTrace(); //开发时打印异常信息,方便调试 errorMsg = e.getMessage().trim(); } catch (Exception ex) { errorMsg = "程序内部错误,操作失败,"; } errorMsg = "错误信息:"+errorMsg; /** * 发送错误消息到页面 */ request.setAttribute("tip", errorMsg); return "error"; } }
错误跳转页面error.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>出错了</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> ${ tip } <br> </body> </html>
最后就是struts.xml了
<global-results> <result name="error">/error.jsp</result> </global-results> <!-- 定义全局异常映射 --> <global-exception-mappings> <exception-mapping result="error" exception="java.lang.Exception"></exception-mapping> </global-exception-mappings> <interceptors> <interceptor name="exceptionManager" class="com.ab.permission.Filter.ExceptionFilter"/> <interceptor-stack name="authorityStack"> <interceptor-ref name="defaultStack" /> </interceptor-ref> <interceptor-ref name="exceptionManager" /> </interceptor-stack> </interceptors>
至此工作已做完,最后测试结果可自行测试。
相关推荐
finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 13、sleep()...
安全:Java提供了丰富的安全特性,如禁止指针运算、自动内存管理和异常处理机制,以减少程序错误和恶意攻击的可能性。 可移植性:Java字节码可以在所有安装了JVM的设备上执行,从服务器到嵌入式系统,再到移动...
1.0 基础 Java 自学之...7.面试题有:例如==和equals的区别,print不为人知的秘密,重写toString方法,异常处理,迭代器原理,异常的嵌套,编译和运行时的区别,如何写出可读性更高的程序,在写项目时要注意什么?等等
书中精选了Java开发人员经常遇到的261个典型问题,涵盖了基本概念、环境配置、基本语法、异常处理、流操作、图形用户界面编程、网络编程、线程、序列化、数据库操作、Java Web程序设计等各方面的主题,并分别给出了...
安全:Java提供了丰富的安全特性,如禁止指针运算、自动内存管理和异常处理机制,以减少程序错误和恶意攻击的可能性。 可移植性:Java字节码可以在所有安装了JVM的设备上执行,从服务器到嵌入式系统,再到移动...
同时,Java还提供了自动内存管理和异常处理机制,使开发人员能够更轻松地编写高质量的代码。 总之,Java是一种功能强大、易学易用、具有广泛应用和强大跨平台特性的编程语言。它的设计目标是提供一种高效的开发工具...
java笔记:01.IDEA常用配置总结.md ...同时,Java还提供了自动内存管理和异常处理机制,使开发人员能够更轻松地编写高质量的代码。 总之,Java是一种功能强大、易学易用、具有广泛应用和强大跨平台特性的编
处理异常 643 Action的分类 643 Struts Action Mapping 646 使用ActionForward导航 647 Struts ActionForm Bean捕获表单数据 648 ActionForm的处理流程 649 Struts的其他组件 652 内容总结 653 独立实践 653 第三十...
主要介绍了Java的Struts框架的异常处理方法,Struts是Java的SSH三大web开发框架之一,需要的朋友可以参考下
前言:在前一篇《asp.net开发中常见公共捕获异常方式总结》,我们整理总结了asp.net服务端的异常处理。这一篇接着前文,简单总结并讨论一下javascript在客户端的异常处理。这样asp.net的服务端和客户端异常处理我们...
1.8 单根继承结构 1.9 容器 1.9.1 参数化类型(范型) 1.10 对象的创建和生命期 1.11 异常处理:处理错误 1.12 并发编程 1.13 Java与Internet 1.13.1 Web是什么 1.13.2 客户端编程 1.13.3 服务器端编程 1.22 总结 第...
涵盖了基本概念 环境配置 基本语法 异常处理 流操作 图形用户界面编程 网络编程 线程 序列化 数据库操作 java web程序设计等各方面的主题 并分别给出了详细的解答 而且结合代码示例阐明了技术要点 本书结构清晰 ...
安全:Java提供了丰富的安全特性,如禁止指针运算、自动内存管理和异常处理机制,以减少程序错误和恶意攻击的可能性。 可移植性:Java字节码可以在所有安装了JVM的设备上执行,从服务器到嵌入式系统,再到移动...
Java的操作原理,面向对象的概念,匿名对象:内部类,,单例设计,重载和覆盖的区别,异常的处理流程,字节流与字符流,内存操作流,正则表达式,web三大框架
1.0 基础 Java 自学之...7.面试题有:例如==和equals的区别,print不为人知的秘密,重写toString方法,异常处理,迭代器原理,异常的嵌套,编译和运行时的区别,如何写出可读性更高的程序,在写项目时要注意什么?等等
该种方式存在两个弊端,一是当后台无法获取文件或其他异常处理情况下,会导致页面跳转到访问路径下的无效空白页面。二是无法为前端提供有效的反馈信息,如下载成功、下载失败等。 本文提供的解决方案能够解决以上两...
//此语句会抛异常,需处理 System.out.println("您输入了文字:" + next); }catch(Exception e){} }} 数值保存方式: 正数= 二进制 负数= 补码 补码= 反码 +1 正数=负数的补码(反码+1) 反码= 非(二...
1.11 异常处理:处理错误 1.12 并发编程 1.13 Java与Internet 1.13.1 Web是什么 1.13.2 客户端编程 1.13.3 服务器端编程 1.22 总结 第2章 一切都是对象 2.1 用引用操纵对象 2.2 必须由你创建所有对象 2.2.1 存储到...
a)关系1.7 伴随多态的可互换对象1.8 单根继承结构1.9 容器1.9.1 参数化类型(范型)1.10 对象的创建和生命期1.11 异常处理:处理错误1.12 并发编程1.13 Java与Internet1.13.1 Web是什么1.13.2 客户端编程1.13.3 ...