Request processing failed;nested exception is java.lang.*

2023-11-19

目录

问题

分析

解决

附录

注意

参考


问题

  • 错误1:

httpClient向服务端发送请求,服务端有时候就会给客户端返回 500错误,

打开服务端错误日志,报如下错误:

2021-05-28 21:05:06.548 default [http-nio-0.0.0.0-xxxx-exec-6] ERROR o.a.c.c.C.[.[localhost].[/].[dispatcherServlet] - Line:175 - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException: null

(问题在于没有标注具体哪一行空指针,不好定位问题,而且也不是每次请求都报错,是偶尔报错。)

  • 错误2:

java.net.SocketTimeoutException

分析

  • 错误1分析

经过进一步分析,发现问题出在InputStream,

InputStream inputstream =request.getInputStream()

inputstream.read()

当获取请求中的InputStream后,读取InputStream的过程中出现上述错误2:java.net.SocketTimeoutException,而程序中只是捕获了这个异常,并没有处理,导致出现了空指针。

那么问题来了,为啥会报错误2,而且是有时候报错。

  • 错误2分析

出现错误2的原因是httpclient 获取响应超时引起的,也就是服务端还没有读完InputStream,httpclient就已经响应超时,执行响应超时后的断开链接等动作,导致读取InputStream异常。

那为啥会触发响应超时呢,这个原因比较多,

有可能是网络原因,导致网络传输比较慢;

也可能是因为httpclient这次请求中携带数据比较大,服务端读取比较慢;

也有可能是服务端负载较高,处理数据较慢,等等。

解决

分析到原因后,通过两方面解决这个问题,

  • 对于服务端来说,要对异常捕获进行处理,并且向客户端响应相应的提示信息。
  • 对于客户端来说,可以将响应时间(http.socket.timeout)适当增大一些。

附录

关于httpclient的两个超时时间的设置,

  • 请求超时(http.connection.timeout):也就是连接超时,指的是从client发起建立http链接,到http链接建立完成的时间。
  • 响应超时(http.socket.timeout):也就是读取数据超时,指的是client发送完http请求到接收到server的响应的时间。

注意

  • 写Java一定要捕获各种异常,并且要对异常进行处理;否则遇到问题很难定位。
  • 对于各种文件流,网络流等,一定在finally{}中关闭流,既保证正常情况下关闭,也保证异常情况下关闭流,否则可能导致在异常情况下导致占用资源,而引起服务端不能正常对外提供服务。
  • 相对难定位的问题就是有时候报错,有时候正常,而且有可能对于同一个请求一会正常,一会报错,对于这种问题有时候得从网络,硬件,CPU,内存,或者操作系统层面考虑。

参考

https://blog.csdn.net/goodlixueyong/article/details/50676821

https://blog.csdn.net/weixin_38629529/article/details/89788963

https://blog.csdn.net/senblingbling/article/details/43916851

https://blog.csdn.net/u010142437/article/details/18091545

https://tech.kujiale.com/ying-yong-pin-fan-bao-chu-cause-java-net-sockettimeoutexception-read-timed-outzen-yao-ban/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Request processing failed;nested exception is java.lang.* 的相关文章

随机推荐

  • numpy模块中axis的理解——以np.argmax为例

    numpy模块中axis的理解 以np argmax为例 np argmax参数数量及其作用 axis不同情况的示例 np argmax参数数量及其作用 np argmax是用于取得数组中每一行或者每一列的的最大值 常用于机器学习中获取分类
  • 注意力机制的分类

    目录 1 什么是注意力机制 2 注意力机制分类 3 代表算法 1 空间域代表算法 2 通道域代表算法 3 混合域代表算法 DANet CBAM 4 注意力机制的应用 1 什么是注意力机制 注意力机制通俗的讲就是把注意力集中放在重要的点上 而
  • linux内核驱动开发笔试题

    linux内核驱动开发笔试题 一 一些常规中举的C考题 第一题 写出下述程序结果 int m 3 1 4 7 2 5 8 3 6 9 int i j k 2 for i 0 i lt 3 i printf d m k i 问题所在 本题考点
  • redis默认过期时间:redis默认的是永不过期

    今天同事问我redis默认过期时间是多久 突然想起几年前想查一下redis默认过期时间是多久 搜到的博文全是打着 redis默认过期时间是多久 的标题在讲redis过期原理 正好闲来没事 又搜了下 几年过去了 还是一样 哪来那么多文不对题的
  • StackExchange.redis 实现模糊匹配批量查询

    版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net Helloantoherday article details 81286685 如果
  • 一、C++中queue和deque的区别

    1 先明白队尾和队首 back和front的联系 无论从哪个方向看 插入的地方就是队尾 所有的操作名字都与back有联系 插入端的另一端就是队首 所有的操作名字都与front有联系 其中queue的操作是 queue
  • jdbc连接mysql数据库,设置字符集编码

    jdbc连接mysql数据库 设置字符集编码 1 第一种方法 JDBC连接数据库时常会出现乱码的情况 那是因为我们的字符级与数据库的字符级不一样 我们通过定义url地址的时候定义字符级 sql代表你的数据库名称 所以当这种情况遇到乱码的时候
  • 交叉编译arm Linux环境下的android-tools-adb

    前言 项目使用Rockchip的3399挖掘机demo板 使用官方提供的Debian Linux SDK 官方github源码链接 https github com rockchip linux 进行开发定制 当前需要将Android上的调
  • 阿辉闯编程(Java入门)

    故事背景 hello 大家好 我叫阿辉 在某一个风雨交加的夜晚 我也不知道干了什么惹怒了老天爷 可能是嫉妒我帅气的颜值吧 一道闪电轰然劈下 我便晕死了过去 等我再次睁开眼睛的时候 我发现我来到了一个不知名的地方 于是我问向了一旁的人 这里是
  • 豪华股东阵容加持,九方财富有望成港股“大肉签”

    经过一段时间的盘整 曾经因行业冷却而沉寂的港股打新正在重回投资者偏好之中 2月28日启动正式招股的新股 九方财富 就受到了投资者的广泛关注 自去年底以来 港股随全球资本市场大势好转 逐渐脱离底部 也提升了市场对新股的热情 同时 九方财富与其
  • xposed开发之清除应用数据(研究历程)

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 最近在研究xposed 有个需求要做到清除其他应用数据 xposed功能足够强大 应该可以实现这个功能 下面是基于android4 4 4研究的思路 google只能开放了
  • Mac OS X 下如何使用类似 Linux 下的 /proc/pid/maps 功能

    本文转载至 http stackoverflow com questions 8058005 mac os x equivalent of virtualquery or proc pid maps 一言以概之 使用 vmmap 不过格式和
  • Objective-C语法之代码块(block)的使用

    代码块本质上是和其他变量类似 不同的是 代码块存储的数据是一个函数体 使用代码块是 你可以像调用其他标准函数一样 传入参数数 并得到返回值 脱字符 是块的语法标记 按照我们熟悉的参数语法规约所定义的返回值以及块的主体 也就是可以执行的代码
  • Microsemi Libero使用技巧6——FPGA全局网络的设置

    文章目录 前言 问题描述 问题分析 FPGA全局布线资源简介 Microsemi FPGA的全局布线资源 全局网络改为普通输入 普通输入上全局网络 总结 推荐阅读 交流群 系列教程 Microsemi Libero系列教程 前言 刚开始做M
  • linux内核-软中断与Bottom Half

    中断服务一般都是在将中断请求关闭的条件下执行的 以避免嵌套而使控制复杂化 可是 如果关中断的时间持续太长就可能因为CPU不能及时响应其他的中断请求而使中断 请求 丢失 为此 内核允许在将具体的中断服务程序挂入中断请求队列时将SA INTER
  • 刷脸支付越来越多的场景开始让人们靠脸吃饭

    技术的唯一目的是保护用户的安全 至于面部 指纹以及生物识别以外的技术手段 皆是抵达目的地的方式方法 在刷脸支付真正使用的过程中 工程师们一直在那些我们看不见的地方 默默谱写着隐私安全的前序曲 刷脸支付是基于人工智能 机器视觉 3D传感 大数
  • 【matlab图像处理笔记2】【图像变换】(一)图像的算术运算与几何变换、图像插值算法

    文章目录 前言 图像的算术运算 图像相加 图像差分 图像乘法 图像除法 图像的线性组合 图像的几何变换 图像平移 图片镜像 图片转置 图像旋转 图像缩放 图像插值算法 最近邻插值算法 双线性插值算法 单线性插值 双线性插值 双三次插值算法
  • VUEX各个模块的封装以及Router封装

    一 各个模块的作用 state 用来数据共享数据存储 mutation 用来注册改变数据状态 同步 getters 用来对共享数据进行过滤并计数操作 action 解决异步改变共享数据 异步 二 创建文件 actions js getter
  • 5种常见函数的写法和调用方式

    前言 函数在开发中随处可见 经常在开发中我们声明函数就使用了一两种就已经足够了 但是 对我这有梦想的码农来说 这显然是不够的 因此 总结整理了5中常见的声明方式和调用方式 1 函数声明 最常规写法 常规函数写法 function bar c
  • Request processing failed;nested exception is java.lang.*

    目录 问题 分析 解决 附录 注意 参考 问题 错误1 httpClient向服务端发送请求 服务端有时候就会给客户端返回 500错误 打开服务端错误日志 报如下错误 2021 05 28 21 05 06 548 default http