【发布时间】:2013-12-10 09:40:27
【问题描述】:
我应该使用一个 Server 对象,并且需要打开多个端口和多个应用程序(WAR 文件)。 例如,一个服务器对象, 8080加法.war 8081 subraction.war 等等
我正在使用 Jetty 服务器 9.1.0 我该怎么做?
【问题讨论】:
我应该使用一个 Server 对象,并且需要打开多个端口和多个应用程序(WAR 文件)。 例如,一个服务器对象, 8080加法.war 8081 subraction.war 等等
我正在使用 Jetty 服务器 9.1.0 我该怎么做?
【问题讨论】:
要做到这一点,您需要:
ServerConnector 都应该有一个通过ServerConnector.setName(String) 声明的唯一名称
WebAppContext 时,声明一组采用命名虚拟主机语法"@{name}" 的虚拟主机,其中{name} 与您为连接器选择的相同。 (注意:没有“@”符号的虚拟主机是基于主机名的传统虚拟主机)
像这样...
package jetty.demo;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.handler.HandlerCollection;
import org.eclipse.jetty.webapp.WebAppContext;
public class ConnectorSpecificContexts
{
public static void main(String[] args)
{
Server server = new Server();
ServerConnector connectorA = new ServerConnector(server);
connectorA.setPort(8080);
connectorA.setName("connA"); // connector name A
ServerConnector connectorB = new ServerConnector(server);
connectorB.setPort(9090);
connectorB.setName("connB"); // connector name B
server.addConnector(connectorA);
server.addConnector(connectorB);
// Basic handler collection
HandlerCollection contexts = new HandlerCollection();
server.setHandler(contexts);
// WebApp A
WebAppContext appA = new WebAppContext();
appA.setContextPath("/a");
appA.setWar("./webapps/webapp-a.war");
appA.setVirtualHosts(new String[]{"@connA"}); // connector name A
contexts.addHandler(appA);
// WebApp B
WebAppContext appB = new WebAppContext();
appB.setContextPath("/b");
appB.setWar("./webapps/webapp-b.war");
appB.setVirtualHosts(new String[]{"@connB"}); // connector name B
contexts.addHandler(appB);
try
{
server.start(); // start server thread
server.join(); // wait for server thread to end
}
catch (Throwable t)
{
t.printStackTrace(System.err);
}
}
}
【讨论】: