我的要求是提供"index.html",而不管请求中设置了什么路由。我已经参考了underflow的路由模板格式,但没有用。它似乎对人们有效。处理程序看起来像
PathHandler path1 = Handlers.path()
.addPrefixPath("/*", new ResourceHandler(new FileResourceManager(new File(System.getProperty("user.dir")+"ed.jpg"), 100 * 1024)).setWelcomeFiles("index.html") );
并且像一样添加处理程序
server = Undertow
.builder()
.addHttpListener(serverConfig.getHttpPort(), serverConfig.getHost())
.addAjpListener(serverConfig.getAjpPort(), serverConfig.getHost())
.setHandler(path1)
.build();
我也尝试过使用PathResourceManager。这行不通。该处理程序能够完全匹配没有通配符的路径。似乎只有带有通配符的情况才会失败。
如有任何帮助,我们将不胜感激。
您不希望使用PathHandler
。
相反,使用ResourceManager直接从自定义处理程序为HTML文件提供服务,如下所示:
ResourceManager rm = new PathResourceManager(Paths.get("/path/to/your/folder"));
Resource r = rm.getResource("index.html");
Undertow.builder()
.addHttpListener(8080, "0.0.0.0")
.setHandler(Handlers.predicate(
ex -> ex.getRequestMethod().equals(Methods.GET),
ex -> r.serve(ex.getResponseSender(), ex, IoCallback.END_EXCHANGE),
ResponseCodeHandler.HANDLE_405)
).build().start();
注意1:我为带有谓词的请求谓词/方法添加了一个简单的检查,只允许GET请求并回退到简单的405响应。
Note2:您可能希望将为HTML文件提供服务的处理程序分派给工作线程。