Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 两个上下文一个服务器jetty_Java_Jetty - Fatal编程技术网

Java 两个上下文一个服务器jetty

Java 两个上下文一个服务器jetty,java,jetty,Java,Jetty,我有两台jetty嵌入式服务器, localhost:9001/WebApp1和localhost:9002/WebApp2, 正如你所看到的,它们在不同的端口上。 我希望它们在创建服务器时共享同一端口 可能吗?(顺便说一句,它们也是两个独立的jar文件)。 那么我能做点像这样的事吗 localhost:9001/WebApp1和localhost:9001/WebApp2 还是我一直在制作战争文件,然后才拥有它们 由tomcat/glassfish服务器包含 在创建服务器的过程中,我通常会看到

我有两台jetty嵌入式服务器, localhost:9001/WebApp1和localhost:9002/WebApp2, 正如你所看到的,它们在不同的端口上。 我希望它们在创建服务器时共享同一端口 可能吗?(顺便说一句,它们也是两个独立的jar文件)。 那么我能做点像这样的事吗 localhost:9001/WebApp1和localhost:9001/WebApp2

还是我一直在制作战争文件,然后才拥有它们 由tomcat/glassfish服务器包含

在创建服务器的过程中,我通常会看到这样的情况

ContextHandler context = new ContextHandler();
context.setContextPath("/WebApp1");
context.setHandler(new WebApp1());
Server server = new Server(9001);
server.setHandler(context);
server.start();            
server.join();
在第二个应用程序中,我希望有这样的东西

ContextHandler context = new ContextHandler();
context.setContextPath("/WebApp2");
context.setHandler(new WebApp2());
Server server = getExistingServer(9001);
server.addHandler(context);

我看到有这样的方法server.getHandlers();它返回一个处理程序数组如何将新处理程序添加到现有列表中,或如何使现有jetty服务器在端口9001处运行jetty是一个标准的servlet容器,当然可以处理不同的上下文。 见码头文件第24章的章节

以下是(Jetty文档的一部分):


两个单独运行的应用程序不能共享一个端口。但是,您也可以在Jetty中部署war,但这意味着放弃嵌入式模型。正确的做法似乎是使用war文件。否?,如果我使用war正确地部署了war,我将使用servlet而不是服务器实例,并手动添加处理程序,对吗?我是一个java EE noob,由于嵌入式模式,我更喜欢jetty,但我也希望看到我的程序在线运行,可能是使用tomcat/glassfish服务器,如果你想针对的不仅仅是jetty,使用标准的WAR部署模型是一种方法。此示例代码使用一个.jar文件,但我的有两个单独的.jar文件,我希望同时运行,当我运行第二个时,我不能再使用同一个端口了,这给了我一个java.net.BindException:Address ready in use:bind您的应用程序有一个主类,您可以在其中启动一个嵌入式Jetty。但是你可以有几个上下文。只要类路径中有对应的类,那么对应的类在哪个JAR文件中并不重要。因此,您有一个进程运行一个Jetty和两个JAR。我最终使用了.war文件,这个特定的答案起到了作用,但我担心我们的服务器人员不会允许我运行Jetty server的实例,因为他们只想看到tomcat在那里运行,无论如何,感谢您的回答
public class ManyContexts
{
  public static void main( String[] args ) throws Exception
  {
    Server server = new Server(8080);

    ContextHandler context = new ContextHandler("/");
    context.setContextPath("/");
    context.setHandler(new HelloHandler("Root Hello"));

    ContextHandler contextFR = new ContextHandler("/fr");
    contextFR.setHandler(new HelloHandler("Bonjoir"));

    ContextHandler contextIT = new ContextHandler("/it");
    contextIT.setHandler(new HelloHandler("Bongiorno"));

    ContextHandler contextV = new ContextHandler("/");
    contextV.setVirtualHosts(new String[] { "127.0.0.2" });
    contextV.setHandler(new HelloHandler("Virtual Hello"));

    ContextHandlerCollection contexts = new ContextHandlerCollection();
    contexts.setHandlers(new Handler[] { context, contextFR, contextIT, contextV });

    server.setHandler(contexts);

    server.start();
    server.join();
  }
}