我应该使用一个Server对象,并且需要打开多个端口和多个应用程序(WAR文件)。 例如,一个服务器对象, 8080另外.war 8081 subraction.war 等
我正在使用Jetty服务器9.1.0 我怎么能这样做?
答案 0 :(得分:4)
要完成此任务,您需要:
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);
}
}
}