在网上找了一下午的资料,终于清楚地了解在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>
至此工作已做完,最后测试结果可自行测试。
相关推荐
这种方式可以帮助开发者更灵活地控制异常处理流程。 #### 七、最佳实践 - **使用具体异常**:尽量使用具体的异常类型而不是使用通用的异常类型,这有助于提高异常处理的针对性。 - **避免过度使用异常**:异常应该...
总结起来,Java Web项目的整体异常处理机制应包括以下几个关键点: 1. 在Action、Service和DAO层使用try-catch块,捕获异常并抛出自定义异常。 2. 使用日志工具记录异常信息,便于排查问题。 3. 设计并实现异常拦截...
总结来说,Java异常框架处理涉及的知识点包括异常类的层次结构、运行时异常与检查型异常的区别、异常处理结构(try-catch-finally)、自定义异常的设计与使用、第三方库异常的处理以及异常处理关键字的使用。...
5. **异常处理**:在JDBC代码中,需要捕获可能的异常,确保程序的健壮性。 通过这个实验,我们不仅掌握了Java Web与数据库交互的基础,还了解了如何在实际项目中实现用户登录和内容管理功能。这为开发更复杂的Web...
Java的异常处理模型基于\"异常处理块\",包括try、catch、finally和throw关键字,以及自定义异常类。 **异常分类** Java中的异常分为检查型异常(Checked Exceptions)和运行时异常(Unchecked Exceptions)。检查...
这个实例展示了一个简单的跨平台交互方式,允许VB6应用利用Java的强大功能,特别是在Web服务处理方面。 描述中提到的“一个调用JAVA的WEBSERVER方法实例,用VB6写的,简单明了”,意味着它提供了一个易于理解的代码...
了解Java语法、面向对象编程、异常处理、集合框架等基础知识是必要的。 2. **Servlet与JSP**:在JAVA WEB开发中,Servlet用于处理HTTP请求,而JSP则用于展示动态内容。项目中可能用到Servlet来接收请求、处理数据,...
在Java Web开发中,基础语法、类、对象、接口、异常处理、多线程、集合框架等概念是开发者必须掌握的。特别是集合框架,如ArrayList、LinkedList、HashMap等,它们在存储和处理数据方面起着关键作用。 二、Servlet...
总结,Java Web登录注册系统是Java开发中的基础实践,涵盖了Web开发的多个关键环节,包括前后端交互、数据库操作、用户认证和授权、错误处理、安全策略以及部署流程。理解和掌握这些知识点对于任何Java Web开发者来...
7. **异常处理**: ```java catch (Exception e) { e.printStackTrace(); } ``` 使用try-catch结构捕获可能抛出的异常,并打印异常堆栈信息。 #### 五、总结 通过上述内容,我们可以了解到在Java Web应用中,...
- 使用异常处理框架,如Apache Commons Lang的ExceptionUtils,可以提供更优雅的异常处理方式。 通过对这些文档《java web 开发问题总结》的深入学习,我们可以更好地理解和解决实际开发中遇到的Java异常问题,...
### Spring Cloud Gateway全局异常处理详解 #### 一、引言 在微服务架构中,网关作为服务入口,承担着路由...此外,这种方式也为开发者提供了一个良好的起点,可以根据具体项目需求进一步扩展和优化异常处理逻辑。
这份"java面试宝典,超好的java+web知识点总结"涵盖了Java和Web开发的关键概念,以下是其中可能包含的一些重点内容: 1. **Java基础知识**: - **数据类型与变量**:包括基本数据类型、引用数据类型以及变量声明和...
5. 错误处理:添加适当的异常处理代码,处理可能出现的网络问题或服务端错误。 四、跨平台考虑 由于.NET和Java运行在不同的虚拟机上,可能存在兼容性问题。为了确保跨平台的互操作性,需要确保使用的数据类型在.NET...
四、异常处理和安全性 XFire提供了对Web服务异常的封装,如`XFireFault`,使得开发者能更好地处理调用过程中可能出现的问题。此外,XFire还支持安全特性,如基本认证、SSL加密,以及WS-Security标准,确保服务调用...
8. **异常处理**:在执行数据库操作时,必须捕获并处理可能出现的SQLException,确保程序的健壮性。 9. **分页查询**:在实际项目中,当数据量较大时,通常会结合条件查询实现分页功能。这可能涉及到LIMIT或OFFSET...
总结,Java Web连接MySQL实现增删改查需要理解JDBC、面向对象编程、SQL语句、PreparedStatement、事务处理以及DAO和服务层的设计。在实际开发中,结合使用合适的框架,可以使代码更加简洁、易维护。
在Java Web开发中,文件...总结,"java web 文件上传进度条源码"涵盖了Java Web开发中的文件上传、进度跟踪、前端交互等多个关键知识点。通过理解并运用这些技术,开发者可以创建出高效且用户体验良好的文件上传功能。
总结,构建一个完整的Java Web网上图书商城,不仅需要掌握核心技术如Servlet和JSP,还需要理解Web应用的架构设计,以及良好的用户体验理念。这样的系统能够实现高效的图书管理和交易流程,为用户提供便捷的在线购书...