系统环境: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;
}可以正常工作。