我的问题是基于对网络服务器 - servlet 容器如何交互的理解。所以如果我的基本理解有误,请指正。
考虑收到的请求:
www.bank.com/credit-cards
。Tomcat 服务器收到请求后,立即将其转发给
servlet Container
其web.xml
映射到传入的 URI 上面是/credit-cards
Servlet 容器执行实例化 servlet 的例程(如果这是第一个请求)。 如果没有,它将为这个请求创建一个
Thread
,并将它交给 Servlet,Servlet 负责生成响应。然后 Tomcat 将响应返回给客户端浏览器。现在假设我在
www.bank.com/accounts
有另一个请求。这是由同一服务器中的不同应用程序提供的。它不是同一应用程序中的不同 servlet。现在如何保存 url 映射?服务器如何知道应该将请求转发给哪个应用程序?服务器不保存任何描述 rune 件。应用程序 1 和应用程序 2 具有将传入 url 映射到 servlet 的 web.xml 文件。是否所有 URL 映射和 servlet 都在服务器的某处注册以供查找?
我想每个应用程序都应该有自己的容器。即在上述情况下将有两个 servlet 容器。
这是常见的情况吗?我不知道任何使用 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/