如何解决tomcat10仲javax和jakarta的冲突问题

引用 **org.apache.tomcat.util.http.fileupload.servlet.*****org.apache.commons.fileupload.servlet.*** 的时候,java文件最开头标出异常:**The type jakarta.servlet.http.HttpServletRequest cannot be resolved. It is indirectly referenced from required .class files**

上网查了一下感觉像是javax的jakarta冲突问题,网上大多数解决方法就是放弃tomcat10用回tomcat9,难道就没有其他更好的解决方法了吗?

环境是 win10 + eclipse-2021-06 + java11 + tomcat-10.0.8 。

另外附上源码,希望会有帮助:
package bag_servlet;

import java.io.*;
import jakarta.servlet.*;
import jakarta.servlet.annotation.*;
import jakarta.servlet.http.*;
import java.util.*;
import org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload;
import org.apache.tomcat.util.http.fileupload.FileItem;
import org.apache.tomcat.util.http.fileupload.RequestContext;
import org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory;
//import org.apache.commons.fileupload.*;
//import org.apache.commons.fileupload.disk.*;
//import org.apache.commons.fileupload.servlet.*;
//import org.apache.commons.fileupload.FileItem;
//import org.apache.commons.fileupload.disk.DiskFileItemFactory;
//import org.apache.commons.fileupload.servlet.ServletFileUpload;

@SuppressWarnings("serial")
public class ServletUpload extends HttpServlet {

    //上传文件存储目录
    private static final String UPLOAD_DIRECTORY = "upload";

    //上传配置
    private static final int MEMORY_THRESHOLD    = 1024*1024*3;    //3MB
    private static final int MAX_FILE_SIZE        = 1024*1024*40;    //40MB
    private static final int MAX_REQUEST_SIZE    = 1024*1024*50;    //50MB


    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub

        //检查是否为多媒体上传
        if(false == ServletFileUpload.isMultipartContent((RequestContext) req)) {
            //如果不是则停止
            PrintWriter writer = resp.getWriter();
            writer.println("ERROR:表单必须包含enctype=multipart/form-data");
            writer.flush();
            return;
        }

        //配置上传参数
        DiskFileItemFactory factory = new DiskFileItemFactory();
        //设置内存临界值,超过后将产生临时文件并储存与临时目录
        factory.setSizeThreshold(MEMORY_THRESHOLD);
        //设置临时存储目录
        factory.setRepository(new File(System.getProperty("java.io.tmpdir")));

        ServletFileUpload upload = new ServletFileUpload(factory);

        //设置最大文件上传值
        upload.setFileSizeMax(MAX_FILE_SIZE);
        //舌质最大请求值(包含文件和表单数据)
        upload.setSizeMax(MAX_REQUEST_SIZE);
        //中文处理
        upload.setHeaderEncoding("UTF-8");

        //构造临时路径存储上传的文件
        //这个路径相对当前应用的目录
        String uploadPath = req.getServletContext().getRealPath("./") + File.separator + UPLOAD_DIRECTORY;

        //如果目录不存在则创建
        File uploadDir = new File(uploadPath);
        if(false == uploadDir.exists()) {
            uploadDir.mkdir();
        }

        try {
            //解析请求的内容提取文件数据
            //@SuppressWarnings("unchecked")
            List<FileItem> formItems = upload.parseRequest((RequestContext) req);

            if(formItems != null && formItems.size() > 0) {
                //迭代表单数据
                for(FileItem item: formItems) {
                    //处理不在表单中的字段
                    if(false == item.isFormField()) {
                        String fileName = new File(item.getName()).getName();
                        String filePath = uploadPath + File.separator +fileName;
                        File storeFile = new File(filePath);
                        //在控制台输出文件的上传路径
                        System.out.println(filePath);
                        //保存文件到硬盘
                        item.write(storeFile);
                        req.setAttribute("message", "文件上传成功!");
                    }
                }
            }
        }
        catch(Exception e) {
            req.setAttribute("message", "错误信息:" + e.getMessage());
        }

        //跳转到message.jsp
        req.getServletContext().getRequestDispatcher("/message.jsp").forward(req, resp);
    }

}
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!