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