Java异常分类和统一处理
2016-03-25 22:37
405 查看
摘要: Java异常分类及统一处理
初学时常常想exception为啥要这样分类处理呢? 后来才明白,异常不过两种:主观和客观,一个大多数情况下可以避免,一个大多数情况下无法避免。
像NullPointerException这类异常,大多跟程序员素质挂钩(开发好,测试好, 基本不会在系统运行后蹦出来), 基本是可以避免的,java语法当初把它们归类为“非检查”,也算给程序员和编译器省了不少事。
而像IOException这类跟外在环境有关的异常,几乎是不可避免的(指不定哪一天哪一秒网络就挂了),但是当不期而遇时,程序还是要有所作为,所以编译器有必要督促一下程序员,Check一下,看看是否对这些可能不期而至的异常进行了处理。当Exception对象传递到某个节点后,程序就可以执行一些必要措施了,比如:给用户一个友好提示("系统繁忙,请重试")。
Tomcat是Servlet容器,主要处理动态请求,在web.xml下配置,按http返回码或Exception类型来处理:
Nginx是反向代理服务器,通过Http返回码也可以很方便地指定异常时的返回页面:
一,异常分类
java异常分为"检查"和"非检查"两类,"检查"二字的意思是,代码编译时,编译器会去Check一下有没有进行异常处理(捕获或向上抛),对于归类为需要检查的异常,若没处理,编译就过不去。初学时常常想exception为啥要这样分类处理呢? 后来才明白,异常不过两种:主观和客观,一个大多数情况下可以避免,一个大多数情况下无法避免。
像NullPointerException这类异常,大多跟程序员素质挂钩(开发好,测试好, 基本不会在系统运行后蹦出来), 基本是可以避免的,java语法当初把它们归类为“非检查”,也算给程序员和编译器省了不少事。
而像IOException这类跟外在环境有关的异常,几乎是不可避免的(指不定哪一天哪一秒网络就挂了),但是当不期而遇时,程序还是要有所作为,所以编译器有必要督促一下程序员,Check一下,看看是否对这些可能不期而至的异常进行了处理。当Exception对象传递到某个节点后,程序就可以执行一些必要措施了,比如:给用户一个友好提示("系统繁忙,请重试")。
二,异常的统一处理
1,服务器处理
下面列举Tomcat和Nginx为例Tomcat是Servlet容器,主要处理动态请求,在web.xml下配置,按http返回码或Exception类型来处理:
<error-page> <error-code>404</error-code> <location>/WEB-INF/views/error/404.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/WEB-INF/views/error/500.jsp</location> </error-page> <error-page> <exception-type>java.lang.Throwable</exception-type> <location>/WEB-INF/views/error/throwable.jsp</location> </error-page>
Nginx是反向代理服务器,通过Http返回码也可以很方便地指定异常时的返回页面:
server { listen 80 ; server_name xx.com ; root /var/www ; index index.html ; error_page 404 /404.html ; location = /404.html { root /usr/share/nginx/html; } }
2,应用程序框架处理
// 已删除之前spring mvc版的demo,近期计划贴出spring boot版完整的异常控制,waiting。。。相关文章推荐
- Java 输出流中的flush方法
- Spring_Q_collect
- 【JAVA开发之IO流1-3】IO流之缓冲流
- Java内存分配
- super,this的区别和使用
- Java中普通代码块,构造代码块,静态代码块区别及代码示例
- 关于struts2中传入中文参数然后显示到页面出现乱码
- Java——URLEncoder和URLDecoder
- 《Java程序设计基础》 第6章手记
- Spring IoC — 基于注解的配置
- java 之 helloworld
- idea中使用scala运行spark出现Exception in thread "main" java.lang.NoClassDefFoundError: scala/collection/GenTraversableOnce$class
- Spring boot配置cache
- Spring boot配置cache
- Java基础 搭建环境 安装JDK 配置环境变量
- java布局学习(新)
- Java web.xml配置 servlet
- Java中equals和==的区别
- java集合学习
- Javaweb实训项目中使用到的ajax