`
1021082712
  • 浏览: 83940 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

java web异常处理方式总结

    博客分类:
  • SSH
阅读更多

在网上找了一下午的资料,终于清楚地了解在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>

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

 

 

2
0
分享到:
评论
2 楼 1021082712 2014-04-15  
当出现错误是,只需要给客户端打印简单的错误信息,所有我在action中直接抛出一个我自定义的异常,“Baseservice.findflightinfos方法自己就处理的异常”其实在那里面,我没处理,只是try和catch.至于spring事物的监控我不太懂,你可以上网搜搜资料!
1 楼 m124820430 2014-04-07  
Baseservice.findflightinfos方法自己就处理的异常。action 怎么获取的数据层的异常了。Spring 的事物也无法监控拉。

相关推荐

    java 面试题 总结

    finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 13、sleep()...

    Java 排序算法知识点总结.zip

    安全:Java提供了丰富的安全特性,如禁止指针运算、自动内存管理和异常处理机制,以减少程序错误和恶意攻击的可能性。 可移植性:Java字节码可以在所有安装了JVM的设备上执行,从服务器到嵌入式系统,再到移动...

    Java自学之路——超仔细含练习项目及源码 Java知识体系最强总结————含各个阶段的面试题

    1.0 基础 Java 自学之...7.面试题有:例如==和equals的区别,print不为人知的秘密,重写toString方法,异常处理,迭代器原理,异常的嵌套,编译和运行时的区别,如何写出可读性更高的程序,在写项目时要注意什么?等等

    你必须知道的261个java语言问题

    书中精选了Java开发人员经常遇到的261个典型问题,涵盖了基本概念、环境配置、基本语法、异常处理、流操作、图形用户界面编程、网络编程、线程、序列化、数据库操作、Java Web程序设计等各方面的主题,并分别给出了...

    Java知识点总结.zip

    安全:Java提供了丰富的安全特性,如禁止指针运算、自动内存管理和异常处理机制,以减少程序错误和恶意攻击的可能性。 可移植性:Java字节码可以在所有安装了JVM的设备上执行,从服务器到嵌入式系统,再到移动...

    java学习:10.Git总结.md

    同时,Java还提供了自动内存管理和异常处理机制,使开发人员能够更轻松地编写高质量的代码。 总之,Java是一种功能强大、易学易用、具有广泛应用和强大跨平台特性的编程语言。它的设计目标是提供一种高效的开发工具...

    java笔记:01.IDEA常用配置总结.md

    java笔记:01.IDEA常用配置总结.md ...同时,Java还提供了自动内存管理和异常处理机制,使开发人员能够更轻松地编写高质量的代码。 总之,Java是一种功能强大、易学易用、具有广泛应用和强大跨平台特性的编

    Java语言基础下载

    处理异常 643 Action的分类 643 Struts Action Mapping 646 使用ActionForward导航 647 Struts ActionForm Bean捕获表单数据 648 ActionForm的处理流程 649 Struts的其他组件 652 内容总结 653 独立实践 653 第三十...

    总结Java的Struts框架的异常处理方法

    主要介绍了Java的Struts框架的异常处理方法,Struts是Java的SSH三大web开发框架之一,需要的朋友可以参考下

    javascript编程异常处理实例小结

    前言:在前一篇《asp.net开发中常见公共捕获异常方式总结》,我们整理总结了asp.net服务端的异常处理。这一篇接着前文,简单总结并讨论一下javascript在客户端的异常处理。这样asp.net的服务端和客户端异常处理我们...

    Thinking in java4(中文高清版)-java的'圣经'

    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 总结 第...

    你必须知道的261个Java语言问题 中文版

    涵盖了基本概念 环境配置 基本语法 异常处理 流操作 图形用户界面编程 网络编程 线程 序列化 数据库操作 java web程序设计等各方面的主题 并分别给出了详细的解答 而且结合代码示例阐明了技术要点  本书结构清晰 ...

    史上最全经典排序算法总结(Java实现).zip

    安全:Java提供了丰富的安全特性,如禁止指针运算、自动内存管理和异常处理机制,以减少程序错误和恶意攻击的可能性。 可移植性:Java字节码可以在所有安装了JVM的设备上执行,从服务器到嵌入式系统,再到移动...

    java面试知识点易错难点总结

    Java的操作原理,面向对象的概念,匿名对象:内部类,,单例设计,重载和覆盖的区别,异常的处理流程,字节流与字符流,内存操作流,正则表达式,web三大框架

    0 基础 Java 自学之路(超仔细含练习项目及源码)

    1.0 基础 Java 自学之...7.面试题有:例如==和equals的区别,print不为人知的秘密,重写toString方法,异常处理,迭代器原理,异常的嵌套,编译和运行时的区别,如何写出可读性更高的程序,在写项目时要注意什么?等等

    DownloadFileByAjax_final

    该种方式存在两个弊端,一是当后台无法获取文件或其他异常处理情况下,会导致页面跳转到访问路径下的无效空白页面。二是无法为前端提供有效的反馈信息,如下载成功、下载失败等。  本文提供的解决方案能够解决以上两...

    整理后java开发全套达内学习笔记(含练习)

    //此语句会抛异常,需处理 System.out.println("您输入了文字:" + next); }catch(Exception e){} }} 数值保存方式: 正数= 二进制 负数= 补码 补码= 反码 +1 正数=负数的补码(反码+1) 反码= 非(二...

    thinking in Java 第四版中文 part1

    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 存储到...

    StudyJava:Java 基础学习(java编程思想和java技术核心卷)

    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 ...

Global site tag (gtag.js) - Google Analytics