通过 C++ 启动 Tomcat 8.5 本地主机?最佳做法是什么?

Starting a Tomcat 8.5 localhost through C++? What is the best practice?

我正在尝试创建一个小型 C++ Visual Studio Forms(通过 CPPCLR_WinformsProjekt)应用程序,它本质上是一个浏览器,但它也启动了一个本地 Tomcat 8.5 服务器 WAR 文件在其 web 应用程序文件夹中,并将您重定向到本地主机页面。我正在研究 Windows。

我的问题恰恰是 - 通过 C++ 库启动 Tomcat 服务器的最佳方法是什么?

编辑:我开始解决这个问题的方法是将 tomcat 文件夹和 WAR 文件压缩到 Visual Studio 项目中。执行时,文件被解压缩,我正在考虑 system(*start tomcat command*).

注意:我知道我可以通过 cmd 启动 Tomcat,但我需要通过 C++ 让它工作。

[我假设您在 Windows 下,但在 Unix-es 上可以使用类似的方法。]

在 C++ 程序中,您可以执行 shell 可以执行的所有命令,因此启动 Tomcat 的最简单方法是使用 CreateProcess to execute catalina.bat(或 startup.bat ).这也是最容易配置的方式:用户可以根据需要调整 setenv.bat

当然,如果您想省略 *.bat 个文件,您可以:

  • 要么使用 java.exe 和适当的参数实例化一个 JVM:您至少需要 bin/bootstrap.jar 在系统 class 路径中(通常是 bin/tomcat-juli.jar)并调用org.apache.catalina.startup.Bootstrap 的主要方法,参数为 start.
  • 或使用 jvm.dll 通过 Invocation API in a similar way as it is done by procrun.
  • 实例化 JVM

我认为这些方法与 *.bat 脚本相比没有任何优势。要停止现代 Tomcat 只需发送终止信号。

编辑: 如果您打算只启动一个特定的 Web 应用程序,那么成熟的 Tomcat 可能有点矫枉过正。你可以改为:

  • 要么使用 Tomcat Embedded,这归结为在 class 上写入并调用其 main 方法而不是 Boostrap#start。好处是,你只需要分发一堆jar文件和你的WAR,而不需要传统的Tomcat安装目录结构,
  • 或用户使用 Spring Boot.