Maven文件上传项目中HttpServletRequest缺失错误排查与解决
错误原因分析
- 依赖版本不兼容:你使用的
commons-fileupload 1.4基于旧的javax.servletAPI开发,它依赖的HttpServletRequest类位于javax.servlet.http包下;但你的项目引入的是jakarta.servlet-api 4.0.4,该API已将Servlet相关类迁移到jakarta.servlet.http包下,两者类路径不匹配,导致ServletFileUpload.parseRequest()方法找不到对应的HttpServletRequest类型。
修复方案
方案一:升级commons-fileupload到支持Jakarta的版本(推荐)
修改pom.xml中的commons-fileupload依赖为2.x版本(该版本适配Jakarta Servlet API):
<dependencies> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>4.0.4</version> <scope>provided</scope> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>2.0.1</version> </dependency> </dependencies>
更新依赖后,Eclipse会自动下载适配版本,解决类路径不匹配问题。
方案二:回退到javax.servlet-api(不推荐,仅作兼容旧版本备选)
若坚持使用commons-fileupload 1.4,可将jakarta.servlet-api替换为旧的javax.servlet-api:
<dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version> </dependency> </dependencies>
同时需将代码中jakarta.servlet相关导入替换为javax.servlet:
import javax.servlet.ServletException; import javax.servlet.annotation.MultipartConfig; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
额外代码优化提示
代码中文件路径"C:\FileUploadDemo"存在转义问题,Windows系统下路径需使用双反斜杠\\或正斜杠/,否则会导致路径解析错误:
item.write(new File("C:\\FileUploadDemo\\" + item.getName())); // 或者 item.write(new File("C:/FileUploadDemo/" + item.getName()));
内容的提问来源于stack exchange,提问作者HKS11
相关产品推荐
相关产品推荐

