java - Tomcat 如何在同一个 servlet 容器中为不同的应用程序提供服务?

标签 java jsp tomcat servlets servlet-container

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

  1. 考虑收到的请求:www.bank.com/credit-cards

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

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

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

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

  6. 我想每个应用程序都应该有自己的容器。即在上述情况下将有两个 servlet 容器。

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

最佳答案

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

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

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

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

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

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

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

关于java - Tomcat 如何在同一个 servlet 容器中为不同的应用程序提供服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24684405/

相关文章:

java - 用户注册后需要基于表单的身份验证。有办法逃避吗?

java - 移动服务器时 JSP java.lang.NullPointerException

java - Tomcat Magnolia 5 管理中心面板错误

java - 拦截和过滤 HTTP 请求

java - 如何在jshell中显示版本

java - 使用媒体播放器更新进度条

SVN结帐后spring webapp项目无法运行

java - 如何将 Spring MVC 重定向到类似 url 的 {...}

jquery - 如何将 ResultSet 对象转换为 JSON 格式输出

java - 将 Axis 安装到 Tomcat 容器