当前位置: 首页 > 面试题库 >

Undertow的路由模板格式

毋澄邈
2023-03-14
问题内容

是否有关于undertow的路由模板格式的任何文档。我想这样设置处理程序:

/ or /index.html -> Use handler 1
Anything else -> Use handler 2

我尝试了这个,但bu没用:

Handlers.routing()
        .add("GET", "/", handler1)
        .add("GET", "/index.html", handler1)
        .add("GET", "/*", handler2)

任何想法?


问题答案:

有两种方法可以实现此目的:

1)基本方法:PathHandler

Handlers.path()
    .addExactPath("/path1", handler1)
    .addPrefixPath("/path2", handler2);

handler1只会匹配上 /路径1 (或 /路径1 / )。

handler2将匹配 /路径/路径/ 和其他一切有开始 /路径/

2)路线方法:RoutingHandler

如果使用RoutingHandler,则可以选择轻松地从路径中提取变量。例如,这对于构建REST
API很方便(请注意上便捷get方法的用法RoutingHandler)。

Handlers.routing().get("/{test}/*", exchange -> {
    PathTemplateMatch pathMatch = exchange.getAttachment(PathTemplateMatch.ATTACHMENT_KEY);
    String itemId1 = pathMatch.getParameters().get("test"); // or exchange.getQueryParameters().get("test")
    String itemId2 = pathMatch.getParameters().get("*"); // or exchange.getQueryParameters().get("*")
}))

*参数可以匹配任何东西(例如像路径a/b/c)。为了使用该*参数,您需要在路由模板中定义一个实际的命名参数(test在我的示例中)。

请注意,在路由模板中定义的参数将与查询参数(exchange.getQueryParameters())一起使用。这是默认行为。如果您不希望这样做,则可以像这样创建路由处理程序:Handlers.routing(false).get(...)然后从交换机的附件中检索参数。

对于您的路由处理程序不匹配的任何路由,您可以使用中的fallbackHandler可用路由RoutingHandler

Handlers.routing()
      .get("/", handler1)
      .get("/index.html", handler1)
      .setFallbackHandler(handler2);

默认情况下,fallbackHandler简单地返回带有404状态代码的空响应正文。该handler2会匹配任何其他请求,不仅 GET
请求。

综合实例

您当然可以结合PathHandlerRoutingHandler满足您的需求。

这是一个更实际的设置的小示例

Undertow.builder().addHttpListener(8080, "0.0.0.0")
    .setHandler(Handlers.path()

        // REST API path
        .addPrefixPath("/api", Handlers.routing()
            .get("/customers", exchange -> {...})
            .delete("/customers/{customerId}", exchange -> {...})
            .setFallbackHandler(exchange -> {...}))

        // Redirect root path to /static to serve the index.html by default
        .addExactPath("/", Handlers.redirect("/static"))

        // Serve all static files from a folder
        .addPrefixPath("/static", new ResourceHandler(
            new PathResourceManager(Paths.get("/path/to/www/"), 100))
            .setWelcomeFiles("index.html"))

    ).build().start();

该应用程序还提供文件系统中的静态文件。例如,这很方便提供javascript应用程序或静态html文件。



 类似资料:
  • 对于Super Rentals,我们希望首先到达home页面,在上面显示租赁列表,然后可以跳转到about页面和contact页面。(下列测试在/opt/super-rentals目录下进行) about路由 生成about路由: $ ember generate route about installing route create app/routes/about.js create

  • 英文原文:http://emberjs.com/guides/routing/rendering-a-template/ 路由处理方法最主要的职责之一就是将恰当的模板渲染到屏幕上去。 默认情况下,路由处理方法将模板渲染到离它最近的带有模板的父级模板中去。 1 2 3 4 5 App.Router.map(function() { this.resource('posts'); }); Ap

  • 最终编辑:使用transcluded指令处理plunker。 编辑:我用第一个答案中给出的解决方案做了第一次撞击。它可以工作,但这不是期望的行为,因为模板包含所有的部分内容。 我用我希望达到的目标做了第二次尝试(但显然不起作用)。我认为这主要是因为模板不是分部的父级,但它包含在其中,所以ui路由器不太理解我想要什么。 在此方面的任何帮助都将不胜感激! 我们正在建立一个网站与角材料和UI路由器,我们

  • 英文原文: http://emberjs.com/guides/routing/specifying-a-routes-model/ 指定路由的模型 应用中的模板背后是由模型来支撑的。那么模板是如何知道需要显示哪些模型的呢? 例如,如果有一个photos模板,那么它是如何知道应该渲染哪一个模型的呢? 这正是Ember.Route的工作之一。通过定义一个与模板同名的,并实现其model方法的路由,是

  • IntelliJ IDEA 2018.1.3 的自动格式化样式似乎不适用于包含 HTML 标签的 Freemarker 模板 (.ftl)。当使用应用代码格式时,会发生以下情况: 而不是看起来更正确的: 是否有任何格式选项可以使Freemarker格式与HTML格式相同,遵循正确的页面缩进?

  • 概述: Router是一种根据不同URL的来表现的页面状态的能力,基于HTML5 history api实现. Router模块提供了根据不同组件state、model的states、以及自定义states来实现的对浏览器的前进后退导航、有状态的书签、可分享的URL、URL自定义处理器等支持。如果你曾经使用过一些后端框架比如Express、Sinatra、Play,那么你将会发现和他们的想法非常相