一、为什么要进行异常控制
为什么要进行异常控制,在我们开发中,异常是最常见的问题,也是最不愿意看见的问题。但是我们也不得不看见,利用好异常能使我们快速成长,也能让开发人员快速定位异常,设计好了异常控制,能控制到这个异常是由谁产生的,何时产生的,产生的数据是什么,异常的方法是哪个,异常信息是什么等等,当我们利用好这些异常信息和数据,能让我们在开发过程中节约一部分时间和找问题的时间。
二、异常重现
例子1:我们在开发过程中,开发完成,对接也完成了,有一些异常还是会出来,而且这种异常是不定出现,可能这次操作出现异常,下次一样的操作就不会出现异常,这种异常在我们进行对接调试的时候非常麻烦,调试这个异常需要花费很长的时间。
例子2:我们在进行开发的时候,我们在进行对接调试的时候,日志会滚动很快,即使有异常也很难定位到异常信息位置,这样就会导致开发人员在定位异常上面花费时间,重新去点击这个异常出现,进行调试,这样也很花费时间。
例子3:当应用进行上线后,测试很科学,也没有发现任何异常,但是有的异常很奇怪,莫明的出现,这个时候我们就得去翻日志,在最开始的时候日志系统会全盘开着,每天可能就是多少个G的日志,要从中去找异常那犹如就是大海捞针,费神又费力。
有了这个异常控制以后,我们就可以在异常里面快速定位这个异常,异常的参数是什么,异常的异常信息是什么,如果根据异常信息读取找出问题所在方法和行数,如果实在找不出来,直接进行异常参数自我验证,找出异常原因,从而进行异常重现。
三、实现原理
1、整合spring实现异常拦截
实现spring的接口HandlerExceptionResolver重写resolveException该方法,配置bean为<bean id="exceptionResolver" class="com.xxx.xxx.xxExceptionHandler"/>,r如果采用注解,直接在类xxExceptionHandler注解@Component即可。该方法提供了几个参数,参数为:
(一)HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息
(二)HttpServletResponse对象代表服务器的响应。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。查看HttpServletResponse的API,可以看到这些相关的方法。
(三)Object对象包含了该请求的方法所有信息,通过这个对象提供的方法,可以获取到请求的控制器和方法。
(四)Exception对象包含了该请求的异常信息,通过这个对象可以获取到异常信息。
2、信息提取
在这一步非常的重要,数据提取好了可以直接定位异常,所以下一步说明数据提取。
(一)获取请求链接:
String url = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getServletPath();
(二)获取服务器IP
String serviceIp = request.getLocalAddr();
(三)获取客户端IP
String clientIp = request.getRemoteAddr();
(四)获取请求类型
String httpMethod = request.getScheme();
(五)获取字符集
String charEncoding = request.getCharacterEncoding();
(六)获取请求参数
Map<String, String[]> parameters = request.getParameterMap();
参数可以后期加工,是用JSON呢还是拼接成请求链接呢,都是可以的。
(七)获取异常控制器+方法
前面所提的参数第三点,Object就是请求异常的控制器和方法,可以强转为HandlerMethod获取更多信息,例如获取到只有控制器完整结果,但是获取到的结果和直接Object没得多大区别,都能定位到方法去。
(八)获取异常信息
前面所提参数Exception就是异常信息,直接使用就可以了,这个里面包含了异常完整信息。
3异常重现方式
这些异常存储到数据库,在进行一些手段控制,直接定位该异常是某个开发人员,开发人员解决没有,解决的时间是多久,等等....。
可以做一个后台异常信息管理,查看异常信息,如果异常信息中查看不出来问题,可以直接浏览器模拟发送请求,进行异常重现调试,这样非常快捷,为开发人员节省异常调试时间。可能在前期做这个异常管理期间会消耗一部分时间,总的来说做了这个异常管理,方便快捷舒适。
相关推荐
在Java中,我们可以使用`Thread.setDefaultUncaughtExceptionHandler`来设置全局异常处理器;在Python中,我们可以利用`sys.excepthook`进行类似的操作;而在JavaScript中,可以监听`window.onerror`事件。 保存...
- 异常处理机制,如使用@ControllerAdvice和@ExceptionHandler全局捕获和处理异常。 6. **验证码与安全**: - 可能采用了验证码技术防止恶意登录,如图片验证码或短信验证码,增加安全性。 - 密码策略检查,确保...
在Android应用开发中,全局异常处理是至关重要的一个环节,它确保了应用程序在遇到未预期错误时能够优雅地处理,防止应用突然崩溃,提供良好的用户体验。"android全局异常处理"这个主题关注的就是如何在整个Android...
本压缩包"Java后台和HTML前端开发代码规范.zip"提供了针对Java后端和HTML前端的开发规范,旨在指导开发者遵循一致的编码风格和最佳实践,从而提高代码可读性、可维护性和团队合作的顺畅度。 首先,我们来探讨Java...
12. **错误处理**:全局异常处理器,提高用户体验。 13. **持续集成/持续部署(CI/CD)**:可能包含Jenkins、GitLab CI/CD的配置文件。 通过学习和研究“falijava-master”项目,开发者可以深入理解后台Java开发的...
本文将详细讲解如何在Android中实现全局异常捕获,包括在崩溃前显示提示信息、保存错误日志到本地、发送错误报告邮件以及将错误信息上传至后台服务器。 一、创建全局异常监听器 首先,我们需要创建一个能监听整个...
- **异常处理**:全局异常处理机制,确保程序在出现错误时能够给出友好的提示信息。 - **日志记录**:使用Log4j或Logback记录系统运行日志,便于问题排查。 - **单元测试**:使用JUnit进行单元测试,确保代码质量。 ...
本篇主要介绍如何实现一个全局的异常处理机制,以便将未处理的异常日志保存到本地文件,并在后续开发中将这些日志提交至服务器进行分析。 首先,我们需要创建一个`ExceptionHandler`类,这个类将会作为全局的错误...
Java后台管理系统是一个基于Java编程语言开发的用于企业管理的软件系统,通常包含用户管理、角色管理、权限控制等功能,旨在提供高效、安全的企业级业务处理能力。这个压缩包"java后台管理系统,集成权限管理.zip"很...
12. **异常处理**:通过统一的异常处理机制,可以提高系统的健壮性,比如使用@ControllerAdvice注解定义全局异常处理器。 13. **国际化与本地化**:对于多语言支持,项目可能采用了Resource Bundle和Spring的...
13. **异常处理和全局异常拦截**:确保系统在遇到错误时能够优雅地处理,提供友好的错误提示,并进行异常日志记录。 14. **性能优化**:包括数据库查询优化、缓存策略、异步处理等,提高系统响应速度和整体性能。 ...
7. **异常处理**:为了保证系统健壮性,项目通常会有统一的异常处理机制,如全局异常拦截器,用来捕获并处理运行时异常,返回友好的错误信息给用户。 8. **安全控制**:在社交项目中,用户认证和授权是非常关键的。...
GlobalExceptionHandler.java: 定义全局异常处理器,处理UserNotFoundException等异常,重定向到登录或错误页面。 页面控制器 PageController.java: 处理页面跳转请求,如登录、学生、医生等页面的跳转。 学生...
在本项目中,"基于springboot+jpa实现java后台api接口,点餐系统.zip",开发者采用Spring Boot框架和Java Persistence API(JPA)来构建一个功能完善的点餐系统。这个系统主要涉及到后端API接口的开发,为前端提供...
为了解决这个问题,开发者通常会实现全局异常捕获机制,以便在程序崩溃时记录异常信息,并将这些日志保存到本地。此外,为了维护存储空间的有效利用,日志还需要定时清理。本文将详细介绍如何在Android中实现这一...
5. 错误处理:设置全局异常处理器,统一处理未捕获的异常。 6. 安全性:应用安全性是关键,包括SQL注入防护、XSS防护、CSRF防护等。 7. 日志记录:使用Log4j或Logback进行日志记录,便于调试和问题追踪。 8. 测试:...
1. **SpringBoot与Java后台**: - **依赖管理**:SpringBoot通过 starters 帮助我们自动配置依赖,如数据库连接、缓存、日志等,极大地减少了配置文件的复杂性。 - **自动配置**:SpringBoot的自动配置是基于条件...
11. **异常处理和错误报告**:全局异常处理机制确保系统在遇到错误时能够优雅地处理,避免崩溃。错误日志和错误追踪系统如Sentry有助于快速定位并修复问题。 以上只是部分可能涉及的技术点,实际的在线教育后台管理...
1. 统一异常处理:统一异常处理是指在项目中设置一个全局的异常处理器,当程序抛出异常时,这个处理器捕获异常并进行统一的处理。这样可以避免在每个方法中都写try-catch块,使得代码更加简洁,同时也方便管理和维护...