【问题标题】:jetty server 9.1 multiple embeded ports and application in same server instancejetty server 9.1 多个嵌入端口和应用程序在同一个服务器实例中
【发布时间】:2013-12-10 09:40:27
【问题描述】:

我应该使用一个 Server 对象,并且需要打开多个端口和多个应用程序(WAR 文件)。 例如,一个服务器对象, 8080加法.war 8081 subraction.war 等等

我正在使用 Jetty 服务器 9.1.0 我该怎么做?

【问题讨论】:

    标签: java jetty


    【解决方案1】:

    要做到这一点,您需要:

    1. 每个ServerConnector 都应该有一个通过ServerConnector.setName(String) 声明的唯一名称
    2. 定义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);
            }
        }
    }
    

    【讨论】:

    • 你太棒了。解决了我的问题。 :)
    • 我还有一个问题,我最多有 500 个应用程序,每个应用程序可能共享相同的端口或创建新端口,当我尝试使用 50 个应用程序时,它会显示异常,例如 ThreadPool 中的最大线程数不足:max=200
    • 我解决了上面的问题,但是遇到了新问题,java.lang.OutOfMemoryError: PermGen space for 38th war file,我应该怎么做才能解决这个问题?请帮帮我。
    • 单独提问。在 cmets 部分进行持续对话是不合适的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多