当我进入我的Web服务器时,我正在使用ResourceHandler来提供javascript文件。现在我想提供完全相同的 javascript,但在我的 url 中接受/{id},这样当我的网站在 handleRequest 方法内执行 POST 请求时,我可以使用 {id}。我尝试使用路径模板,但是当我尝试访问我的网站时,它说它找不到我的一个js文件(如果我不使用pathTemplate,它可以工作)。
我能做些什么来让它工作?
您可以定义两个路由,一个用于控制器(用于接收发布数据),另一个用于提供确切的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类。