1

我在 Eclipse 中创建了一个简单的 servlet(作为动态 Web 项目)安装了 Azure SDK,然后我使用 GUI 将项目打包为 windows azure,

我希望将应用程序部署到根文件夹,

所以我可以像这样访问它:

mysite.com/servlet?....

不喜欢:

mysite.com/war_name/servlet?....

参考这个答案: 在Tomcat的根目录部署我的应用程序

我添加到我的 server.xml

 <Context docBase="war_name" path="" reloadable="true" />

也试过:

 <Context docBase="war_name" path="" reloadable="true" debug="0"><Context/>

我使用远程控制来验证 server.xml 是否包含此行(就在“主机”结束标记之前)

它确实,

但是我仍然无法按我的意愿访问我的应用程序。

我是 JAVA 新手,我使用的是 tomcat 7,这是我所做的截图:

在此处输入图像描述

4

2 回答 2

2

将 java webapp(例如:war)映射到根上下文路径的最简单方法是删除原始的 tomcat_home/webapps/ROOT 并将您的 war 文件重命名为ROOT.war(如果您以存档样式进行部署),或者将您的文件夹重命名为ROOT(如果您以爆炸式部署)。无需更改默认 server.xml

确保war文件放在tomcat_home/webapps

但是,如果您想保留您提到的战争文件名,请确保删除 tomcat_home/webapps/ROOT 文件夹以避免混淆

这个答案有更多关于映射tomcat根上下文路径的信息:https ://stackoverflow.com/a/5328636/179630

于 2013-09-11T03:51:40.133 回答
0

我将其添加为答案,因为它包含代码,但它主要是对 gerrytan 答案的扩展。

如果您使用的是 Azure Eclipse 插件,您可以在 Azure 部署项目中编辑 package.xml,以便 eclipse 自动构建您的 war 并将其重命名为 ROOT.war,然后再将其放入部署项目中。

在 package.xml 的末尾附近,您应该有这样的一行:

<component cloudmethod="copy" cloudsrc="auto" cloudupload="always" deploydir="%SERVER_APPS_LOCATION%" deploymethod="copy" importas="<my_app.war>" importmethod="auto" importsrc="<path to my_app project>" type="server.app"/>

(它应该在workerrole标签内)

在这一行中,将“”替换为“ROOT.war”,如下所示:

<component cloudmethod="copy" cloudsrc="auto" cloudupload="always" deploydir="%SERVER_APPS_LOCATION%" deploymethod="copy" importas="ROOT.war" importmethod="auto" importsrc="<path to my_app project>" type="server.app"/>

并从部署中删除旧的 my_app.war。下次部署时,您的应用程序将部署为 ROOT。正如gerrytan所说,请确保/webapps/ROOT事先删除tomcat中的文件夹。

编辑:

另一个警告 - 如果您的应用程序包含 .gitignore 文件(或类似的点文件/目录,如 .svn),请添加<defaultexcludes remove="**/.gitignore"/>到 windowsazurepackage taskdef 下的 package.xml。

如果没有这个,Azure 插件(使用 Ant)不会删除 Azure 部署之间的 .gitignore 文件。这意味着当删除其他所有内容时,webapp 文件夹中的应用程序文件夹仍然存在。重新部署 Azure 时,tomcat 不会重新部署应用程序,因为它看到应用程序的文件夹在那里。

于 2014-12-18T08:43:19.620 回答