首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Servlet 文件上傳:ApplicationPart 類找不到?Tomcat 依賴缺失與導入指南

     編輯:程式設計綜合問答

現象

代碼中 `(ApplicationPart) part` 編譯報錯:`cannot find symbol ApplicationPart`。

根因

`ApplicationPart` 是 **Tomcat 內部實現類** (`org.apache.catalina.core.ApplicationPart`),**不在 Servlet API 標準包中**,僅在 `catalina.jar` 內部。

解決方案

  1. 不要強轉具體實現類:只使用標準 `javax.servlet.http.Part` 接口方法:
    `part.getSubmittedFileName()`、`part.getInputStream()`、`part.write(path)`、`part.delete()`。
  2. 若必須用 Tomcat 特有功能:在 `provided` 作用域引入 `catalina.jar` (Maven):
    `org.apache.tomcattomcat-catalina9.0.xprovided`
    但**強耦合容器**,不利於遷移 Jetty/Undertow/WebLogic,極不推薦。
  3. Maven 依賴檢查:確保 `servlet-api` / `javax.servlet-api` 版本與目標容器匹配,`scope=provided`。

標準 Part 使用示例


@MultipartConfig
@WebServlet("/upload")
public class UploadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        for (Part part : req.getParts()) {
            if (part.getSubmittedFileName() != null) {
                String fileName = Paths.get(part.getSubmittedFileName()).getFileName().toString();
                part.write(UPLOAD_DIR + File.separator + fileName); // 直接寫入磁盤
            }
        }
        resp.getWriter().write("上傳成功");
    }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved