You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot启动失败:NoClassDefFoundError: jakarta/servlet/jsp/JspFactory

问题排查与解决方案

核心原因分析

出现java.lang.NoClassDefFoundError: jakarta/servlet/jsp/JspFactory异常,主要源于以下几个关键问题:

  1. Servlet API包冲突
    Spring Boot 2.4.2基于Java EE规范,依赖javax.servlet相关包,但你手动引入了jakarta.servlet-api(Jakarta EE规范),两者命名空间不兼容,直接导致类加载冲突,无法找到对应的JSP工厂类。

  2. Java版本不匹配
    Spring Boot 2.4.2官方仅支持Java 8至Java 11,而项目指定了Java 17,版本兼容性问题会引发底层类加载异常。

  3. JSP依赖缺失(若使用JSP)
    你注释掉了tomcat-jasper依赖,如果项目用JSP作为视图层,这个组件是Tomcat处理JSP的核心,缺失会导致JSP相关类无法加载。

具体修复步骤

步骤1:移除冲突的Jakarta Servlet依赖

删除POM中以下依赖:

<dependency>
    <groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
</dependency>

spring-boot-starter-web已经包含适配版本的javax.servlet-api,无需手动引入。

步骤2:调整Java版本或升级Spring Boot

  • 方案A(推荐):升级Spring Boot版本
    将父依赖版本改为支持Java 17的LTS版本,比如2.6.13:
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.6.13</version>
    <relativePath/>
</parent>
  • 方案B:降低Java版本
    将java.version改为11:
<properties>
    <java.version>11</java.version>
</properties>

步骤3:添加JSP支持依赖(若使用JSP)

如果项目需要JSP视图,取消注释并添加tomcat-jasper依赖,Spring Boot会自动管理版本:

<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-jasper</artifactId>
    <scope>provided</scope>
</dependency>

步骤4:清理并重新构建项目

执行Maven命令清理缓存并重新构建:

mvn clean install

内容的提问来源于stack exchange,提问作者ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 12:32:10