异常处理的一般方法

学习Java的应该都知道,异常处理是其一大特色,使用异常处理的最大优势就是:将问题处理代码和正常执行流程做了区分,使得程序的执行逻辑更加清晰,不再使错误处理代码和正常业务逻辑代码混在一起。Java不仅自己定义了各种各样的异常类来描述一些基本的错误现象,而且还提供了扩展机制,允许程序猿自定义异常类,应用于实际问题处理,Java的异常处理机制可以捕获对应的异常,并进行主动处理,那么既然Java的异常处理机制这么好用,有没有一般性的方法呢? 首先说明,(1). Java的异常分为:Error和Exception,Error类及其子类表示不是不可能恢复但很难处理的情况下的一种严重问题,例如内存溢出(大家可以想想Java是否存在内存溢出现象?),我们不可能指望程序能处理,所以本文所有的方法都是针对Exception。 (2). 异常处理就五个关键字:try、catch、finally、throw、throws,他们的用法也比较简单,本文不再赘述。 好了,下面开讲: 1. Exception分为两类:Exception和RuntimeException,其中Exception必须在系统中处理,而RuntimeException继承与Exception,表示一种设计或实现的问题,如果系统正常运行,此类异常不会出现,例如最常见的NullPointerException,所以一般不强制要求处理。 2. 像ClassNotFoundException这类异常,一般是jar包没有添加,在系统正常运行中肯定不会出现,所以无需抛出,可以直接try catch掉,但别忘了打log。 3. 像SQLException之类的,这类异常偶然也会出现,如:数据库服务没打开、没有网络、SQL语法有误等,但这类异常即使抛到Service层依然无法处理,抛到客户端客户也看不懂,还影响用户体验,所以也不要抛出,一般都是转化为RuntimeException,在转化之前打log。 4. 所以需要我们处理的异常只有ValidationException和BusinessException,这两类异常都是我们自定义的异常,其中ValidationException处理的是验证异常,而BusinessException处理的是业务逻辑异常,这两类异常都需要我们在系统中做出处理,下面会给出ValidationException、BusinessException和自定义转化为RuntimeException的参考方法。 5. Service层是负责业务逻辑处理的一层,所以所有的验证都要放在Service层,而Service层在进行验证和业务逻辑处理的时候,应该抛出这些所遇到的异常,并加入到ValidationException(如用户登录时用户名或密码为空等)或者BusinessException(如用户名或密码不正确等)异常中,然后在上层(servlet或者Action或者、controller)中进行捕获,捕获到之后放到Request中,带到前台进行处理。 6. 千万要记得出现异常一定要打log!!!尤其是当你try catch掉一个异常时。其中ValidationException、BusinessException日志级别为warning或info,其他的据具体情况而定,但MyRuntimeException 可以不打,大家可以想想为什么?(前面有答案) 7. 顺便说一下,关闭资源一定要放在finally里,因为finally的代码无论是否有异常都会被执行,确保打开的资源一定都会被关闭。 在这里顺便回答一些同学的问题: (1)、我在前台已经做了验证,那么是否还需要在后台再做验证? 答:肯定要,原因①、前台验证一般都是用js来做,而js的解析是在客户端,如果有人禁用了浏览器的js,是不是你的验证就不起作用了。(关于如何禁用js,请自己用Google百度一下); ②、不排除有些黑客要黑你,所以他们可以通过一些工具,直接绕过前台,那么你懂得。 (2)、为什么要抽象Service层,为什么不把Service层的功能全放到servlet中来做,简单来说为什么要把验证放到Service层? 答:首先为什么抽象Service层,肯定是为了复用,这个是关于分成模型中要讲的,有机会我会在写一篇博文,专讲分层的一般方法,这里不多说,大家可以试想一下,目前移动端越来越火,而我们的servlet是和web相关,那么我们的Servlet能被App复用吗?如果我们把验证放到servlet中,那么如果在开发一套App,我们是不是所有的验证都要重写一篇?而放在Service层则没有这个问题。 (3)、Java是否存在内存溢出问题? 答:一般是不存在的,因为jvm有GC机制,会很好的管理内存,但有时候当我们短时间内,打开很多资源而没有关闭的时候,是可能会存在内存溢出问题的。 package cn.bridgeli.exceptionhandle.exception; public class BusinessException extends Exception { private static final long serialVersionUID = 1L; private int code; public BusinessException(int code, String message) { super(message); this.code = code; } public int getCode() { return code; } } package cn.bridgeli.exceptionhandle.exception; public class MyRuntimeException extends RuntimeException { private static final long serialVersionUID = 1L; private int code; public MyRuntimeException(int code, String message) { super(message); this.code = code; } public int getCode() { return code; } } package cn.bridgeli.exceptionhandle.exception; import java.util.HashMap; import java.util.Map; public class ValidationException extends Exception { private static final long serialVersionUID = 1L; private Map<String, String> errorFields = new HashMap<String, String>(); public ValidationException() { } public void addErrorFiel(String name, String message) { errorFields.put(name, message); } public String getErrorField(String name) { if (errorFields.containsKey(errorFields)) { return errorFields.get(name); } return ""; } }

August 26, 2014 · 1 分钟 · Bridge Li

如何在网络上搭建个人博客

相信有很多程序猿应该都有过自己搭建博客的冲动,但很多时候有一种无从下手的感觉,第一篇博客就写一下,怎么搭建自己的个人博客吧,希望对大家有点帮助。 搭建个人博客主要分以下几步: 1. 购买域名 这个其实很简单,我们只需要在常见的万网、西部数码注册后,只要该域名还未被注册,填一下基本信息,一般都可以了,另外需要说明的是:(1.)、域名是有限资源,如果一个域名被注册了,那么别人就不能注册了,所以想好了域名,大家可以立马去注册,以防被别人抢注,万一被别人抢注,想买回来就很困难了,大家可以搜一下史上最贵的是个域名;(2)、域名注册是有有效期的,如果有效期到了没有续费成功的话,那么这个域名就会被回收,就有了被别人重新注册的风险,所以大家可以试着设置一个自动续费之类的;(3)、经过我的分析,西部数码的域名注册费用会比万网稍稍便宜一些,当然是仅供参考。 2. 购买空间 这个大的分两种:(1)、独立的IP,这个一般会比较贵;(2)、购买空间,没有独立IP,这个相对便宜。一般如果仅仅是搭建一个个人博客的话,购买空间就够了,一般空间提供商会提供一个二级域名供大家调试。 另外购买空间这个分大陆的和非大陆的,大陆的一般比较贵,但访问速度快,而且需要备案,备案这个一般购买域名的地方都会有提供,另外像360也提供免费备案;非大陆的空间一般都比较便宜,也比较稳定,但访问速度会稍慢一些,而且不需要备案,所以也哟哟很多人选择这个,BridgeLi就是选择的这个方案。好了有了域名和空间我们就可以进行接下来第三步了。 3. 准备博客系统 推荐大家使用WordPress,WordPress是目前世界上最流行的博客系统,据说世界上百分之八十的博客,都是WordPress搭建的,可见其影响力,WordPress这么流行的一个原因就是他是开源免费,大家都可以对其进行个性化的开发,而且为了使他更好用,很多牛人对他开发了很对各种各样的插件,大家可以根据自己的具体情况,选用其中部分插件,由此也可见WordPress的可扩展行做的是多么牛,相信这也是其流行的一个原因。 关于WordPress怎么用,BridgeLi在这里就不多说了,因为巨简单,大家可以自己到WordPress官网上下一个看看。 不过需要说明的WordPress是PHP语言写得,所以在搭建博客时,需要我们的系统支持PHP,BridgeLi的空间实在西部数码买的,在预装软件一栏里,选择WordPress就可以了,一键生成,属于傻瓜式,当然大家也可以自己一步一步的去搭建,推荐LAMP。 4. 域名绑定 一切已经就绪,当然下面就是绑定域名啦,如果域名绑定成功的话,我们应该就可以通过我们的域名来访问我们的博客了。因为BridgeLi是在西部数码买的空间,使用的预装的WordPress系统,所以下面先以这个为例进行讲解,选择个人中心–>主机管理,会有一个域名绑定,我们只需要按照步骤一步一步就可以了,需要说明的是,如果你的域名是在西部数码买的,那么应该在添加域名绑定之后应该局可以访问了,但如果您不是在西部数码买的,像BridgeLi就是在万网买的域名,就需要到万网那边,把西部数码提供的二级域名添加到域名解析里面就行了,关于DNS服务器我们可以忽略,关于域名解析,大家眼看自己空间的类型,如果是独立IP,那么肯定就是A,具体大家可以看万网和西部数码的文档,BridgeLi就不在这里一一赘述了。 另外还有一种情况是自己搭建的系统,也就是我们只买了一个域名、一个空间,博客系统是自己传上去的,那么如何进行域名绑定呢?当然域名解析肯定还是要到注册地方的域名解析中去添加,添加完成之后,我们就可以通过:域名+ / + 项目名称就行访问了,我们当然不希望是这样的,直接通过域名访问多好啊,这就需要我们对服务器进行一番设置,因为BridgeLi是对Java开发的,对tomcat比较熟,下面就以tomcat为例进行说明,主要有两步: (1)、打开server.xml文件,在和之间插入如下语句。 <Context path="" docBase="" debug=“0” privileged=“true”> 其中path为空,就是为了去掉访问时的/项目名称,docBase是项目所在的目录,如果是war包,一定要项目名称,如果是源码包(这个应该很少),则一定要详细到webRoot(MyEclipse项目)或者webContent(Eclipse项目) (2)、删除webapps文件夹下的ROOT文件夹就可以了 经过以上四步,我们就在网络上拥有自己的博客了,怎么样,很简单吧?想搭建博客的你,还犹豫什么,马上行动吧!

August 25, 2014 · 1 分钟 · Bridge Li