2017-10-18 11 views
0

J'utilise un ResourceHandler pour fournir des fichiers javascript lorsque je vais sur mon serveur web. La chose est maintenant je voudrais fournir exactement le même javascript mais en acceptant/{id} dans mon URL afin que je puisse utiliser le {id} quand mon site Web fait la demande de POST à ​​l'intérieur de la méthode handleRequest. J'ai essayé avec un pathTemplate mais quand j'essaye d'accéder à mon site Web il dit qu'il ne peut pas trouver un de mes dossiers de js (cela fonctionne si je n'utilise pas le pathTemplate).modèle de chemin et gestionnaire de ressources Undowow

Que puis-je faire pour que cela fonctionne?

+0

Cela aiderait si vous partagiez du code! – aramaki

+0

Ouais ben ben il n'y a vraiment rien à montrer sauf 2 lignes de code ici ^^ ' – baskwo

Répondre

2

Vous pouvez définir deux itinéraires, un pour votre contrôleur (pour recevoir les données de publication) et un pour servir votre fichier javascript exact.

Une solution plus standard consiste à avoir un itinéraire dédié pour desservir tous les actifs (y compris votre application javascript). Pour cela, regardez la réponse suivante: 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(); 

Avec cet exemple, votre contrôleur sera disponible à la route /contrôleur/{id} et votre fichier javascript sera servi directement.

Notez que cette façon de servir le fichier n'est pas optimale, cela fonctionne si les fichiers ne sont pas trop volumineux. Pour une meilleure façon de servir les fichiers, on peut jouer avec les classes PathResource et PathResourceManager d'Undertow.

+0

J'ai peut-être raté ce que je veux Je voudrais avoir un chemin mywebsite.com/{id] qui est le "entry". Mes clients entreront leur propre identifiant que je leur fournirai et l'attraperons dans mon javascript pour l'ajouter dans ma demande de publication. En utilisant controller/{id} ça va marcher. J'ai juste besoin de la première partie et c'est ce que je ne trouve pas comment le faire – baskwo

+0

De mon exemple, si vous faites une requête http à "/ static/1234" il restera dans l'url donc vous pouvez l'attraper avec votre javascript logique. Je ne sais toujours pas comment vous lancez le téléchargement de votre fichier javascript (à partir d'index.html?) – aramaki

+0

Je viens d'essayer et il semble essayer d'accéder au sous-dossier "/ static/1234". Oui j'ai un fichier html et j'utilise aurelia. Donc, je lance le téléchargement de mon fichier javascript par script dans mon index.html. Pour l'instant, au lieu de faire/1234, je fais # 1234 et cela fonctionne, mais je préfère faire/1234 que # 1234. – baskwo