【问题标题】:undertow path template and resource handlerundertow 路径模板和资源处理程序
【发布时间】:2018-03-30 16:35:21
【问题描述】:

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

我该怎么做才能让它工作?

【问题讨论】:

  • 如果你分享一些代码会有所帮助!
  • 是的,除了这里的两行代码,没有什么可显示的 ^^'

标签: javascript java undertow


【解决方案1】:

您可以定义两条路由,一条用于您的控制器(用于接收发布数据),一条用于提供您的确切 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 类。

【讨论】:

  • 我可能错过了我想要的我会有一个路径 mywebsite.com/{id] 这是“入口”。我的客户将输入他们自己的 ID,我将提供给他们,然后在我的 javascript 中捕获它以将其添加到我的发布请求中。使用 controller/{id} 它将工作。我只需要第一部分,这就是我不知道该怎么做
  • 在我的示例中,如果您向“/static/1234”发出 http 请求,它将保留在 url 中,因此您可以使用您的 javascript 逻辑来获取它。我仍然不知道你是如何开始下载你的 javascript 文件的(来自一些普通的 index.html?)
  • 我刚试过,它似乎试图访问“/static/1234”子文件夹。是的,我有一个 html 文件,我使用 aurelia。因此,我通过 index.html 中的脚本标签开始下载我的 javascript 文件。现在我不做 /1234 我正在做 #1234 并且它有效,但我宁愿做 /1234 而不是 #1234。
  • 这是有道理的,资源处理程序将尝试在特定文件夹中定位资源,如果找不到则给出 404... 也许是查询参数? /static?id=1234
  • 好的,感谢您的帮助!我现在将使用 #,当我有时间时,我将扩展 ResourceHandler 并使其工作!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-09
  • 2020-12-01
相关资源
最近更新 更多