在Tomcat的文档中,关于定义上下文的部分列出了以下定义上下文的选项:
- 在/META-INF/context 的单个文件中.xml在应用程序文件内。
- 在
$CATALINA_BASE/conf/[enginename]/[hostname]/
目录中的单个文件(扩展名为".xml")中。上下文路径和版本将派生自文件的基本名称(文件名减去.xml扩展名)。此文件将始终优先于任何上下文.xml Web 应用程序的 META-INF 目录中打包的文件。 - 在主 conf/服务器.xml 的主机元素内。
选项 1不好,因为这意味着必须对应用程序工件中的值进行硬编码,并且不能轻易更改它们。
文档积极劝阻选项 3:
不建议将元素直接放置在服务器.xml文件中。
这只给我们留下了选项 2,特别是如果我们想使用不同的配置多次部署相同的应用程序(例如,一个用于生产,一个用于测试),这是唯一的选择。
但是,文档没有解释[enginename]
或[hostname]
应该是什么,或者它们默认是什么。
这些的默认值是什么,我可以在哪里更改它们?
TL;DR[enginename]
通常是Catalina
的,[hostname]
通常是localhost
的。
简单解释
在Tomcat 附带的默认配置中,引擎在$CATALINA_HOME/conf/server.xml
中配置,在该文件的末尾,您通常会看到如下所示的内容:
<Engine name="Catalina" defaultHost="localhost">
...
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
</Engine>
<Engine>
元素的name
属性是enginename
,<Host>
元素的name
属性是hostname
。
更长的解释
答案可以在两个地方找到,通过阅读 主机和 Tomcat 文档的引擎页面。
对于<Engine>
元素,有趣的值为:
默认主机:
默认主机名,标识将处理定向到此服务器上的主机名但未在此配置文件中配置的请求的主机。此名称必须与紧邻嵌套在内部的某个 Host 元素的名称属性匹配。
名字:
此引擎的逻辑名称,用于日志和错误消息。在同一服务器中使用多个服务元素时,必须为每个引擎分配一个唯一的名称。
对于<Host>
元素,它指出:
名字:
通常是此虚拟主机的网络名称,在域名服务服务器中注册。无论用于指定主机名的大小写如何,Tomcat 都会在内部将其转换为小写。嵌套在引擎中的主机之一的名称必须与该引擎的默认主机设置匹配。有关如何将多个网络名称分配给同一虚拟主机的信息,请参阅主机名别名。