2

抱歉,如果不解释整个情况,我想不出一个更具描述性的标题。

我将 IIS7 与 Tomcat7 一起使用。我使用 GWT 创建了一个 Web 应用程序,将其打包成一个 war 文件并将其部署在 Tomcat 上。
输入我的网站 url,比如“www.myapp.com”,我会看到 Tomcat 默认页面。我怀疑这是因为 %TOMCAT_HOME%/webapps/ROOT 目录中的内容。我可以通过“www.myapp.com/myapp”访问我的网络应用程序,并且我期望的所有功能都在那里。

如何配置 Tomcat 以便可以通过“www.myapp.com”而不是“www.myapp.com/myapp”访问我的 webapp?

我尝试通过为我的 webapp 添加一个新的“主机”标签来在 %TOMCAT_HOME%/conf 中配置 server.xml:

        <Host name="myapp.com" debug="0" appBase="webapps/myapp" unpackWARs="true">
              <Alias>www.myapp.com</Alias>
              <Context path="" docBase="." debug="0" reloadable="true"/> 
        </Host>

从上面添加主机标签,输入“www.myapp.com”现在直接将我带到我的 Web 应用程序。问题是,当我在应用程序中调用 servlet(我正在使用 GWT RPC)时,我得到了错误:

com.google.gwt.user.client.rpc.StatusCodeException:404

服务器错误 404 - 找不到文件或目录。

您要查找的资源可能已被删除、名称已更改或暂时不可用。

我不知道为什么我会收到这个错误,之前在没有添加“主机”标签的情况下输入“www.myapp.com/myapp”时效果很好。

我是 Tomcat 的新手,不知道如何解决这个问题。任何帮助将不胜感激。谢谢

编辑:

a) server.xml 中的主机部分(我的默认主机为 www.myapp.com):

<Host name="localhost"  appBase="C:/Tomcat 7.0/webapps" unpackWARs="true" autoDeploy="true"></Host>


<Host name="www.myapp.com" appBase="C:/Tomcat 7.0/myapp" unpackWARs="true" autoDeploy="true">       </Host>

b)workers.properties(我尝试将此处的主机更改为 www.myapp.com 无济于事):

worker.list=worker1
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13

c) uriworkermap.properties:

/*=worker1
4

2 回答 2

3

你有两个选择。

  1. 将您的 WAR 重命名为 ROOT.war。

  2. 将您的 WAR 移到 Tomcat 的 appBase 之外,然后添加一个新文件 $CATALINA_BASE/Catalina/localhost/ROOT.xml,其中包含以下内容:

    <Context docBase="path/to/WAR" />

这假定您使用引擎和主机的默认名称。如果没有,请相应地调整路径。它是 $CATALINA_BASE/<engine_name>/<host_name>/ROOT.war

现在您正在使用带有选项 1 的多个主机,您需要执行以下操作,因为 appBase != docBase。如果尝试为它们使用相同的值,则会发生各种不好的事情。

有几种方法可以从现有的解决方案中找到可行的解决方案。我建议如下: 1. 创建一个名为 C:/Tomcat 7/webapps-myapp/ROOT 的目录 2. 将 C:/Tomcat 7/myapp 的内容复制到这个新目录 3. 删除 C:/Tomcat 7/myapp 4 . 将 MyApp 主机的 appBase 更改为“webapps-myapp”(或完整路径)

这会将 C:/Tomcat 7/myapp 中的应用程序部署为 myapp 虚拟主机中的 ROOT(默认)应用程序。这假设您已将 myapp 应用程序部署到 C:/Tomcat 7/myapp

于 2012-04-29T17:13:27.647 回答
-1

来自 Tomcat 7文档

http://tomcat.apache.org/tomcat-7.0-doc/config/host.html

如果您使用的是标准 Host 实现,则在首次启动 Catalina 时,如果 deployOnStartup 属性设置为 true(这是默认值),则会自动执行以下操作:

Any XML file in the Host's xmlBase directory (by default $CATALINA_BASE/conf/[engine_name]/[host_name]) is assumed to be a

上下文 XML 描述符,包含单个 Web 应用程序的上下文元素(及其关联的子元素)。将首先部署与这些上下文 XML 描述符文件中的每一个关联的 Web 应用程序。

The docBase attribute of this <Context> element must only be set if the docBase is outside the Host's appBase. For web applications

位于主机的 appBase 中,docBase 将是 XML 文件的名称,其中“.xml”替换为“.war”(用于 Web 应用程序存档)或 XML 文件的名称(删除“.xml”)用于目录。

The path attribute must not be set. The context path used will be a slash character ("/") followed by the name of the XML file (less the

.xml 扩展名)。可以使用# 定义多级上下文路径,例如foo#bar.xml 用于/foo/bar 的上下文路径。可以使用名为 ROOT.xml 的文件来定义具有 / 上下文路径的默认 Web 应用程序。

Any web application archive file within the Host's appBase directory that has not already been deployed as a result of a context

XML 描述符,没有对应的同名目录(没有“.war”扩展名),并且没有被 deployIgnore 排除,接下来会部署。使用的上下文路径将是一个斜杠字符(“/”),后跟 Web 应用程序存档名称减去“.war”扩展名。此规则的一个例外是名为“ROOT.war”的 Web 应用程序存档将使用 / 的上下文路径进行部署。可以使用# 定义多级上下文,例如,使用名为foo#bar.war 的WAR 作为/foo/bar 的上下文路径。

If the unpackWARs attribute is true, the web application archive file will be expanded to a directory of the same name (without the

“.war”扩展名”。

Note: If you re-deploy an updated WAR file while Tomcat is stopped, be sure to delete the associated expanded directory before

重启Tomcat,这样当Tomcat重启时更新的WAR文件会重新展开。

If copyXML is true (it is false by default), any web application archive file within the Hosts's appBase directory that does not have a

将扫描主机的 xmlBase 中相应的上下文 XML 描述符(具有“.xml”扩展名而不是“.war”扩展名)以查看它是否包含上下文 XML 描述符(位于 /META-INF/context.xml)和如果找到一个,描述符将被复制到 xmlBase 目录并重命名。

Finally, any sub-directory within the Host's appBase that has not already been deployed as a result of a context XML descriptor and is

不被 deployIgnore 排除的将被部署。使用的上下文路径将是一个斜杠字符(“/”),后跟目录名称,除非目录名称是 ROOT,在这种情况下,上下文路径将为 /。可以使用# 定义多级上下文,例如使用名为foo#bar 的目录作为/foo/bar 的上下文路径。

If copyXML is true (it is false by default), any directory within the Hosts's appBase directory that does not have a corresponding

将扫描主机的 xmlBase 中的上下文 XML 描述符,以查看它是否包含上下文 XML 描述符(位于 /META-INF/context.xml),如果找到,该描述符将被复制到 xmlBase 目录并重命名。

这一切的要点:

a web application archive named "ROOT.war" will be deployed with a context path of /.
于 2012-04-29T16:36:39.520 回答