如何通过Java管理Tomcat

我正在寻找一种通过java以编程方式管理tomcat(在localhost上)的方法。 我想启动/停止tomcat并部署WAR。

任何帮助表示赞赏。

您可以在应用程序中运行嵌入Tomcat。

通过java启动/停止tomcat的方法是使用示例参数在bootstrap.jar(使用类Runtime)上调用execute:-Dcatalina.home = c:/ tomcat /

用于查看ant如何执行tomcat start stop的示例代码:

http://ptrthomas.wordpress.com/2006/03/25/how-to-start-and-stop-tomcat-from-ant

用于查看外部程序如何从java执行的示例代码: http : //www.linglom.com/2007/06/06/how-to-run-command-line-or-execute-external-application-from-java/

您可以使用java Runtime类来调用bat文件。 确保运行java进程的用户有权启动和停止tomcat。

try{ Runtime.getRuntime().exec("c:/program files/tomcat/bin/startup.bat"); } catch(IOException e) {System.out.println("exception");} 

您可以使用tomcat管理器 ,或查看其源代码以了解管理器如何处理部署操作。

要以编程方式管理tomcat,您可能需要查看JMX和bulcat-in MBeans的Tomcatfunction。

实质上,您可以编写自己的基于Java的JMX客户端通过RMI与MBean通信,或者您可以利用Manager App中的JMX Http Proxy并使用普通的旧http请求来编写和管理tomcat实例。

有关JMX和Tomcat 6的良好参考: http : //www.datadisk.co.uk/html_docs/java_app/tomcat6/tomcat6_jmx.htm

Manager App和JMX Http Proxy的一个很好的参考:http: //tomcat.apache.org/tomcat-6.0-doc/manager-howto.html#JMX_Set_command

您应该能够非常轻松地部署和取消部署WAR。

我不认为现有的MBean允许你关闭tomcat,但是自己实现一个并且调用System.exit()是相当容易的。

您可以重新启动单个Tomcat连接器,即端口重启,如运行应用程序的8843。 需要这种情况的一种情况是,您通过API获取签名证书,或者您正在修改信任库。

这是我添加/删除证书后用于重启tomcat连接器的完整代码/方法。

  public void refreshTrustStore() throws Exception { try { //following line need to be replaced based on where you get your port. It may be passed in as argument String httpsPort = configurationManager.getHttpsPort(); String objectString = "*:type=Connector,port=" + httpsPort + ",*"; final ObjectName objectNameQuery = new ObjectName(objectString); for (final MBeanServer server : MBeanServerFactory.findMBeanServer(null)) { if (server.queryNames(objectNameQuery, null).size() > 0) { MBeanServer mbeanServer = server; ObjectName objectName = (ObjectName) server.queryNames(objectNameQuery, null).toArray()[0]; mbeanServer.invoke(objectName, "stop", null, null); // Polling sleep to reduce delay to safe minimum. // Use currentTimeMillis() over nanoTime() to avoid issues // with migrating threads across sleep() calls. long start = System.currentTimeMillis(); // Maximum of 6 seconds, 3x time required on an idle system. long max_duration = 6000L; long duration = 0L; do { try { Thread.sleep(100); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } duration = (System.currentTimeMillis() - start); } while (duration < max_duration && server.queryNames(objectNameQuery, null).size() > 0); // Use below to get more accurate metrics. String message = "TrustStoreManager TrustStore Stop: took " + duration + "milliseconds"; logger.information(message); mbeanServer.invoke(objectName, "start", null, null); break; } } } catch (Exception exception) { //Log and throw exception throw exception } 

}