使用通配符的 Undertow 路由格式
Undertow Routing Format using Wildcards
我的要求是服务 "index.html" 而不管请求中设置的路由是什么。我引用了 但无济于事。它似乎对人们有用。处理程序看起来像
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:我在请求 verb/method 中添加了一个带有谓词的简单检查,只允许 GET 请求并回退到简单的 405 响应。
注意 2:您可能希望将服务于 HTML 文件的处理程序分派给工作线程。
我的要求是服务 "index.html" 而不管请求中设置的路由是什么。我引用了
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:我在请求 verb/method 中添加了一个带有谓词的简单检查,只允许 GET 请求并回退到简单的 405 响应。
注意 2:您可能希望将服务于 HTML 文件的处理程序分派给工作线程。