我们可以在tomcat的server.xml文件中包含文件来配置虚拟主机吗

Geo*_*mas 3 virtualhost server.xml tomcat8

我的 tomcat 中有该文件的以下部分 server.xml

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
       prefix="localhost_access_log" suffix=".txt"
       pattern="%h %l %u %t &quot;%r&quot; %s %b" />

</Host>

<Host name="mydomain1"  appBase="d1"
    unpackWARs="true" autoDeploy="true">
    <Alias>xyz-mydomain1.com</Alias>
    <Alias>abc.mydomain1.com</Alias>


<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
       prefix="d1_access_log" suffix=".txt"
       pattern="%h %l %u %t &quot;%r&quot; %s %b" />

</Host>

<Host name="mydomain2"  appBase="d2"
    unpackWARs="true" autoDeploy="true">


<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
       prefix="d2_access_log" suffix=".txt"
       pattern="%h %l %u %t &quot;%r&quot; %s %b" />

</Host>
Run Code Online (Sandbox Code Playgroud)

有什么方法可以通过使用一些 xml 文件的 include 选项来包含额外的主机条目,这些文件可以放置在我的 tomcat 的 conf 文件夹中。

avg*_*Joe 7

我不确定这是否是您正在寻找的内容,但您可以通过 XML 实体包含将文件包含在 tomcat XML 中。但您必须确保它们位于用户具有读取访问权限的位置。(您不能包含用户没有读取权限的文件。

\n
\n

这里\xe2\x80\x99s 介绍了如何在 Tomcat\xe2\x80\x99s server.xml 中包含文件。编辑\nserver.xml,并在文件的最顶部、任何 <?xml>\n声明行(\xe2\x80\x99s 可选)之后,放置以下 DOCTYPE\n声明来定义文件实体:

\n
\n
    <?xml version=\'1.0\' encoding=\'utf-8\'?>\n    <!DOCTYPE server-xml [\n      <!ENTITY connector1-config SYSTEM "connector1-config.xml">\n    ]>\n
Run Code Online (Sandbox Code Playgroud)\n
\n

这个标记意味着这个文档\xe2\x80\x99s的名称是\xe2\x80\x9cserver-xml\xe2\x80\x9d,并且我们\xe2\x80\x99re\n定义了一个名为\xe2\x80\x9cconnector1-的新实体XML 解析器可以在名为 \xe2\x80\x9cconnector1-config.xml\xe2\x80\x9d 的文件中找到 config\xe2\x80\x9d。您可以为您的实体命名任何您想要的名称,只要解析器接受您使用的字符即可。我建议只使用字母数字字符和\ndash,以保持简单。事实证明,如果您不指定文件的绝对路径,解析器将在包含该文件的目录中查找该文件,因此解析器将在 Tomcat 中查找xe2\x80\x99s conf/ 目录。

\n

但是,我们还没有使用我们在 server.xml 顶部定义的连接器 XML 实体。在文件中我们希望解析器插入连接器\xe2\x80\x99s XML 的位置,我们只需要这样写\n\xe2\x80\x9c@connector1-config;\xe2\x80\x9d :

\n
\n
<Server ...>\n    <Service ...>\n \n        <!-- See conf/connector1-config.xml for this <a href="https://www.mulesoft.com/exchange#!/?types=connector" target="_blank" rel="" title="Cloud Connectors" >connector\'s</a> config. -->\n        &connector1-config;\n \n    </Service>\n</Server>\n
Run Code Online (Sandbox Code Playgroud)\n
\n

然后,在连接器1-config.xml 文件中放入以下 ​​XML\nsnippet:

\n
\n
    <!-- Define a non-SSL Coyote HTTP/1.1 <a href="https://www.mulesoft.com/exchange#!/?types=connector" target="_blank" rel="" title="Cloud Connectors" >Connector</a> on port 8089 -->\n    <Connector port="8089" protocol="HTTP/1.1"\n               connectionTimeout="20000"\n               redirectPort="8443" />\n
Run Code Online (Sandbox Code Playgroud)\n
\n

使用此包含机制,您可以包含与 Tomcat\xe2\x80\x99s server.xml 文件位于\n同一目录中的任何文件。

\n

相反,如果您想要在另一个目录中包含文件,而您的 Tomcat JVM 用户对该文件具有读取权限,则可以在定义实体时指定绝对路径,如下所示:

\n
\n
<?xml version=\'1.0\' encoding=\'utf-8\'?>\n<!DOCTYPE server-xml [\n  <!ENTITY connector1-config SYSTEM "file:///opt/myproject/connector1-config.xml">\n]>\n
Run Code Online (Sandbox Code Playgroud)\n
\n

您可以以相同的方式使用此实体,只需将\n\xe2\x80\x9c&connector1-config;\xe2\x80\x9d 放置在您想要包含 XML 片段的位置即可。

\n
\n

要包含多个文件,请尝试以下操作:

\n
    <?xml version=\'1.0\' encoding=\'utf-8\'?>\n    <!DOCTYPE server-xml [\n        <!ENTITY file1 SYSTEM "file1.xml">\n        <!ENTITY file2 SYSTEM "file2.xml">\n    ]>\n
Run Code Online (Sandbox Code Playgroud)\n

然后在文件中您希望解析器插入相应文件代码的位置尝试以下操作:

\n
<Server ...>\n    <Service ...>\n \n        <!-- See conf/file1.xml for this -->\n        &file1;\n        <!-- See conf/file2.xml for this -->\n        &file2;\n \n    </Service>\n</Server>\n
Run Code Online (Sandbox Code Playgroud)\n

我的回答主要基于jasonb的这篇文章请访问 jasonb 的博客并支持他的工作。我在这里引用了他的帖子,因此即使博客被删除,社区也可以访问它。

\n