关于java:Tomcat如何在同一个servlet容器中提供不同的应用程序?

how does Tomcat serve different applications with in the same servlet container?

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

  • 考虑一个请求:www.bank.com/credit-cards

  • 一旦Tomcat服务器收到请求,它就会将其转发到servlet Containerweb.xml映射到传入的uri,后者上面是/credit-cards吗?

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

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

  • 现在如何保存URL映射?服务器如何知道应该将请求转发到哪个应用程序?服务器没有任何描述符文件。应用程序1和应用程序2具有web.xml文件,这些文件将传入的URL映射到servlet。所有的URL映射和servlet是否都在服务器的某个地方注册以进行查找?

  • 我想每个应用程序都应该有自己的容器。也就是说,在上面的例子中有两个servlet容器。

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


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

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

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

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

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

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

    编辑:正如布鲁诺在评论中指出的,这个答案只适用于自动部署启用的情况。