首页 > 解决方案 > Tomcat 与主机、上下文和 webapp 双实例有关的问题

问题描述

/ ...解释太长且不清楚... /

换句话说,我搜索正确的方式以仅使用(一个或多个)域名(然后是 www.my_domain.it 而不是 www.my_domain.it/appname)访问站点,并且所有这些都必须指向同一个实例webapp 的(以便从您访问的任何域名,始终显示相同的运行时数据)。

所以,是的,我已经在 tomcat/webapps 文件夹中部署了 WAR 文件,现在,正确编辑 conf/server.xml 以获得上述结果,对应于以下之一?

1.

<Host name="my_domain.eu" appBase="webapps" unpackWARs="true" autoDeploy="true">
            <Alias>www.my_domain.eu</Alias>
            <Alias>www.my_domain.it</Alias>
            <Alias>www.my_domain_2.it</Alias>
            <Context path="" docBase="appname" debug="0" privileged="true" />
            ...
    </Host>

2.

<Host name="my_domain.eu" appBase="webapps/appname" unpackWARs="true" autoDeploy="true">
                <Alias>www.my_domain.eu</Alias>
                <Alias>www.my_domain.it</Alias>
                <Alias>www.my_domain_2.it</Alias>
                <Context path="" docBase="appname" debug="0" privileged="true" />
                ...
        </Host>

3.

<Host name="my_domain.eu" appBase="webapps/appname" unpackWARs="true" autoDeploy="true">
                <Alias>www.my_domain.eu</Alias>
                <Alias>www.my_domain.it</Alias>
                <Alias>www.my_domain_2.it</Alias>
                <Context path="/appname" docBase="appname" debug="0" privileged="true" />
                ...
        </Host>

4.

<Host name="my_domain.eu" appBase="webapps/appname" unpackWARs="true" autoDeploy="true">
                    <Alias>www.my_domain.eu</Alias>
                    <Alias>www.my_domain.it</Alias>
                    <Alias>www.my_domain_2.it</Alias>
 <!-- without context definition -->
                    ...
            </Host>

否则,正确的解决方案是什么?谢谢大家!

标签: javatomcataliasserver.xml

解决方案


我假设您在webapps目录中有您的应用程序的一个实例,它会自动部署在其名称下。使用 Context 元素,您可以从文件系统中的任何位置部署应用程序。

但是,最好不要使用此信息编辑 server.xml,而是在 conf/hostname 中创建单独的 context.xml 文件,或者只是部署到主机的 webapps 目录。如果您想更改任何内容,您在 server.xml 中配置的任何内容都需要重新启动服务器。server.xml 之外的配置可以在运行时获取,无需重新启动。

编辑:可能我之前回答的内容并不清楚:

当您使用 Context 元素进行配置时:我建议不要使用 webapps 目录来部署您的 webapps。只需指向您实际部署 webapp 的目录。这将确保没有上下文从webapps/appnameas部署您的应用程序/appname,即使您的上下文定义指向/.

另一种方法是使用 webapps 中的名称部署您的应用程序ROOT- 这是实际部署此 webapp 的快捷方式/(注意:如果我没记错的话,即使在 Windows 上,目录名或文件名(ROOT.war)的全部大写也是如此)。但是恕我直言,如果您决定使用上下文定义来确定路径(但部署在appbasewebapps)之外,或者部署在appbase(例如webapps)部署中,那么会更清楚。

使用 appbase 进行模拟以指向 webapps 中的某个目录将确保您激怒那些期望webapps目录中的应用程序将部署到 Tomcat 的任何人。这是一种将大量时间用于调试幻象问题的简单方法——不要那样做。


推荐阅读