我使用嵌入式jetty服务器来部署我的应用程序 . 我想使用相同的jetty实例在不同的连接器上部署2个不同的战争(一个在http上,另一个在https上) . 我的代码如下:

private static void startServer() throws Exception
{

    Server= new Server();
    ServerConnector https_connector = null;
    ServerConnector httpConnector = new ServerConnector(server); 
    httpConnector.setPort(18081);
    httpConnector.setName("Http_connector");

    httpConnector = new ServerConnector(server); 

    HttpConfiguration https = new HttpConfiguration(); 
    https.addCustomizer(new SecureRequestCustomizer()); 
    SslContextFactory sslContextFactory = new SslContextFactory(); 
 sslContextFactory.setKeyStorePath(serviceConfig.getSecurityCertificatePath());
    sslContextFactory.setKeyStorePassword(KEY_STORE_PD);
    sslContextFactory.setKeyManagerPassword(KEY_MANAGER_PD); 
    https_connector = new ServerConnector(server, new SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1.asString()), new HttpConnectionFactory(https));
        https_connector.setName("Https_connector");

    if(https_connector != null)
    {
        https_connector.setPort(18080); 
        server.setConnectors(new Connector[] {https_connector, httpConnector});
    }

    WebAppContext webapp = new WebAppContext();
    webapp.getInitParams().put("org.eclipse.jetty.servlet.Default.useFileMappedBuffer", "false");
    webapp.setContextPath("/hello1");
    File warFile = new File("../HelloWorld/webapps/hello1.war");
    webapp.setVirtualHosts(new String[]{"Https_connector"});
    if(!warFile.exists())
    {
        throw new IllegalArgumentException( "Unable to find WAR File: " + warFile.getAbsolutePath());
    }
    webapp.setWar(warFile.getAbsolutePath());

    Configuration.ClassList classlist = Configuration.ClassList.setServerDefault( server );
    classlist.addBefore("org.eclipse.jetty.webapp.JettyWebXmlConfiguration",
            "org.eclipse.jetty.annotations.AnnotationConfiguration" );

    webapp.setAttribute(
            "org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",
            ".*/[^/]*servlet-api-[^/]*\\.jar$|.*/javax.servlet.jsp.jstl-.*\\.jar$|.*/[^/]*taglibs.*\\.jar$" );

    webapp.setCopyWebDir(true);
    webapp.setCopyWebInf(true);
    webapp.setParentLoaderPriority(true);
    webapp.setPersistTempDirectory(false);

    HandlerCollection contexts = new ContextHandlerCollection();
    contexts.addHandler(webapp);

    ContextHandler contextHandler = new ContextHandler();
    contextHandler.setContextPath("/hello1resources");
    ResourceHandler resourceHandler= new ResourceHandler();
    File resourceBase = new File("../HelloWorld/webapps/hello1resources");
    if(!resourceBase.exists())
    {
        new File("../HelloWorld/webapps/hello1resources").mkdir();
    }
    resourceHandler.setResourceBase(resourceBase.getAbsolutePath());
    resourceHandler.setDirectoriesListed(false);
    contextHandler.setHandler(resourceHandler);
    contexts.addHandler(contextHandler);

    //************************************
    WebAppContext webapp1 = new WebAppContext();
    webapp1.getInitParams().put("org.eclipse.jetty.servlet.Default.useFileMappedBuffer", "false");
    webapp1.setContextPath("/hello2"");
    File warFile1 = new File("../HelloWorld/webapps/hello2.war");
    if(!warFile1.exists())
    {
        throw new IllegalArgumentException( "Unable to find WAR File: " + warFile1.getAbsolutePath());
    }
    webapp1.setWar(warFile1.getAbsolutePath());

    webapp1.setAttribute(
            "org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",
            ".*/[^/]*servlet-api-[^/]*\\.jar$|.*/javax.servlet.jsp.jstl-.*\\.jar$|.*/[^/]*taglibs.*\\.jar$" );

    webapp1.setVirtualHosts(new String[]{"Http_connector"});
    webapp1.setCopyWebDir(true);
    webapp1.setCopyWebInf(true);
    webapp1.setParentLoaderPriority(true);
    webapp1.setPersistTempDirectory(false);
    contexts.addHandler(webapp1);

    ServletContextHandler contextHandler1 = new ServletContextHandler();
    contextHandler1.setContextPath("/hello2resources");
    ResourceHandler resourceHandler1= new ResourceHandler();
    File resourceBase1 = new File("../HelloWorld/webapps/hello2resources");
    if(!resourceBase1.exists())
    {
        new File(serviceConfig.resourceBase1).mkdir();
    }
    resourceHandler1.setResourceBase(resourceBase1.getAbsolutePath());
    resourceHandler1.setDirectoriesListed(false);
    contextHandler1.setHandler(resourceHandler1);
    contexts.addHandler(contextHandler1);

    //*********************************
    contextHandler = new ContextHandler();
    contextHandler.setContextPath(serviceConfig.getServiceResourceContextPath());
    resourceHandler= new ResourceHandler();
    resourceBase = new File(serviceConfig.getServiceResourceBase());
    if(!resourceBase.exists())
    {
        new File(serviceConfig.getServiceResourceBase()).mkdir();
    }
    resourceHandler.setResourceBase(resourceBase.getAbsolutePath());
    resourceHandler.setDirectoriesListed(false);
    contextHandler.setHandler(resourceHandler);
    contexts.addHandler(contextHandler);

    server.setHandler(contexts); 
    LOGGER.info("just before starting server...");
    server.start();       
}

代码详细信息:我创建了2个连接器:http_connector和https_connector,并为应用程序webapp和webapp1创建了两个不同的webAppContext . 还为两个webAppContexts分配了虚拟主机 . 我将两个war文件保存在同一个webapps文件夹中 .

现在,当服务器启动时,我无法从浏览器连接到任何应用程序:Urls:Application1:https://localhost:18080/hello1/ Application1:http://localhost:18081/hello2

在这两种情况下,跟踪错误都是遗传的HTTP错误:404访问/ clearinsight时出现问题 . 原因:未找到

到目前为止尝试的解决方案不起作用:我为应用程序和单个服务器创建了两个单独的webAppContexts,并且只创建了一个http连接器 .

我不想为应用程序启动2个独立的jetty服务器实例 .

任何人都可以建议是否可以在嵌入模式下在一个jetty服务器实例中部署2个webAppContexts?

如果是,提供的代码有什么问题?

提前致谢 .