【问题标题】:Tomcat - nested webapp pathing without using Apache HTTPDTomcat - 不使用 Apache HTTPD 的嵌套 webapp 路径
【发布时间】:2018-10-28 08:36:16
【问题描述】:

我又在尝试我可能不应该做的事情......但是......通常我觉得这是可能的。这一次,我真的是在祈祷。

我有一个 Tomcat 8 实例。在这种情况下,我有:

  • AppA (WAR) - 主要 Web 应用程序
  • AppB (WAR) - 次要子应用程序(实际上更多是一项功能),但人们将使用特殊路径(如“服务”)访问。

不想运行 Apache HTTPD(或任何其他附加服务层)。我还想在 tomcat 级别使它看起来不那么简单,而不是试图通过入口网络/waf/etc 或通过应用程序本身来伪造它(允许开发人员处理其他需要的编码)。

我真正想要的是以一种可以自行处理的方式配置 Tomcat:

  • 用户可以访问https://host.com/AppA
  • 如果用户转到https://host.com/AppA/service(它指向 AppB,但用户永远不会看到“AppB”的 WAR 名称 - 将 WAR 名称更改为“service”,则完全可以使用该功能,如果这样可以节省一些理智)

现在我尝试遵循虚拟主机配置 (https://tomcat.apache.org/tomcat-8.0-doc/virtual-hosting-howto.html),在此处稍作更改,看看我是否可以使它适合我的需要......并且......它失败了,但我认为如果 tomcat 可以做到这一点,我可以去那里。

到目前为止我已经尝试过:

  • 更新了 [tomcat]/conf/server.xml 并添加了条目。
  • 添加了一个新的类似于“webapps”的文件夹,名为 [tomcat]/AppBapp(AppB.war 位于此处)
  • 添加了 [tomcat]/conf/Catalina/localhost/AppB.xml 上下文文件。

我看过一些帖子,他们有点这样做,但方向相反(根 Web 目录指向一些自定义服务器路径)。我想我可以弄清楚这个配置,但我不得不问......这个策略是否适用于我试图用 tomcat 做的事情?还是我完全错了?

非常感谢您抽出宝贵时间。永远赞赏!

【问题讨论】:

  • 写到目前为止AppA/servlet调用AppB/resource的代码

标签: java tomcat path war contextpath


【解决方案1】:

事实上,您只需要通过 Tomcat 配置来嵌套上下文

这在Tomcat User's List 上进行了讨论,您可以查看archived thread 关于嵌套上下文

据我了解,给出的解决方案依赖于两个上下文配置:

$TOMCAT_BASE/conf/Catalina/localhost/A.xml
$TOMCAT_BASE/conf/Catalina/localhost/A#service.xml

有目录webapps/Awebapps/A#service(这个包含部署的appB 内容)。

【讨论】:

  • 我不知道我是如何错过有关此的帖子的……但这正是我的目标完美。谢谢@eugène-adell!
猜你喜欢
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-06
  • 2018-05-21
  • 1970-01-01
相关资源
最近更新 更多