如果我使用java -jar从外部jar启动码头服务器,然后如何将另一个Java Web应用程序添加到已经启动的特定端口?例如,此代码:
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();
}
}
}
如果我尝试/赶上,是否将应用程序添加到已经存在的5701码头服务器中?
最佳答案
您的代码在端口5701上启动了自己的Jetty服务器,该代码没有任何内容可添加到其他Jetty服务器。
假设您已经在端口5701上启动了ServerFoo并在其自己的JVM中运行。
现在,您有另一个要添加到该ServerFoo实例的Webapp。
您将启动一个新的JVM,将其称为DeployerBar,以控制/操纵ServerFoo实例。
为此,您需要与该ServerFoo实例进行通信,并为其提供启动WebApp本身所需的一切(所有类,配置等)。
然后ServerFoo将需要一个自定义的ClassLoader来加载刚刚接收的这些新类和配置,从而使其能够启动此新的Web应用程序。
如果这只是您要执行的操作,请考虑改为修改ServerFoo以使用Jetty DeploymentManager监视公用的webapps目录。
然后,您的部署过程就是将所有文件(类/ jars / libs / configuration)放入此公共webapps目录中,以便ServerFoo DeploymentManager可以选择并开始使用。
有关如何工作的示例,请参见LikeJettyXml.java
。
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);
关于java - 将Web应用程序部署到已经开始的 jetty ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51074321/