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:如何以编程方式配置多个虚拟主机?的主要内容,如果未能解决你的问题,请参考以下文章

一个jetty部署多个项目配置之方法

Jetty配置虚拟目录,实现把web项目发布到自定义目录,指定指定上下文访问;jetty编码修改

Tomcat:以编程方式更改虚拟主机?

如何让虚拟主机接受多个域? [关闭]

centos系统怎么进入主界面

配置nginx虚拟主机别名及别名企业场景应用说明