当我使用我的网络服务器时,我正在使用ResourceHandler提供javascript文件。现在我想提供完全相同的javascript,但在我的网址中接受/ {id},这样当我的网站在handleRequest方法中执行POST请求时,我可以使用{id}。我尝试使用pathTemplate,但是当我尝试访问我的网站时,它说它无法找到我的一个js文件(如果我不使用pathTemplate,它就可以工作)。
我能做些什么让它有效?
答案 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类。