【问题标题】:Jetty 9: Setting up handlers and connectorsJetty 9:设置处理程序和连接器
【发布时间】:2014-11-26 17:02:20
【问题描述】:

我查看了有关 Jetty 9 架构的文档 (http://www.eclipse.org/jetty/documentation/current/architecture.html),但我仍然对处理程序和连接器之间的关系感到困惑。

  1. 您能否将处理程序链接到特定的连接器(如果可以,如何连接?连接器似乎没有 setHandler 方法)?

  2. 或者所有东西都交给一个主处理程序,然后你从那里分发东西? (即,您找出它来自哪个连接器,然后将其转发给不同的处理程序或自己处理)

非常感谢!

【问题讨论】:

    标签: java jetty embedded-jetty jetty-9


    【解决方案1】:

    Connectors 是侦听传入连接的组件。

    Handlers 是用于处理所有请求的低级码头机制。

    Jetty 将所有有效请求(有一类请求只是对 HTTP 的使用不当,并可能导致 400 Bad Request 之类的事情)发送到在 Server.getHandler() 注册的任何内容

    有许多类型的函数特定处理程序,选择最适合您需求的一种并从中扩展,或者将您的处理程序包装在更通用的方法中。

    典型的服务器设置为具有 HandlerList 或 HandlerCollection 来指示可能行为的列表。

    每个处理程序都被(按顺序)命中,如果该处理程序决定它想要做它可以做的事情。

    如果一个处理程序确实产生了一些东西,那么对baseRequest.setHandled(true); 的调用用于告诉 Jetty 在当前处理程序之后不再处理任何处理程序。

    至于如何将某些处理程序限制到某些连接器,这是通过 virtualhosts 机制完成的。

    VirtualHosts 是一个融入ContextHandler 特定处理程序的概念,因此您需要将自定义处理程序包装在ContextHandler 中以获得VirtualHosts 的好处。

    要使用它,您可以使用Connector.setName(String) 命名您的连接器,然后在ContextHandler 的VirtualHosts 定义中使用@{name} 语法来指定只有该命名的连接器可以用于为特定的ContextHandler 提供服务.

    例子:

        ServerConnector httpConnector = new ServerConnector(server);
        httpConnector.setName("unsecured"); // named connector
        httpConnector.setPort(80);
    
        ContextHandler helloHandler = new ContextHandler();
        helloHandler.setContextPath("/hello");
        helloHandler.setHandler(new HelloHandler("Hello World"));
        helloHandler.setVirtualHosts(new String[]{"@unsecured"});
    

    【讨论】:

    • 哇,太棒了,非常感谢。在我将您的答案标记为答案之前的最后一个澄清,如果未调用 baseRequest.setHandled(true),那么它将被发送到第二个注册的处理程序?
    • 没有baseRequest.setHandled(true); 请求处理将继续到下一个处理程序,正确。
    • @JoakimErdfelt 假设我有一个处理程序,它在请求上设置一些标头,然后调用super.handle(...)。在此处理程序中调用super.handle(...) 后是否可以改变httpResponse
    • @user2004685 只有那个处理程序是HandlerWrapper 的实现,并且响应尚未提交。
    • @JoakimErdfelt 有道理。感谢您解释这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    相关资源
    最近更新 更多