java:无法访问 javax.servlet.ServletException 类文件,因为找不到 javax.servlet.ServletException

问题描述 投票:0回答:3

描述

当我开发我的java项目时,我使用:

Java version: 1.8
,
Apache Tomcat version 9.0.x

然后,我使用

Tomcat 10.0.x
来运行我的项目(对我的项目进行了很少的修改)。我必须将
javax
包相关导入更改为
jakarta
包导入。

当我构建项目时,出现以下错误;

java: cannot access javax.servlet.ServletException  
class file for javax.servlet.ServletException not found

修复

当我搜索修复程序时,我发现我需要在我的

Java Servlet API
文件中包含
pom.xml
依赖项。这样我就可以成功构建项目了。

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

问题

  1. 为什么当我 迁移到 Tomcat 10 ?
    我确实包含了 
  2. Java Servlet API
  3. 依赖项, 但这是正确的解决办法吗?
    
        
java tomcat java-8 tomcat9 tomcat10
3个回答
5
投票
为什么在迁移到 Tomcat 10 时必须包含 Java Servlet API 依赖项?

可能是因为您的应用程序依赖于符合 JSP 4.0.x 规范的内容。

我确实包含了 Java Servlet API 依赖项,但这是一个正确的修复吗?

不,这不是正确的解决方法。 虽然您已成功构建应用程序,但在部署到 Tomcat 10 时,您大多数会遇到类加载器错误。这是因为 Tomcat 10 运行时库不提供
Java Servlet API

类。

正确的方法是确定您的应用程序或其依赖项为何尝试使用 

javax.servlet.*

中的类...并消除这种情况。


    删除
  1. javax.servlet

    /

    javax.servlet
    /
    javax.servlet-api
    依赖项。
    
    

  2. 在您的应用程序代码库中搜索对
  3. 4.0.1

    的任何剩余引用 ... 并更改它们。

    
    

  4. 使用
  5. Maven 依赖关系树插件

    尝试确定哪些应用程序依赖项依赖于旧的 javax.servlet API。 寻找那些使用

    javax.servlet
    的依赖项的新版本。
    
    

  6. 如果2和3没有找出罪魁祸首,事情就会变得相当困难。 您可能需要解压所有依赖的 JAR 文件并使用
jakarta.servlet

javap
“分析”它们。 或者可能有更好的方法。
如果您能够识别依赖项,但找不到与 Jakarta 兼容的版本,那么您会遇到另一种问题。  您必须选择是努力移植依赖项、寻找另一个库(或其他库)来提供该功能,还是从您的 Web 应用程序中删除该功能。


0
投票


0
投票

grep

	
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.