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

Spring Boot在含空格目录运行时无法找到视图问题

解决Spring Boot嵌入式Tomcat在含空格目录下无法找到JSP的问题

这个问题我维护旧项目时恰好碰到过,核心原因是Spring Boot 1.5.x版本的嵌入式Tomcat(8.5.x系列)在处理带空格的路径时,JSP编译器Jasper没有正确转义空格字符,导致解析Meta-INF/resources下的JSP资源时路径失效。下面给你几个针对性的解决方案,按优先级排序:

方案一:自定义Tomcat容器工厂修复路径编码

这是最直接的代码层面修复,不需要修改部署脚本,适合必须在带空格目录运行的场景:

创建一个配置类,自定义TomcatEmbeddedServletContainerFactory,手动处理资源路径的编码:

import org.apache.catalina.Context;
import org.apache.catalina.WebResourceRoot;
import org.apache.catalina.webresources.DirResourceSet;
import org.apache.catalina.webresources.StandardRoot;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.tomcat.TomcatContextCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.io.File;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

@Configuration
public class TomcatCustomConfig {

    @Bean
    public TomcatEmbeddedServletContainerFactory tomcatEmbeddedServletContainerFactory() {
        TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
        factory.addContextCustomizers((TomcatContextCustomizer) context -> {
            // 获取当前jar包所在目录的路径
            String jarPath = new File(".").getAbsolutePath();
            try {
                // 对路径中的空格进行URL编码,Windows下空格对应%20而非+
                String encodedJarPath = URLEncoder.encode(jarPath, StandardCharsets.UTF_8.name())
                        .replace("+", "%20");
                WebResourceRoot resources = new StandardRoot(context);
                // 添加Meta-INF/resources的资源路径,使用编码后的路径
                resources.addPreResources(new DirResourceSet(resources, "/META-INF/resources",
                        encodedJarPath + "/META-INF/resources", "/"));
                context.setResources(resources);
            } catch (Exception e) {
                e.printStackTrace();
            }
        });
        return factory;
    }
}

这段代码的作用是手动构建Tomcat的资源根目录,对含空格的路径编码后再添加资源集,确保Jasper能正确解析路径。

方案二:修改启动脚本,给jar路径加引号

如果不想修改代码,可以在Windows的启动脚本(比如.bat文件)中,给jar包的路径加上双引号:

@echo off
java -jar "C:\space example\your-service.jar"

这样Windows命令行就能正确识别带空格的路径,Tomcat启动时可获取到正确的资源路径。如果是双击jar启动,可以右键创建快捷方式,在快捷方式的目标栏里给路径加引号。

方案三:升级Spring Boot版本(可选)

Spring Boot 2.0及以上版本修复了这个嵌入式Tomcat路径编码的问题,如果你的项目可以兼容升级,直接升级到2.0+版本(比如2.1.x)就能解决问题。不过考虑到你使用的是1.5.9,可能存在旧依赖兼容问题,这个方案可作为长期优化方向。

验证步骤

  1. 将jar包放到C:\space example目录下
  2. 用方案一的代码重新打包,或用方案二的脚本启动服务
  3. 访问JSP页面,确认页面能正常加载

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:47:35