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

时间:2014-07-10 19:06:00

标签: java jsp tomcat servlets servlet-container

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

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

应用credit-cards位于.../webapps/credit-cards/

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

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

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

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

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