`
dycsos123ok
  • 浏览: 82833 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java应用后台开发设计之异常封装(一)

阅读更多

说明:目前接触的是一个纯Java Webservice后台应用项目,虽然之前一直做Java应用的开发;但主要都是基于一些成熟的框架,比如流行的SSH,也有一些公司自己封装的框架;但无论哪种形式,框架本身都提供了很好的验证框架、异常处理机制。而初次接触本框架就是一个不少的挑战,虽然现在回过头来,一切走得还算蛮顺利。在这个项目中的验证和异常处理,我们采用的对Java异常的再次封装;虽然我一直反对验证时采用这种异常机制,因为Java的异常机制很复杂,担心影响性能,但考虑整体的设计结构,目前还是采用这种方式来处理;当然我们也有一套备用方案,这个作为后话了。

【设计原理图】

上图,是异常封装的原理图。ExceptiionConstants:定义的常量类型,包括异常代码和异常信息两部分,然后放在一个Map里;WebException:继承了父类Exception的异常类,构靠传入的异常代码是由ExceptiionConstants提供的;ExceptionOutput:这个异常输出类,比如我们项目中就要求封闭成xml格式输出,它的异常代码是WebException提供的,再根据这个异常代码从ExceptiionConstants的Map里取出异常信息。

【ExceptionConstants代码】

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**常量类型定义*/
public class ExceptionConstants {

	public static final String Code_0000 = "0000";
	public static final String Msg_0000 = "输入参数不合法!";

	public static final String Code_0100 = "0100";
	public static final String Msg_0100 = "";

	public static final String Code_9999 = "9999";
	public static final String Msg_9999 = "其它错误!";

	private static Map<String, String> returnCodeMap = new ConcurrentHashMap<String, String>();

	public static Map<String, String> getReturnCodeMap() {
		if (returnCodeMap.isEmpty()) {
			returnCodeMap.put(Code_0000, Msg_0000);
			returnCodeMap.put(Code_0100, Msg_0100);
			returnCodeMap.put(Code_9999, Msg_9999);
		}
		return returnCodeMap;
	}

  

 

【WebException代码】

/**自定义的异常*/
public class WebException extends Exception {
	private static final long serialVersionUID = 1L;
	private String exceptionCode = "9999";
	public WebException() {
		super();
	}
	public WebException(String code) {
		super();
		if (code != null) {
			this.exceptionCode = code;
		}
	}
	public String getExceptionCode() {
		return exceptionCode;
	}
	public void setExceptionCode(String exceptionCode) {
		this.exceptionCode = exceptionCode;
	}
}

 

 

【ExceptionOutput代码】

/**异常封闭输出*/
public class ExceptionOutput {
	private String exceptionCode = "9999";
	private String execptionMessage = "其它错误";

	public ExceptionOutput(String exceptionCode) {
		this.exceptionCode = exceptionCode;
		this.execptionMessage = ExceptionConstants.getReturnCodeMap().get(
				this.exceptionCode);
	}

	// 封装返回结果,比如封闭成XML等,返回给调用处,这里打印输出一下。
	public void toXML() {
		System.out.println("Exception:" + this.execptionMessage);
	}

 

 

【ExcepTest代码】

	/**模拟Bean层,处理业务Logic*/
	public void ExcA(int i) throws WebException {
		if (i < 10) { //抛出一个自定义异常,用来解析判断等处理
			throw new WebException(ExceptionConstants.Code_0000);
		}
		if (i == 10) {//抛出一个运行时异常,系统自动抛出
			int j = i / 0;
			System.out.println("j="+j);
		}
	}
	/**模拟控制层Controller*/
	public static void main(String[] args) throws WebException {
		ExcepTest e = new ExcepTest();
		try {
			e.ExcA(1);
		} catch (WebException e1) { //这个异常是捕获我们封装的异常
			ExceptionOutput out = new ExceptionOutput(
					e1.getExceptionCode());
			out.toXML();//写回异常信息给客户端
		} catch (Exception ex) {//一般用来捕获运行时异常
			ExceptionOutput out = new ExceptionOutput(
					ExceptionConstants.Code_9999);
			out.toXML(); //写回异常信息给客户端
		}
	}

 

 

总结:由于验证也是由异常抛出的,大家知道java异常处理机制还是蛮复杂的,难免会牺牲一部分性能,在经过性能测试之后会作进一步改正,在设计之初也考虑了另一种方式,将在以后总结出来。

 

 

  • 大小: 29.5 KB
分享到:
评论
2 楼 dycsos123ok 2013-09-04  
zwzwzw0a0s 写道
如果异常同时有多个,该怎么解决?

可以分一下层次,多个异常主要是通过日志记载借开发人员参阅处理;对于抛给用户,粒度可以自己控制,如果能分出的可以详细给出,不能分出的,我们程序中一律是以"9999"抛出。
1 楼 zwzwzw0a0s 2013-08-30  
如果异常同时有多个,该怎么解决?

相关推荐

    echarts后台封装(java)

    本项目专注于ECharts在后台的封装工作,特别是使用Java语言来完成这一过程。这样的封装可以使得前端与后端之间的数据传输更加高效,同时也降低了前端开发的工作负担。 首先,我们要理解为什么要在后台进行ECharts的...

    java-echarts封装

    Java-Echarts封装是一个将流行的JavaScript数据可视化库ECharts与Java后端紧密结合的实践。ECharts是由百度开发的一...这样的封装使得Java后端能更高效地与ECharts前端进行数据交换,提高了开发效率和应用的可维护性。

    将Java应用注册为后台服务

    将Java应用注册为后台服务,是一项关键的技术操作,旨在使Java应用程序能够在系统后台持续运行,即使用户退出了应用程序界面,也能保持其功能的连续性和稳定性。这一技术在多个场景下都至关重要,比如在构建服务器端...

    Java程序设计与开发应用(第二版)

    对于Java开发,本书可能还会涉及Java应用程序的开发流程,包括使用集成开发环境(IDE,如Eclipse或IntelliJ IDEA)、版本控制系统(如Git)、单元测试(JUnit)以及如何编写可读性强、符合编码规范的代码。...

    java开发流程

    - **Servlet**: Java Web应用程序的核心技术之一,用于处理客户端请求并生成响应。 ##### 3. 数据库知识 - **SQL**: 结构化查询语言,用于管理关系型数据库。 - **ORM**: 对象关系映射,如Hibernate、MyBatis等...

    一个用于Java应用(非安卓)的OkHttp的简单封装

    本资源提供了一个针对Java应用(非安卓)的OkHttp简单封装,旨在帮助开发者更便捷地进行网络请求操作。 首先,OkHttp的优势在于它的性能优化。它通过连接池和缓存机制减少了网络延迟,提高了响应速度。此外,OkHttp...

    后台java,后台java.zip

    在这个‘后台java,后台java.zip’中,我们可能会深入探讨如何使用Java进行高效且安全的后台开发。” 【标签】:“Java” Java作为标签,意味着内容主要围绕Java语言展开,可能包括但不限于Java语法、面向对象编程...

    Java SSM 网络游戏后台管理系统【优质毕业设计分享】

    Java SSM网络游戏后台管理系统是一款基于Java技术栈的高级应用程序,主要应用于网络游戏的后台管理,提供高效、稳定且功能丰富的管理平台。SSM是Spring、Spring MVC和MyBatis的缩写,这三大框架的组合是Java开发中的...

    【Java毕业设计】毕业设计-java后台.zip

    3. **技术选型**:可能使用Spring Boot作为核心框架,因为它简化了Java应用的开发,提供了自动配置、依赖注入等功能。同时,Spring Data JPA或MyBatis用于数据库操作,RESTful API设计便于前后端分离。 4. **编码...

    JAVA程序设计课程设计

    在进行Java程序设计课程设计时,通常会要求学生完成一个实际项目,比如开发一个简单的桌面应用、网站后台服务或者移动应用。这个过程将涉及上述知识点的实际应用,同时锻炼问题解决能力和团队协作能力。通过这样的...

    easyUI与java后台交互

    5. **Model层**:在Java后台,数据模型(Model)类用于封装业务数据。比如,对于用户管理,可以创建一个`User`类,包含用户名、密码、邮箱等属性。 6. **Service层**:服务层(Service)处理业务逻辑,如用户管理的...

    Java技术_开发心得_两年开发经验_(文章汇总...热)

    1. **Java基础知识**:作为开发者,对Java的基础语法、类库和API必须有扎实的理解,包括数据类型、控制结构、异常处理、面向对象编程(封装、继承、多态)等。 2. **集合框架**:Java的集合框架是编程中频繁使用的...

    java移动开发

    Java移动开发是面向Android平台的一种高效且广泛使用的应用程序开发方式。由于Android系统主要采用Java语言进行编程,因此,Java成为了Android应用开发的核心技术。在这个领域,开发者可以利用各种工具和框架来创建...

    java开发语言基础下手机软件开发技术的应用.zip

    这个压缩包中的“java开发语言基础下手机软件开发技术的应用.pdf”文档可能涵盖了Java基础、Android SDK的使用、UI设计、API调用、多线程管理、异常处理和测试调试等多个方面的内容,对于初学者和进阶开发者来说,都...

    论坛 安卓大作业 java后台.zip

    在本压缩包“论坛 安卓大作业 java后台.zip”中,主要包含了大学生在学习Java编程语言时的一些重要资料,特别关注的是与Android应用程序开发相关的Java后台知识。这个压缩包很可能是某位学生在完成课程大作业或课程...

    简单的微信支付JAVA后台(仅支付)

    综上所述,这个“简单的微信支付JAVA后台(仅支付)”是一个基础的支付解决方案,适用于一些只需要支付功能的简单应用场景。然而,为了满足复杂商业环境的需求,开发者可能需要进一步完善它,增加退款、对账、营销活动...

    春招和秋招过程中总结的Java后台开发相关基础知识

    Java后台开发是软件行业中至关重要的一个领域,尤其是在春招和秋招这两个求职高峰期,掌握扎实的Java基础成为了求职者必备的技能。以下是一些关于Java后台开发的基础知识点,旨在帮助求职者更好地准备面试和提升自身...

    Retrofit2+Rxjava2网络请求异常统一封装处理

    在Android应用开发中,网络请求是必不可少的一部分,Retrofit2和RxJava2是两种非常流行的库,用于构建和管理网络接口。本篇文章将详细讲解如何使用Retrofit2和RxJava2进行网络请求,并进行异常统一封装处理,以便...

    Java程序设计课程设计参考程序

    2. **面向对象编程(OOP)**:Java是一种纯面向对象的语言,因此了解类、对象、封装、继承和多态至关重要。管理系统可能涉及类的层次结构,如用户、管理员、商品等,而计算器则可能包含运算对象和操作类。 3. **...

    【Java毕业设计】java毕业设计,后台式的慈善捐赠,绿色回收系统.zip

    【Java毕业设计】中的“后台式的慈善捐赠,绿色回收系统”是一个典型的Web应用程序,它结合了Java编程语言和相关的技术栈来实现一个管理和操作慈善捐赠和环保回收的平台。这个项目可能涵盖了以下几个重要的Java和Web...

Global site tag (gtag.js) - Google Analytics