2014-09-11 7 views
3

У меня есть следующий простой встроенный Jetty 9 сервер:jetty: как программно настроить несколько виртуальных хостов?

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
  • Все эти конфигурации должен быть программно, а не файлы конфигурации.

Я знаком с «running multiple java jetty instances with same port (80)» и http://wiki.eclipse.org/Jetty/Howto/Configure_Virtual_Hosts#Configuring_Virtual_Hosts , но не могу показаться, чтобы получить это право программно.

ответ

2

Прежде всего, как и в конфигурации на основе 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); 
Смежные вопросы