我正在将Webapp从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源代码中用javax.servlet
替换jakarta.servlet
,用jakarta.servlet.jsp.jstl-2.0.0.jar
和jakarta.servlet.jsp.jstl-api-2.0.0.jar
.jars替换.jars javax.servlet.jsp.jstl-1.2.1.jar
和javax.servlet.jsp.jstl-api-1.2.1.jar
。
你能帮我解决这些错误吗?
======编辑======
Karwasz的答案解决了我的问题。
但是,在Webapp web.xml
文件中添加了与servlet有关的<multipart-config>
元素,而不是添加对我似乎不起作用的注释,如下所示:
<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>
发布于 2022-01-11 18:30:29
commons-fileupload
库不是,而且很可能永远不会与Servlet5.0兼容。从Servlet3.0开始,标准中就包含了类似的功能(请参阅第3.2节)。
要将代码迁移到Tomcat 10,您需要:
commons-fileupload
,@MultipartConfig
注释servlet,ServletFileUpload#parseRequest
的调用替换为HttpServletRequest#getParts
:
终集fileItemsList = request.getParts;FileItem
和Part
有几乎相同的方法,所以剩下的代码只需要做一些小的修改。https://stackoverflow.com/questions/70671224
复制相似问题