2010-01-06 151 views
0

我在Netbeans中创建了一个Web应用程序,它将应用程序打包到名为“aa-bb.war”的文件中。当我在netbeans中运行这个项目时,我可以在“localhost:8080/aa/bb”上访问它。这很好。Tomcat和上下文路径

虽然将.war文件移动到标准的tomcat安装中,但却给我带来了问题。当我将.war放入“webapp”目录时,它会被分解为“webapp/aa-bb”,但我真正想要的是“webapp/aa/bb”(注意两者之间的“ - ”和“/” “aa”和“bb”)...所以bb应该放在“aa”的子目录中。

我的理解是因为tomcat使用.war的文件名来创建分解的目录,所以因为战争被称为“aa-bb”,所以显然使用了连字符。我的“context.xml”文件确实有正确的路径“aa/bb”,但我读过Tomcat 5+将忽略.war中指定的上下文路径,并根据文件名创建路径。

我该如何强制tomcat使用子目录(它可能看起来像一个小的差异在所产生的网址(“aa-bb”vs“aa/bb”),但它实际上是一个大问题,原因是我现在不会进入(只是使事情变得复杂)

回答

0

tomcat的标准部署结构是所有的应用程序都在第一级别的层次结构中,任何你放在应用程序文件夹中的context.war文件最终都可以通过http://host/context。我很确定你不能强制你提到的子目录aa/bb,但是你可以通过下面的方法欺骗实现:(1)使应用程序aa.war,(2)在你的应用程序中创建一个名为bb的目录,拥有你所有的jsps,(3)如果你有servlet或过滤器,那么也改变映射o f那些到bb/servlet。

+0

这很有趣,从来没有尝试过......我使用netbeans进行打包,但是你有任何想法如何让netbeans/ant将所有内容都转储到子目录“bb”中? – user85116 2010-01-07 15:42:09

0

你有什么选择?我不知道Tomcat最近无视path=""。在前面

  1. 认沽Apache和使用mod_redirectmod_proxy漏斗为AA/BB请求在Apache以AA-BB在Tomcat中。

  2. 使用UrlRewriteFilter是web应用程序,取决于您使用的任何web框架(如果有?)。调用你的Web应用程序aa.war,然后告诉UrlRewriteFilter将应用程序中的/ bb /的请求发送到/。