关于项目路径中的空格,导致ResourcePath无法正常读取

系统环境:Window

开发环境:IDEA

JFinal版本:4.8

项目路径:D:\\Project\\Project Name\\WebRoot

启动方式:

server = UndertowServer.create(ApiConfig.class);
server.setHost("0.0.0.0").setPort(80).setContextPath("/").setResourcePath("WebRoot").setDevMode(false).start();

试图访问WebRoot下的静态资源文件,返回404.

部署在Tomcat下,可以正常访问。

查看UndertowConfig得到的ResourceManager,一个都没有。

查看源码com.jfinal.server.undertow.ResourceManagerBuilder

private List<String> buildResourcePathList(String resourcePath) {
   List<String> ret = new ArrayList<>();
   String resourcePathArray[] = resourcePath.split(",");
   for (String path : resourcePathArray) {
      if (UndertowConfig.notBlank(path)) {
         ret.add(path.trim().replace(" ", ""));
      }
   }
   if ( ! ret.contains("webapp") ) {
      ret.add("webapp");
   }
   return ret;
}

对我的resourcePath,trim的基础上,replace(" ", "") 把项目路径D:\\Project\\Project Name\\WebRoot中的所有空格都移除了,D:\\Project\\ProjectName\\WebRoot文件夹当然不存在。

请问是作何考量?


目前临时性方案:自定义ApiUndertowConfig类,继承UndertowConfig,覆盖getResourceManager方法。

@Override
public ResourceManager getResourceManager() {
    CompositeResourceManager resourceManager = (CompositeResourceManager) super.getResourceManager();
    resourceManager.add(new FileResourceManager(new File("D:\\Project\\Project Name\\WebRoot"), 1024, false));
    return resourceManager;
}

可以正常工作。

评论区

zhangtianxiao

2020-09-14 23:42

23333 还有这么一个骚气的replace空格

chcode

2020-09-15 09:45

一般linux环境不会有空格