【问题标题】:In tomcat deploy mulitple apps with some context but make them think as they are root app在 tomcat 中部署多个具有某些上下文的应用程序,但让它们认为它们是根应用程序
【发布时间】:2024-04-19 09:20:01
【问题描述】:

我不确定我要问的是正确的方法。所以,让我先澄清一下我的要求。

到目前为止,我将每个应用程序用作根应用程序并将它们部署在单独的 tomcat 实例中,但我的应用程序数量现在正在增长,我无法继续为每个应用程序部署单独的 tomcat 实例。

有两件事让我将每个应用都部署为 root:

  1. 要更新应用程序,您必须关闭 tomcat 实例,这也会停止在同一实例中运行的其他应用程序。而且我不希望这种情况发生(因为一些用户正在使用一个网络应用程序,或者某些工作正在某个应用程序上运行,所以我无法在任何给定时间停止所有应用程序)。

  2. 1234563我必须在网址前写上上下文名称,例如“ctxt1/students/list”

为了开发者,我不希望他们在 web-app 中的每个 url 之前写上下文名称,也不希望上下文名称出现在用户面前。

有什么方法可以解决这两个问题。我正在考虑为某些应用迁移到 Glassfish。如果 glassfish 为这些问题提供解决方案,那么我也可以将所有应用程序迁移到 glassfish

其次,我使用 ISAPI 在 IIS 后面运行 tomcat。如果 IIS 在这里可以提供任何帮助?

【问题讨论】:

  • 那么您想将所有应用程序部署到根上下文中吗?如果他们中的两个会听同一个 URL 怎么办?

标签: java jakarta-ee tomcat iis glassfish


【解决方案1】:

每个应用程序不应使用一个 tomcat。只有在需要(真正需要)时才应该增加 tomcat 的数量。

你必须杀死整个tomcat是不正确的,对于一个App更新,你应该只重启特定的上下文(去http://your.tomcat:8080/manager/html)。

关于您可以在前面使用 apache 并配置 mod_proxy_ajp 以与 tomcat 通信的 URL(参见:http://httpd.apache.org/docs/2.2/mod/mod_proxy_ajp.html

【讨论】:

  • 哦,是的,我得到了第一个问题的答案。但是您的第二个答案将解决用户的要求。但我也担心直接使用 tomcat 的开发人员。例如,对于 root,我可以写 response.sendRedirect("/students/list"); 。有了上下文(ctxt),我必须写response.sendRedirect("ctxt/students/list"); 但是ctxt 有一天会改变,或者它也只是弄乱了url,有什么解决方案吗?
  • 看看tomcat.apache.org/tomcat-6.0-doc/…。也许方法 #2 是您的解决方案。
  • 啊,记得如果我的回答对你有用,请给我投票
  • 是的,我总是负责投票 :) 。方法 2nd 似乎很完美,将尝试使用它。你知道 glassfish 也有类似的东西吗?
  • 抱歉,我对 glassfish 的了解几乎为零。假设它不是零,因为我知道它的存在;)
最近更新 更多