jetty:如何以编程方式配置多个虚拟主机?
Posted
技术标签:
【中文标题】jetty:如何以编程方式配置多个虚拟主机?【英文标题】:jetty: how to programmatically configure multiple virtual hosts? 【发布时间】:2014-11-05 23:29:59 【问题描述】:我有以下简单的嵌入式 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 所有这些配置都需要以编程方式进行,而不是配置文件。我熟悉 “running multiple java jetty instances with same port (80)”和http://wiki.eclipse.org/Jetty/Howto/Configure_Virtual_Hosts#Configuring_Virtual_Hosts 但似乎无法以编程方式正确处理。
【问题讨论】:
【参考方案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);
【讨论】:
以上是关于jetty:如何以编程方式配置多个虚拟主机?的主要内容,如果未能解决你的问题,请参考以下文章