【问题标题】:Tomcat 10 Webapp migration - servletFileUpload.parseRequest errorTomcat 10 Webapp 迁移 - servletFileUpload.parseRequest 错误
【发布时间】:2022-01-11 17:47:18
【问题描述】:

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

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

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);

错误链接到最后一行。

我得到错误:

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 Java 源代码中将 javax.servlet 替换为 jakarta.servlet,并将 .jars javax.servlet.jsp.jstl-1.2.1.jarjavax.servlet.jsp.jstl-api-1.2.1.jar 替换为 jakarta.servlet.jsp.jstl-2.0.0.jarjakarta.servlet.jsp.jstl-api-2.0.0.jar .jars。

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

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

Piotr P. Karwasz 的回答解决了我的问题。

但是,我没有添加似乎对我不起作用的注释,而是在 Webapp web.xml 文件中为相关的 servlet 添加了 &lt;multipart-config&gt; 元素,如下所示:

  <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>

【问题讨论】:

标签: java tomcat migration


【解决方案1】:

commons-fileupload 库不兼容并且可能永远不会与 Servlet 5.0 兼容。从 Servlet 3.0 开始,标准中包含了类似的功能(请参阅 section 3.2)。

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

  1. 从你的依赖中移除commons-fileupload

  2. @MultipartConfig注释你的servlet,

  3. 将对ServletFileUpload#parseRequest的调用替换为HttpServletRequest#getParts

    final Collection<Parts> fileItemsList = request.getParts;
    
  4. 由于FileItemPart 具有几乎相同的方法,因此只需要对其余代码进行细微更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 2019-03-20
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    相关资源
    最近更新 更多