说明:目前接触的是一个纯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
分享到:
相关推荐
例如,Java不支持goto语句,代之以提供break和continue语句以及异常处理。Java还剔除了C++的操作符过载(overload)和多继承特征,并且不使用主文件,免去了预处理程序。因为Java没有结构,数组和串都是对象,所以不...
开发一个Action调用关联应用提供的WebService 前置条件:该WebService?WSDL可正常获取 步骤: a. 配置applicationContext-wsclient.xml; Spring管理第三方WebService实例bean Jaxws-client配置代码 b. 生成第三方...
例如,Java不支持goto语句,代之以提供break和continue语句以及异常处理。Java还剔除了C++的操作符过载(overload)和多继承特征,并且不使用主文件,免去了预处理程序。因为Java没有结构,数组和串都是对象,所以不...
HelloWorldApp.java 第一个用Java开发的应用程序。 firstApplet.java 第一个用Java开发的Applet小程序。 firstApplet.htm 用来装载Applet的网页文件 第2章 示例描述:本章介绍开发Java的基础语法知识。 ...
例如,Java不支持goto语句,代之以提供break和continue语句以及异常处理。Java还剔除了C++的操作符过载(overload)和多继承特征,并且不使用主文件,免去了预处理程序。因为Java没有结构,数组和串都是对象,所以不...
实例1 开发第一个Java程序 7 第2章 Java基础类型与运算符(教学视频:39分钟) 9 2.1 基础类型 9 实例2 自动提升 9 实例3 自动转换 10 实例4 常用基础类型之强制转换 11 2.2 运算符 12 实例5 算术运算符 12 实例6 ...
实例1 开发第一个Java程序 7 第2章 Java基础类型与运算符(教学视频:39分钟) 9 2.1 基础类型 9 实例2 自动提升 9 实例3 自动转换 10 实例4 常用基础类型之强制转换 11 2.2 运算符 12 实例5...
可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。 诺寒基于hplus和inspinia...
JavaWeb是基于 SpringBoot2+Layui2.5.6+Thymeleaf++Shiro+MybatisPlus 研发的权限(RBAC)及内容管理系统,致力于做更简洁的后台管理框架,包含系统管理、代码生成、权限管理、站点、广告、布局、字段、配置等一系列...
实例1 开发第一个Java程序 7 第2章 Java基础类型与运算符 实例2 自动提升 9 实例3 自动转换 10 实例4 常用基础类型之强制转换 11 2.2 运算符 12 实例5 算术运算符 12 实例6 关系运算符 13 实例7 逻辑...
实例1 开发第一个Java程序 7 第2章 Java基础类型与运算符(教学视频:39分钟) 9 2.1 基础类型 9 实例2 自动提升 9 实例3 自动转换 10 实例4 常用基础类型之强制转换 11 2.2 运算符 12 实例5 算术运算符 12 实例6 ...
实例1 开发第一个Java程序 7 第2章 Java基础类型与运算符(教学视频:39分钟) 9 2.1 基础类型 9 实例2 自动提升 9 实例3 自动转换 10 实例4 常用基础类型之强制转换 11 2.2 运算符 12 ...
Geek-Framework是基于多个优秀的开源项目,高度整合封装而成的高效,高性能,强安全性的**开源**Java微服务快速开发框架。 Geek-Framework是在SpringBoot基础上搭建的一个Java基础开发框架,以Spring MVC为模型视图...
Encapsulation[java] 封装 (hiding implementation details) Exception [java] 例外; 异常 [ik'sepʃәn] entry n.登录项, 输入项, 条目['entri] enum (关键字) execute vt.执行 ['eksikju:t] exhibit v.显示, ...
1.4 开发Java的准备 7 1.4.1 安装JDK 8 学生提问:不是说JVM是运行Java程序的虚拟机吗?那JRE和JVM的关系是怎样的呢? 8 学生提问:为什么不安装公共JRE系统呢? 9 1.4.2 设置PATH环境变量 10 学生提问:为什么...
java开发oa系统源码下载 平台简介 一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适的。于是利用空闲休息时间开始自己写了一套后台系统。她可以用于所有的Web应用程序,如网站管理后台,网站会员...
java开发oa系统源码下载 平台简介 一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适的。于是利用空闲休息时间开始自己写了一套后台系统。如此有了若依。她可以用于所有的Web应用程序,如网站管理...
本系统用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA。所有前端后台代码封装过后十分精简易上手,出错效率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。 内置功能 1. 用户...
java开发oa系统源码下载 平台简介 一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适的。于是利用空闲休息时间开始自己写了一套后台系统。如此有了若依。她可以用于所有的Web应用程序,如网站管理...
(3)简化异步事件的处理:服务器应用程序在接受来自多个远程客户端的请求时,如果为每个连接都分配一个线程并且使用同步IO,就会降低开发难度 (4)用户界面具备更短的响应时间:现代GUI框架中大都使用一个...