2017-10-18 64 views
0

我使用ResourceHandler在我的Web服务器上提供JavaScript文件。现在我想提供完全相同的javascript,但在我的url中接受/ {id},所以我可以在我的网站在handleRequest方法内执行POST请求时使用{id}。我尝试了一个pathTemplate,但是当我尝试访问我的网站时,它说它无法找到我的一个js文件(如果我不使用pathTemplate,它会起作用)。隐藏路径模板和资源处理程序

我能做些什么才能使它工作?

+0

如果你分享了一些代码,这将有所帮助! – aramaki

+0

呀还有没有什么真正显示,除了2行的代码在这里^^” – baskwo

回答

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(); 

有了这个例子,你的控制器将可在路线/控制器/ {ID}和你的JavaScript文件将直接送达。

请注意,这种服务文件的方式并不是最优的,它适用于文件不太大的情况。为了更好地提供文件服务,可以使用Undertow的PathResource和PathResourceManager类。

+0

我可能有missaid我想 我想有一个路径mywebsite.com/{id],这是‘入口’的东西。我的客户将输入他们自己的ID,我将提供给他们,然后在我的javascript中将其添加到我的帖子请求中。使用控制器/ {id}它会工作。我需要的只是第一部分,这就是我没有找到如何做到这一点 – baskwo

+0

从我的例子,如果你让一个HTTP请求到“/静态/ 1234”,它会留在网址,以便您可以使用您的JavaScript抓住它逻辑。我还是不知道你是如何开始你的JavaScript文件的下载(从一些纯的index.html?) – aramaki

+0

我只是尝试,它似乎试图访问“/静态/ 1234”子文件夹。 是的,我有一个html文件,我使用aurelia。所以我通过脚本标记在我的index.html中启动我的JavaScript文件的下载。 现在,而不是/ 1234我在做#1234,它的工作原理,但我宁愿做/ 1234比#1234。 – baskwo