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

Spring Boot部署Tomcat出现org.apache.jsp.index_jsp类找不到异常如何解决

Spring Boot WAR包部署Tomcat启动失败排查方案

根因定位

你遇到的java.lang.ClassNotFoundException: org.apache.jsp.index_jsp报错本质是Tomcat无法正常编译JSP文件,或编译后无法找到对应生成的类,结合Spring Boot打包部署外部Tomcat的场景,按以下步骤依次排查即可解决:

1. 项目打包配置校验

  • 确认启动类适配外部Tomcat部署,需继承SpringBootServletInitializer并重写configure方法,示例如下:
@SpringBootApplication
public class SpringjwtApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(SpringjwtApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(SpringjwtApplication.class, args);
    }
}
  • 确认Maven/Gradle依赖配置正确,以Maven为例,需排除Spring Boot内置Tomcat,同时引入JSP编译所需依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!-- 排除内置Tomcat -->
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- 引入JSP编译依赖,scope设为provided,使用外部Tomcat提供的依赖 -->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <scope>provided</scope>
</dependency>

2. WAR包结构校验

解压你上传的war包,确认以下路径正确:

  • JSP文件需要放在项目src/main/webapp目录下,打包后对应在war包根目录或WEB-INF/jsp路径下(需和你配置的Spring MVC视图前缀匹配),如果路径错误会导致Tomcat找不到JSP文件无法编译。
  • 检查WEB-INF/lib目录是否存在所需的业务依赖jar包,避免打包时漏依赖。

3. Tomcat环境校验

  • 权限校验:Tomcat编译JSP生成的类默认存放在/opt/tomcat/work/Catalina/localhost/目录下,运行Tomcat的用户需要该目录的读写权限,执行以下命令修改权限(替换为你实际运行Tomcat的用户名和组):
sudo chown -R tomcat:tomcat /opt/tomcat/work /opt/tomcat/temp /opt/tomcat/webapps
  • 缓存清理:停止Tomcat服务后,删除以下目录和文件,重新上传war包启动:
    • /opt/tomcat/webapps/springjwt目录
    • /opt/tomcat/webapps/springjwt.war文件
    • /opt/tomcat/work/Catalina/localhost/springjwt目录

4. 版本兼容性校验

确认Spring Boot版本和外部Tomcat版本匹配:

  • Spring Boot 2.x版本内置Tomcat 9.x,需部署到Tomcat 9.x版本,不能使用Tomcat 10+(Tomcat 10使用jakarta.servlet命名空间,和Spring Boot 2.x使用的javax.servlet不兼容)
  • Spring Boot 3.x版本必须部署到Tomcat 10.1+版本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 15:09:02