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

SpringBoot应用Docker化后访问出现白标错误求助

问题解决:Spring Boot Docker镜像运行时JSP文件404错误

核心原因

IDE本地运行正常但Docker中找不到/WEB-INF/login.jsp,本质是Docker镜像中缺失JSP文件或路径配置不匹配——Spring Boot默认jar包打包方式对WEB-INF下的JSP支持有限,且打包过程可能未将JSP文件纳入镜像。


具体解决方案

1. 调整打包方式为WAR包

Spring Boot使用JSP时,优先选择WAR打包(jar包默认不会正确处理WEB-INF目录结构):
修改pom.xml中的打包类型:

<packaging>war</packaging>

2. 补全JSP相关依赖

确保pom.xml中包含JSP编译和运行依赖,且scope设置为compile(避免Docker运行时缺失依赖):

<dependencies>
    <!-- JSP编译依赖 -->
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <scope>compile</scope>
    </dependency>
    <!-- JSTL标签库 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>
</dependencies>

3. 确保打包时包含JSP文件

如果坚持使用jar包打包,需在pom.xml中配置资源插件,将src/main/webapp下的文件复制到jar包的META-INF/resources目录:

<build>
    <resources>
        <resource>
            <directory>src/main/webapp</directory>
            <targetPath>META-INF/resources</targetPath>
            <includes>
                <include>**/**</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

4. 修正Dockerfile构建逻辑

  • 若使用WAR包,Dockerfile示例:
FROM openjdk:17-jdk-slim
WORKDIR /app
# 复制打包好的war包到容器内
COPY target/your-app-name.war app.war
EXPOSE 8080
# 通过java -jar启动war包
ENTRYPOINT ["java", "-jar", "app.war"]
  • 若使用jar包,确保COPY的jar包已包含JSP文件,启动命令不变。

5. 验证视图解析配置

确认Controller的视图解析前缀/后缀正确,可通过配置类或application.properties设置:

  • 配置类方式:
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/");
        resolver.setSuffix(".jsp");
        registry.viewResolver(resolver);
    }
}
  • 配置文件方式(application.properties):
spring.mvc.view.prefix=/WEB-INF/
spring.mvc.view.suffix=.jsp

6. 验证镜像内文件结构

进入Docker容器检查JSP文件是否存在:

# 替换为你的容器ID或名称
docker exec -it <container-id> ls /app/WEB-INF/

若为jar包,可解压jar包查看META-INF/resources/WEB-INF目录下是否有login.jsp。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 22:22:40