IDEA解决javaweb inStream parameter is null

我的IDEA版本是2019

遇到问题后,在网上查了很多方法都没用,最后和同学讨论终于把问题解决了

很明显,报错是流空指针异常,首先想到了问题可能出在没能成功读取配置文件

可能错误一:配置文件放的位置不对

我现在没有使用Maven。网上的一种解决方法说,应该放在Main中resources里对我来说是不对的,因为没有这个文件夹

正确位置是src下

可能错误二:读取配置文件的代码“失效了”

// 法一       InputStream is=
ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties");


//法二        InputStream is=
addServlet.class.getClassLoader().getResourceAsStream("druid.properties");

一开始我采用的是法一读取配置文件,这种方法在普通的java文件中是有效的,能够正常读取配置文件,所以在我测试BUG的时候,一直没有怀疑是这段代码带来的问题

后来同学通过debug发现,当他使用法一的代码,同样会出现无法读取的问题(本来他自己的程序采用的是法二),至此,真相大白

原因:Tomcat的类加载器与JVM自带类加载器不同

Tomcat有自己自定义的类加载器,使用法一

ClassLoader.getSystemClassLoader()

使用的是Tomcat的类加载器,导致无法读到src里的配置文件

addServlet.class.getClassLoader().

使用类名.class.getClassLoader()方法,则使用的是此类的类加载器,也就是jvm的系统类加载器,

能正确读到配置文件

这里只是大概讲一下原因,详细请了解反射以及类加载器的相关知识

非常感谢大佬同学帮忙解决这个BUG

JavaWeb项目中,"instream parameter is null" 错误通常是由于在处理文件上传或取输入流时,输入流对象(InputStream)为null导致的。这个错误可能出现在以下几种情况: 1. **文件上传**:在处理文件上传时,如果前端没有选择文件文件上传失败,服务器端的输入流可能为null。 2. **取请求参数**:在取请求参数时,如果请求中没有包含某个参数,相应的输入流可能为null。 3. **服务器配置问题**:服务器配置不正确,导致无法正确处理输入流。 以下是一些可能的解决方案: 1. **检查文件上传**:确保前端表单正确配置了文件上传,并且用户确实选择了文件。 ```html <form method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="Upload"> </form> ``` 2. **验证输入流**:在处理输入流之前,先检查输入流是否为null。 ```java @PostMapping("/upload") public String handleFileUpload(@RequestParam("file") MultipartFile file) { if (file.isEmpty()) { return "File is empty"; } try { InputStream inputStream = file.getInputStream(); // 处理输入流 } catch (IOException e) { e.printStackTrace(); return "Error processing file"; } return "File uploaded successfully"; } ``` 3. **服务器配置**:确保服务器(如Tomcat)配置正确,支持文件上传,并且文件大小限制设置合理。 4. **日志记录**:在代码中添加日志记录,以便在发生错误时能够快速定位问题。 ```java if (file == null) { logger.error("Uploaded file is null"); return "File is null"; } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值