`
1021082712
  • 浏览: 86475 次
  • 性别: 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异常总结

    这种方式可以帮助开发者更灵活地控制异常处理流程。 #### 七、最佳实践 - **使用具体异常**:尽量使用具体的异常类型而不是使用通用的异常类型,这有助于提高异常处理的针对性。 - **避免过度使用异常**:异常应该...

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

    总结起来,Java Web项目的整体异常处理机制应包括以下几个关键点: 1. 在Action、Service和DAO层使用try-catch块,捕获异常并抛出自定义异常。 2. 使用日志工具记录异常信息,便于排查问题。 3. 设计并实现异常拦截...

    java异常框架处理.pdf

    总结来说,Java异常框架处理涉及的知识点包括异常类的层次结构、运行时异常与检查型异常的区别、异常处理结构(try-catch-finally)、自定义异常的设计与使用、第三方库异常的处理以及异常处理关键字的使用。...

    java web实验报告

    5. **异常处理**:在JDBC代码中,需要捕获可能的异常,确保程序的健壮性。 通过这个实验,我们不仅掌握了Java Web与数据库交互的基础,还了解了如何在实际项目中实现用户登录和内容管理功能。这为开发更复杂的Web...

    java 异常框架CODE

    Java的异常处理模型基于\"异常处理块\",包括try、catch、finally和throw关键字,以及自定义异常类。 **异常分类** Java中的异常分为检查型异常(Checked Exceptions)和运行时异常(Unchecked Exceptions)。检查...

    vb6 调用java WEBSERVER

    这个实例展示了一个简单的跨平台交互方式,允许VB6应用利用Java的强大功能,特别是在Web服务处理方面。 描述中提到的“一个调用JAVA的WEBSERVER方法实例,用VB6写的,简单明了”,意味着它提供了一个易于理解的代码...

    JAVA WEB网上商城项目

    了解Java语法、面向对象编程、异常处理、集合框架等基础知识是必要的。 2. **Servlet与JSP**:在JAVA WEB开发中,Servlet用于处理HTTP请求,而JSP则用于展示动态内容。项目中可能用到Servlet来接收请求、处理数据,...

    java web 开发技术开发技术

    在Java Web开发中,基础语法、类、对象、接口、异常处理、多线程、集合框架等概念是开发者必须掌握的。特别是集合框架,如ArrayList、LinkedList、HashMap等,它们在存储和处理数据方面起着关键作用。 二、Servlet...

    java web 登陆注册系统

    总结,Java Web登录注册系统是Java开发中的基础实践,涵盖了Web开发的多个关键环节,包括前后端交互、数据库操作、用户认证和授权、错误处理、安全策略以及部署流程。理解和掌握这些知识点对于任何Java Web开发者来...

    java web -sql

    7. **异常处理**: ```java catch (Exception e) { e.printStackTrace(); } ``` 使用try-catch结构捕获可能抛出的异常,并打印异常堆栈信息。 #### 五、总结 通过上述内容,我们可以了解到在Java Web应用中,...

    java 异常 问题收集 Exception

    - 使用异常处理框架,如Apache Commons Lang的ExceptionUtils,可以提供更优雅的异常处理方式。 通过对这些文档《java web 开发问题总结》的深入学习,我们可以更好地理解和解决实际开发中遇到的Java异常问题,...

    Spring Cloud Gateway的全局异常处理

    ### Spring Cloud Gateway全局异常处理详解 #### 一、引言 在微服务架构中,网关作为服务入口,承担着路由...此外,这种方式也为开发者提供了一个良好的起点,可以根据具体项目需求进一步扩展和优化异常处理逻辑。

    java面试宝典,超好的java+web知识点总结

    这份"java面试宝典,超好的java+web知识点总结"涵盖了Java和Web开发的关键概念,以下是其中可能包含的一些重点内容: 1. **Java基础知识**: - **数据类型与变量**:包括基本数据类型、引用数据类型以及变量声明和...

    .NET调用JAVA web 服务

    5. 错误处理:添加适当的异常处理代码,处理可能出现的网络问题或服务端错误。 四、跨平台考虑 由于.NET和Java运行在不同的虚拟机上,可能存在兼容性问题。为了确保跨平台的互操作性,需要确保使用的数据类型在.NET...

    XFire Java Web Service 客户端

    四、异常处理和安全性 XFire提供了对Web服务异常的封装,如`XFireFault`,使得开发者能更好地处理调用过程中可能出现的问题。此外,XFire还支持安全特性,如基本认证、SSL加密,以及WS-Security标准,确保服务调用...

    Java Web条件查询实例含源码

    8. **异常处理**:在执行数据库操作时,必须捕获并处理可能出现的SQLException,确保程序的健壮性。 9. **分页查询**:在实际项目中,当数据量较大时,通常会结合条件查询实现分页功能。这可能涉及到LIMIT或OFFSET...

    java web 增删改查

    总结,Java Web连接MySQL实现增删改查需要理解JDBC、面向对象编程、SQL语句、PreparedStatement、事务处理以及DAO和服务层的设计。在实际开发中,结合使用合适的框架,可以使代码更加简洁、易维护。

    java web 文件上传进度条源码

    在Java Web开发中,文件...总结,"java web 文件上传进度条源码"涵盖了Java Web开发中的文件上传、进度跟踪、前端交互等多个关键知识点。通过理解并运用这些技术,开发者可以创建出高效且用户体验良好的文件上传功能。

    java web网上图书商城前台和后台

    总结,构建一个完整的Java Web网上图书商城,不仅需要掌握核心技术如Servlet和JSP,还需要理解Web应用的架构设计,以及良好的用户体验理念。这样的系统能够实现高效的图书管理和交易流程,为用户提供便捷的在线购书...

Global site tag (gtag.js) - Google Analytics