发布
社区首页 >问答首页 >将web应用程序部署到已启动的jetty

将web应用程序部署到已启动的jetty
EN

Stack Overflow用户
提问于 2018-06-28 11:34:12
回答 1查看 219关注 0票数 1

如果我使用java -jar从外部jar启动jetty服务器,那么如何将另一个java web应用程序添加到已经启动的特定端口?例如,下面的代码:

代码语言:javascript
代码运行次数:0
复制
public class Main {
    private static Logger logger = Logger.getLogger(Main.class);

    public static void main(String[] args) throws Exception {
        ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
        context.setContextPath("/");

        Server jettyServer = new Server(5701);
        jettyServer.setHandler(context);

        ServletHolder jerseyServlet = context.addServlet(
                org.glassfish.jersey.servlet.ServletContainer.class, "/*");
        jerseyServlet.setInitOrder(0);

        jerseyServlet.setInitParameter(
                "jersey.config.server.provider.classnames",
                Calculator.class.getCanonicalName());

        try {
            jettyServer.start();
            jettyServer.join();
          } catch (Exception e){
                        logger.error("error during server starting",e);
              jettyServer.stop();
              jettyServer.destroy();
          }

    }
}

如果我使用try/catch out,应用程序会被添加到已经存在的5701 jetty服务器上吗?

EN

回答 1

Stack Overflow用户

发布于 2018-06-28 20:20:37

您的代码在端口5701上启动自己的Jetty服务器,该代码不会添加到不同的Jetty服务器。

假设您已经在端口5701上启动了ServerFoo,并在它自己的JVM中运行。

现在,您有了另一个要添加到该ServerFoo实例的now应用程序。

您将启动一个新的JVM,让我们称其为DeployerBar,以控制/操作ServerFoo实例。

为此,您需要与该ServerFoo实例通信,并首先为其提供启动WebApp本身所需的一切(所有类、配置等)。

然后,ServerFoo将需要一个自定义的ClassLoader来加载这些刚刚收到的新类和配置,从而使它能够启动这个新的webapp。

如果这就是你想要做的,考虑改为修改ServerFoo,使用Jetty DeploymentManager来监控一个常见的webapps目录。

然后,您的部署过程就是将所有的文件(classes/jars/libs/configuration)放到这个公共的webapps目录中,以便ServerFoo DeploymentManager能够拾取并开始使用。

有关其工作原理的示例,请参阅LikeJettyXml.java

代码语言:javascript
代码运行次数:0
复制
    DeploymentManager deployer = new DeploymentManager();
    DebugListener debug = new DebugListener(System.err,true,true,true);
    server.addBean(debug);        
    deployer.addLifeCycleBinding(new DebugListenerBinding(debug));
    deployer.setContexts(contexts);
    deployer.setContextAttribute(
            "org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",
            ".*/[^/]*servlet-api-[^/]*\\.jar$|.*/javax.servlet.jsp.jstl-.*\\.jar$|.*/[^/]*taglibs.*\\.jar$");

    WebAppProvider webapp_provider = new WebAppProvider();
    webapp_provider.setMonitoredDirName(jetty_base + "/webapps");
    webapp_provider.setDefaultsDescriptor(jetty_home + "/etc/webdefault.xml");
    webapp_provider.setScanInterval(1);
    webapp_provider.setExtractWars(true);
    webapp_provider.setConfigurationManager(new PropertiesConfigurationManager());

    deployer.addAppProvider(webapp_provider);
    server.addBean(deployer);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51074321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档