关于java使用commons-fileupload文件上传时候启动tomcat时报错问题解决

在使用commons-fileupload进行文件上传时遇到ServletFileUpload.isMultipartContent报错,原因是Tomcat10使用jakarta.servlet包而非javax.servlet。降低Tomcat版本至9解决此问题。此外,因版本过高导致的类解析错误,通过将JDK版本从16降至1.8解决。最后,commons-fileupload找不到的错误,通过将jar包移动到WEB-INF/lib目录下解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习到使用commons-fileupload的jar包执行文件上传和下载处的内容时候,出现了一系列的错误,特此总结

第一处:ServletFileUpload.isMultipartContent(req)标红

ServletFileUpload.isMultipartContent(req) (判断是否为多段数据的代码)

发现req字体标红,刚开始以为是因为我导入的包不对,后来经过仔细检查,不是此次问题,由于本人的idea之前出现过字体无缘无故标红问题,但最后可以正确启动程序,因此就没有去管他,抱着侥幸心理认为我是正确的想法,继续下去,代码写完开始启动tomcat的时候,发现报错信息,不能被正确编译的问题,这时候才知道是自己的问题。

后经查看日志,上面的大致内容说:不能找到jakarta.servlet.Httpservlet内容,当时在想为什么不能被找到,最后想到,由于我使用的是tomcat10版本,但10的版本用的一些jar包已经改为了jakarat文件,tomcat10以下使用的jar文件名是javax.xxx的包,因此想着换jar包,使用javax类型的jar包,但问题依旧没有解决,还是因为tomcat10的问题,最后将tomcat10变为9的版本,问题解决

第二处:启动之后版本过高问题解决

 启动成功之后发生如上错误,经过划红线语句可以看出大致意思是版本过高,我写的这个类不能被正确解析。当时第一想法应该是jar包问题,因为jar包不兼容的情况在我身上遇到的太多,但是经过仔细检查使用的版本都是相对应的jar包,后来想到了,jdk版本,由于我使用的是jdk16,当前的最新版本,可能是由于这个问题,因此我就把版本设置为jdk1.8,再次回来点击提交按钮,没有报错

第三处:commons-fileupload不能被找到

        这个问题,我现在不是很清楚,毕竟小白一枚。当时我把tomcat10降低版本到tomcat9以后,启动tomcat发现如下错误,一般看见这个第一句,首先想到的是web-xml里面配置地址的时候忘了加斜线的错误,回去检查,并没有这个问题。此问题也是我解决时间最长的错误,因为我什么也没有动,只是修改了一下版本。回去再次查看日志,其中有两句的大致意思是说 commons-fileupload我这个jar包不能被找到,当时就很纳闷,怎么会找不到呢,难道这也是jar版本不兼容,继续换jar包,解决失败,即将放弃的是,发现我的几个jar包位置在工程路径的src-lib文件下面,因为之前一直放在下面,没有出现过问题,由于之前看过一篇文章,文中说jar包可以放在web目录下的WEB-INFO目录的lib文件夹下面,然后试着将jar包拷贝过去,启动,成功。

         关于这个问题,经过查找可能就是因为因为tomcat启动编译过程中他会默认去WEB-INF下查找,再找不到就报错说找不到,但是我们在编写代码的时候,能找到这个包是因为IDEL帮助我们去查找了。总之一句话,将包放在WEb-INF里面是一定不会出错的。

查找资料发现这个博客说的应该就是这个道理

jar包放置在WEB-INF/lib下和通过Build Path导入的区别是什么?_一颗凤梨的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值