java - Apache Tomcat 是否意味着每个托管应用程序安装一次?

标签 java tomcat

我试图了解 Apache Tomcat 遵循的模型,但文档显然对我没有意义。

据我了解,Tomcat 是一个用于托管各种服务的服务器 - 所以它非常通用。我有这个应用程序,我试图了解如何托管,它的主要部署方法似乎是作为 Tomcat 托管的 Web 服务——该应用程序称为 Camunda(在 github 上)。在浏览了 Camunda 的文档之后,我的 Tomcat 目录完全充满了与 Camunda 相关的 jar 和配置文件等。文档说只需将所有内容直接放入 Tomcat lib 文件夹、conf 文件夹等。

我对其他“平台”/“服务”类型主机应用程序的大部分体验是,应用程序本身(在本例中为 Tomcat)在其自己的目录中保持完好无损。通过配置文件等,它知道如何托管它需要托管的任何内容。

在 Tomcat 的情况下,似乎习惯上基本上用一堆用于托管内容的库“污染”Tomcat 目录?

这就是为什么我将标题命名为“Tomcat 意味着每个应用程序安装一个”,因为无论出于何种意图和目的,一旦您在 Tomcat 中托管某些内容,该目录就会与该目录如此耦合,以至于 Tomcat 目录就是该目录。

这正常吗?只是想用文档中的其他术语寻找一些澄清,因为文档对我来说似乎不是很清楚。

这是我正在关注并引用的安装过程的链接:https://docs.camunda.org/manual/latest/installation/full/tomcat/manual/

最佳答案

自从我使用 Tomcat 以来已经有一段时间了,但它不仅不是每个应用程序安装一个,甚至不是每个虚拟主机安装一个。

Tomcat(除其他外)是一个servlet 容器。 Servlet 的目录布局等已在 Java Servlet Specification v2.2 中标准化。您可以下载最新的 servlet 规范 here

The docs say to just plop everything right into the Tomcat lib folder, conf folders, etc.

希望他们谈论的是 .war 文件或类似文件中的那些,或者共享位置中的共享库。您可以将共享库放在可以跨应用程序(甚至虚拟主机)重复使用的位置,这在磁盘空间更昂贵的时候可能很有用,但现在我假设大多数人将应用程序的库放在 /WEB-INF/lib应用程序的 .war 文件中的目录。

This page 讨论了 .war 文件的“目录”布局(基本上是具有特定结构的 .jar)。

的确,通常 .war 文件会扩展到 Tomcat 安装目录的子目录中,但正如 the answer 中所指出的那样,Dan_Maff 在评论中链接到,您可以修改 server.xml 文件,让它在其他地方查找。

您可以安装一个名为 Manager 的网络应用程序,它通过 .war 文件帮助安装、激活、停用和管理网络应用程序。 (还有一个 Host Manager 用于管理虚拟主机。)

总而言之,如果您愿意,您当然可以为每个 Tomcat 安装一个应用程序。你需要在它前面有一个反向代理(Apache、Nginx 等),这样同一个端口(例如 80)可以用于各种应用程序的外部 URL,你需要分配每个 Tomcat 安装它自己的内部端口供反向代理与之交谈。

关于java - Apache Tomcat 是否意味着每个托管应用程序安装一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54839378/

相关文章:

java - Java 中的子线程是否会阻止父线程终止?

java - Java 如何只删除一个文件的内容?

java - 容器不能包含面板数组的非空值

java - 在 Tomcat 中加载 JNDI 资源时出现 ClassNotFoundException

javax.imageio.IIOException : I/O error writing PNG file 异常

jsp - 用tomcat保护jsp Action 页面

Java如何获取给定时区缩写的时区ID列表

Java - 显示问号而不是字符的错误消息

java - tomcat7不会在启动时运行

java - 使用 Tomcat 的 Eclipse 中的 HTTP 状态 404 错误