1

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

<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 文件的名称?

回答:
有一个 bug错误 #46713

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

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

4

1 回答 1

0

很久以前(我认为是 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。

于 2012-04-06T13:08:53.167 回答