【问题标题】:how does Tomcat serve different applications with in the same servlet container?Tomcat 如何在同一个 servlet 容器中为不同的应用程序提供服务?
【发布时间】:2014-09-01 07:01:13
【问题描述】:

我的问题是基于对 webserver - servlet 容器如何交互的理解。所以如果我的基本理解有误,请纠正我。

  1. 考虑进来的请求:www.bank.com/credit-cards

  2. Tomcat 服务器一收到请求,就会将其转发给 servlet Containerweb.xml 映射到传入的 URI 上面是/credit-cards

  3. Servlet Container 执行其例程实例化 servlet(如果这是第一个请求)。 如果没有,它将为此请求创建一个Thread 并将其交给处理生成响应的 Servlet。 Tomcat 然后将响应返回给客户端浏览器。

  4. 现在假设我在www.bank.com/accounts 有另一个请求。这由同一服务器中的不同应用程序提供服务。它不是同一个应用程序中的不同 servlet。

  5. 现在如何保存 url 映射?服务器如何知道它应该将请求转发到哪个应用程序?服务器不保存任何描述符文件。应用程序 1 和应用程序 2 具有将传入 url 映射到 servlet 的 web.xml 文件。是否所有的 URL 映射和 servlet 都在服务器某处注册以供查找?

  6. 我猜每个应用程序都应该有自己的容器。也就是在上述情况下会有两个 servlet 容器。

  7. 这是常见的情况吗?我不知道任何使用 servlet/JSP 在服务器中保存多个应用程序的真实示例(如果两个请求来自相同或不同的应用程序,用户可能无法区分)

【问题讨论】:

  • context-path 是关键区别
  • 上下文路径是战争文件的名称或在 context.xml 或 server.xml 中的 Context 标记中定义。 tomcat.apache.org/tomcat-7.0-doc/config/…
  • 您可以在同一个 Tomcat 实例中运行多个 Web 应用程序。每个 Web 应用程序都有自己的ServletContext。如果存在冲突的路径映射,容器会报错。
  • Tomcat 拥有/管理来自各种部署描述符的 url 映射。

标签: java jsp tomcat servlets servlet-container


【解决方案1】:

每个应用程序在webapps 下都有自己的文件夹。

应用程序credit-cards.../webapps/credit-cards/下。

应用程序accounts.../webapps/accounts/ 下。

URL 中直接位于服务器根目录上的任何文件,例如 http://localhost:8080/index.jsp,都位于文件夹 .../webapps/ROOT/ 中的 root 应用程序下。 Tomcat 就是这么知道的。

每个文件夹的 ./WEB-INF/web.xml 中的 Servlet 映射映射应用程序下方的 servlet。

如果您在 .../webapps/ROOT/ 下创建文件夹或映射 servlet 会与另一个应用程序的 URL 冲突,您可能会遇到麻烦。

编辑:正如布鲁诺在评论中指出的那样,此答案仅适用于 auto deployment 开启时。

【讨论】:

  • 所以对于/credit-cards 的请求,我需要一个名称完全相同的webapp 文件夹。这使它紧密耦合对吗?
  • 你说的是auto deployment is used here的情况,如果你调整context configuration,你会遇到更复杂的情况。
  • 我觉得很难理解。在 jigar Joshi 上面发布的链接中,它提到 servlet 容器确定将请求转发到哪个应用程序。但是我想上下文路径设置是 Tomcat 的设置,它为 Web 应用程序映射的 URL 提供服务。 Servlet Container 和 Tomcat 实例是两个不同的东西。那么APP映射哪个是我的困惑点..
  • @brainstorm,虽然Tomcat在技术上是Servlet Container,但有些人可能会使用“servlet container”来指代应用程序(其中显然包含servlet),从而混淆了术语。 或者我自己的术语可能倒过来了。
  • 验证了正确的术语后,Tomcat 是 Servlet 容器,它产生了多个上下文容器(每个容器包含一个应用程序)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-19
  • 2019-01-01
  • 1970-01-01
相关资源
最近更新 更多