【发布时间】:2016-12-23 15:11:20
【问题描述】:
我想在 tomcat 服务器上部署 myapp。我知道一种方法是从 webapps 中删除 Root 文件夹并将我的 app.war 重命名为 ROOT.WAR。但我不想这样做。我想像当用户以 www.xxx.com 访问我的应用程序时那样进行部署,它应该像 www.xxx.com/login.html 一样转到我的应用程序。 请帮忙
【问题讨论】:
我想在 tomcat 服务器上部署 myapp。我知道一种方法是从 webapps 中删除 Root 文件夹并将我的 app.war 重命名为 ROOT.WAR。但我不想这样做。我想像当用户以 www.xxx.com 访问我的应用程序时那样进行部署,它应该像 www.xxx.com/login.html 一样转到我的应用程序。 请帮忙
【问题讨论】:
只要不与任何自动部署的应用程序冲突,您可以从(几乎)任何地方使用您想要的任何上下文名称部署任何 WAR 文件(或展开的 WAR 目录)。方法如下:
从webapps/ 中删除所有有冲突的应用程序(在这种情况下,实际上只是ROOT)
将您自己的应用程序移至webapps/以外的其他位置
从您的应用程序中复制META-INF/context.xml 文件并将其放入Tomcat 的conf/[engine]/[host]/[contextpath].xml - 例如conf/Catalina/localhost/ROOT.xml
编辑conf/[engine]/[host]/[contextpath].xml 并将此属性添加到<Context> 元素:
docBase="/path/to/your/WAR.war"
现在,Tomcat 将在上下文路径/ 上部署/path/to/your/WAR.war(因为部署描述符的文件名为ROOT),您不必修改conf/server.xml。
谁在乎修改conf/server.xml?好吧,该文件仅在容器启动期间读取一次,因此如果您想要进行更改、取消部署、重新部署等,您必须重新启动整个容器以获取这些更改。最好使用 Tomcat 的自动部署工具,您可以看到它非常灵活。
所有这些都在Tomcat's documentation on defining contexts 中列出,顺便说一句,第一句话清楚地表明在server.xml 中定义上下文是一种不好的做法。
【讨论】:
localhost:port/myapp 而不是 localhost:port/。这是在 Tomcat 9.0.20 上。我正在从 webapps 中删除 ROOT,将 myapp.war 复制到自定义位置的 tomcat/app,将 myapp.xml 复制到包含 <Context docBase="/usr/local/tomcat/app/myapp.war"></Context> 的 /usr/local/tomcat/conf/Catalina/localhost/。你能帮我弄清楚我做错了什么吗?
ROOT.xml 而不是 myapp.xml。 Tomcat 从 XML 文件的名称派生上下文路径,名称ROOT.xml 使用零长度字符串作为上下文路径进行特殊处理。
webapps目录下,那么如果你使用这个答案中详述的方法,它将被部署两次。请注意,在第 2 步中它说 将您自己的应用程序移动到 webapps/ 以外的其他位置。
webapps 文件夹中更好?使用ROOT.war 是。到目前为止,它要简单得多,因此有助于理解为什么我们应该支持上述更复杂的解决方案。
您有几个选项来设置根应用程序。 (见https://stackoverflow.com/a/5328636/6371459)
删除 ROOT 目录并将您的战争部署为 ROOT.war
在webapps 中部署您的war 并在conf/server.xml 中配置上下文根以使用您的war 文件(not recommended 因为需要重新启动)
创建一个特定的上下文文件$CATALINA_BASE/conf/[enginename]/[hostname]/ROOT.xml 并像之前的2) 一样设置docBase=your_war_name(参见@ChristopherShultz 答案)
由于你已经放弃了选项1,不推荐选项2,我建议使用上下文文件
【讨论】:
server.xml 中配置Context 是个坏主意。
配置文件是server.xml
你可以按照这个例子:https://examples.javacodegeeks.com/enterprise-java/tomcat/tomcat-server-xml-configuration-example/
参考 tomcat 文档:http://tomcat.apache.org/tomcat-7.0-doc/config/context.html
【讨论】: