причал: как программно настроить несколько виртуальных хостов?

У меня есть следующий простой встроенный сервер Jetty 9:

    final Server server = new Server();
    final ServerConnector connector = new ServerConnector(server);
    connector.setPort(443);
    server.setConnectors(new Connector[] { connector });
    server.setHandler(new FooBarHandler());
    server.start();
    server.join();

Запросы к https://foo.bar.com/ и https://baz.bar.com/ обрабатываются этим кодом. Я хочу изменить его так, чтобы:

  • Запросы к foo.bar.com идут в FooBarHandler
  • Запросы к baz.bar.com переходят в BazBarHandler
  • Вся эта конфигурация должна быть программной, а не файлами конфигурации.

Я знаком с «запуском нескольких экземпляров java jetty с одним и тем же портом. (80)http://wiki.eclipse.org/Jetty/Howto/Configure_Virtual_Hosts#Configuring_Virtual_Hosts, но, похоже, не может получить это правильно программно.


person Pepster K.    schedule 11.09.2014    source источник


Ответы (1)


Прежде всего, как и в конфигурации на основе xml, свойство virtualHost находится в пределах org.eclipse.jetty.server.handler.ContextHandler.setVirtualHosts(String[] vhosts). Итак, мой гость заключается в том, что простой способ:

ContextHandler fooContextHandler = new ContextHandler("/");
fooContextHandler.setVirtualHosts(new String[]{"foo"});
fooContextHandler.setHandler(new FooBarHandler());

ContextHandler bazContextHandler = new ContextHandler("/");
bazContextHandler.setVirtualHosts(new String[]{"baz"});
bazContextHandler.setHandler(new BazBarHandler());

HandlerCollection handler = new HandlerCollection();
handler.addHandler(fooContextHandler);
handler.addHandler(bazContextHandler);

server.setHandler(handler);
person bleidi    schedule 31.03.2015