下载路径模板和资源处理程序

时间:2017-10-18 17:55:46

标签: javascript java undertow

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

我能做些什么让它有效?

1 个答案:

答案 0 :(得分:2)

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

更标准的解决方案是拥有专用于提供所有资产(包括您的javascript应用)的路线。为此,请查看以下答案:Routing template format for undertow

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类。