【问题标题】:How to define context path of application in Tomcat 6?如何在 Tomcat 6 中定义应用程序的上下文路径?
【发布时间】:2012-04-20 01:14:38
【问题描述】:

应用程序部署在 Tomcat6 上的上下文路径“/environame/appname”上。

<Context
...
        path="/environame/appname"
...
</Context>

但我无法使用以下 URL 访问我的应用程序:

http://localhost:8080/environame/appname

我必须在“environame”和“appname”之间使用下划线而不是斜线。

http://localhost:8080/environame_appname

Tomcat 5 的工作方式不同。
如果是 Tomcat 5,则 URL 中不会有下划线:

http://localhost:8080/environame/appname

我应该更改我的应用程序或 Tomcat 6 的配置以在“环境名称”和“应用程序名称”之间使用斜线而不是下划线来访问我的应用程序?

更新:

path 此 Web 应用程序的上下文路径,与每个请求 URI 的开头匹配以选择合适的 用于处理的 Web 应用程序。一个内的所有上下文路径 特定的主机必须是唯一的。如果您指定一个上下文路径 空字符串 (""),您正在定义默认的 Web 应用程序 此主机,它将处理所有未分配给其他主机的请求 上下文。

除非静态设置,否则不得设置此字段的值 在 server.xml 中定义一个上下文,因为它将从 用于 .xml 上下文文件或 docBase 的文件名。

http://tomcat.apache.org/tomcat-5.5-doc/config/context.html

我们将上下文 xml 文件存储到 $CATALINA_HOME/conf/Catalina/localhost/environame_appname.xml 文件中。 Tomcat 5.0.28 使用 Context 元素的路径属性。
Tomcat 6 使用上下文 xml 文件的名称。
是否可以更改配置以使用路径属性而不是 xontext xml 文件的名称?

回答:
有个bugbug#46713

如果在上下文 xml 中的上下文标记内设置了路径属性,则它 被忽略。相反,路径设置为 "/" + 。虽然带有“/”的路径也可以 通过将 '/' 替换为 '#' 在文件名中进行编码 令人困惑的是,现有的路径属性被简单地忽略了。

所以,我只需要将我的上下文 xml 文件重命名为 environame#appname.xml。

【问题讨论】:

  • 与其在您的问题中发布解决方案,不如发布并接受您自己的答案。

标签: tomcat tomcat6


【解决方案1】:

很久以前(我认为是 tomcat 4)可以部署一个名为 environame_appname.war 的战争存档,并且 tomcat 通过 url environame/appname/... 我不确定这是否仍然工作(并且还没有时间测试它)。 Tomcat 用斜线和下划线做了一些替换。

实现目标的另一种方法是使用 apache 和 mod_proxy、mod_proxy_ajp(或 mod_proxy_html)和 mod_rewrite。然后您可以在 tomcat 中定义两个应用程序(app01 和 app02),定义将请求转发到 /app01(resp /app02)到您的 tomcat 的代理规则和将请求重写到 /env01/app 到 /app01 和 /env02 的重写规则/app02 到 /app02。

【讨论】:

  • 我发现 Tomcat 6 使用上下文 xml 文件的文件名而不是 Context 元素的路径属性值。我们将 Context 的配置存储到 environame_appname.xml 文件中。
  • 太棒了。所以它仍然有效。它与从上下文定义文件名或战争文件名定义应用程序名称/路径的机制相同。
猜你喜欢
  • 1970-01-01
  • 2021-06-30
  • 2016-01-07
  • 2013-02-22
  • 2011-11-08
  • 1970-01-01
  • 2013-07-16
  • 2012-10-01
相关资源
最近更新 更多