首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Tomcat 10 Webapp迁移- servletFileUpload.parseRequest错误

Tomcat 10 Webapp迁移- servletFileUpload.parseRequest错误
EN

Stack Overflow用户
提问于 2022-01-11 17:47:18
回答 1查看 874关注 0票数 0

我正在将Webapp从Tomcat 9迁移到Tomcat 10环境。我正在使用Eclipse IDE

下面是引发错误的代码的一部分:

代码语言:javascript
运行
复制
import java.util.List;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
[...]
DiskFileItemFactory diskFileItemFactory = null;
ServletFileUpload   servletFileUpload   = null;
List<FileItem>      fileItemsList       = null;

    diskFileItemFactory = new DiskFileItemFactory();
    servletFileUpload   = new ServletFileUpload(diskFileItemFactory);
        
    fileItemsList = (List<FileItem>) servletFileUpload.parseRequest(request);

这些错误被链接到最后一行。

我知道错误是:

代码语言:javascript
运行
复制
The project was not built since its build path is incomplete. Cannot find the class file for javax.servlet.http.HttpServletRequest. Fix the build path then try building this project
The type javax.servlet.http.HttpServletRequest cannot be resolved. It is indirectly referenced from required .class files

作为迁移的一部分,我不得不在Webapps源代码中用javax.servlet替换jakarta.servlet,用jakarta.servlet.jsp.jstl-2.0.0.jarjakarta.servlet.jsp.jstl-api-2.0.0.jar .jars替换.jars javax.servlet.jsp.jstl-1.2.1.jarjavax.servlet.jsp.jstl-api-1.2.1.jar

你能帮我解决这些错误吗?

======编辑======

Karwasz的答案解决了我的问题。

但是,在Webapp web.xml文件中添加了与servlet有关的<multipart-config>元素,而不是添加对我似乎不起作用的注释,如下所示:

代码语言:javascript
运行
复制
  <servlet>
    <description></description>
    <display-name>FooServlet</display-name>
    <servlet-name>FooServlet</servlet-name>
    <servlet-class>com.foo.bar.FooServlet</servlet-class>    
    <multipart-config>
      <location>/tmp</location>
      <max-request-size>418018841</max-request-size>
      <file-size-threshold>1048576</file-size-threshold>
    </multipart-config>    
  </servlet>
  <servlet-mapping>
    <servlet-name>FooServlet</servlet-name>
    <url-pattern>/do_foo_servlet</url-pattern>
  </servlet-mapping>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-11 18:30:29

commons-fileupload库不是,而且很可能永远不会与Servlet5.0兼容。从Servlet3.0开始,标准中就包含了类似的功能(请参阅第3.2节)。

要将代码迁移到Tomcat 10,您需要:

  1. 从依赖项中删除commons-fileupload
  2. @MultipartConfig注释servlet,
  3. 将对ServletFileUpload#parseRequest的调用替换为HttpServletRequest#getParts 终集fileItemsList = request.getParts;
  4. 因为FileItemPart有几乎相同的方法,所以剩下的代码只需要做一些小的修改。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70671224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档