底层路径模板和资源处理程序

undertow path template and resource handler

当我访问我的网络服务器时,我正在使用 ResourceHandler 来提供 javascript 文件。现在我想提供完全相同的 javascript 但在我的 url 中接受 /{id} 这样当我的网站在处理请求方法。我尝试使用 pathTemplate,但是当我尝试访问我的网站时,它说它找不到我的一个 js 文件(如果我不使用 pathTemplate,它就可以工作)。

我该怎么做才能让它发挥作用?

您可以定义两条路线,一条用于您的控制器(接收 post 数据),一条用于提供您的确切 javascript 文件。

一个更标准的解决方案是拥有一条专用于为所有资产(包括您的 javascript 应用程序)提供服务的路线。为此,请查看以下答案:

Undertow.builder().addHttpListener(8080, "0.0.0.0")
  .setHandler(Handlers.path()

    // Controllers
    .addPrefixPath("/controller", Handlers.routing()
        .post("/{id}", exchange -> {
          String id = exchange.getQueryParameters().get("id").getFirst();
        }))

    // Serve your file, preserving any route information
    .addPrefixPath("/app.js",  exchange -> {
        Path p = Paths.get("/path/to/app.js");
        exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "application/javascript");
        exchange.getResponseSender().send(
          ByteBuffer.wrap(Files.readAllBytes(p))
      )})
).build().start();

在此示例中,您的控制器将在路由 /controller/{id} 上可用,您的 javascript 文件将直接提供。

请注意,这种提供文件的方式并不是最佳方式,如果文件不是太大,它就可以工作。为了更好地提供文件服务,可以使用 Undertow 的 PathResource 和 PathResourceManager 类.