Java Tomcat如何在同一个servlet容器中为不同的应用程序提供服务?
我的问题是基于对webserver-servlet容器如何交互的理解。所以,如果我的基本理解是错误的,请纠正我Java Tomcat如何在同一个servlet容器中为不同的应用程序提供服务?,java,jsp,tomcat,servlets,servlet-container,Java,Jsp,Tomcat,Servlets,Servlet Container,我的问题是基于对webserver-servlet容器如何交互的理解。所以,如果我的基本理解是错误的,请纠正我 考虑进来的请求:www.bank.com/credit cards Tomcat服务器一收到请求,就将其转发给 servlet容器的web.xml映射到 上面是/信用卡 Servlet容器执行其实例化Servlet的例程(如果这是第一个请求)。 如果没有,它将为此请求创建一个线程,并将其交给Servlet,由Servlet处理响应的生成。Tomcat然后将响应返回到客户端浏览器 现在假
www.bank.com/credit cards
servlet容器
的web.xml
映射到
上面是/信用卡
线程
,并将其交给Servlet,由Servlet处理响应的生成。Tomcat然后将响应返回到客户端浏览器www.bank.com/accounts
上有另一个请求。这是由同一服务器中具有的不同应用程序提供的。在同一个应用程序中,它不是一个不同的servlet每个应用程序在
webapps
下都有自己的文件夹
应用程序信用卡
位于../webapps/credit cards/
下
应用程序accounts
位于../webapps/accounts/
下
URL中直接位于服务器根目录上的任何文件,如http://localhost:8080/index.jsp
位于文件夹../webapps/root/
中的根目录下。Tomcat就是这样知道的
每个文件夹的/WEB-INF/WEB.xml
中的Servlet映射将Servlet映射到应用程序下面
如果您在../webapps/ROOT/
下创建文件夹,或者在其中映射的servlet与另一个应用程序的URL冲突,则可能会遇到麻烦
编辑:正如Bruno在一篇评论中指出的,这个答案仅在启用时适用。上下文路径
是关键区别,或者上下文路径是war文件的名称,或者在context.xml或server.xml中的context标记中定义。您可以在同一个Tomcat实例中运行许多web应用程序。每个web应用程序都有自己的ServletContext
。如果存在冲突的路径映射,容器将发出投诉。Tomcat拥有/管理来自各种部署描述符的url映射。因此,对于/credit cards
请求,我需要一个名称完全相同的webapp文件夹。这就使得它紧密地结合在一起了,对吧?你说的是这样的情况,如果你调整这个参数,你可能会遇到更复杂的情况。我觉得理解起来很困惑。在jigar Joshi上面的链接中,提到servlet容器决定将请求转发给哪个应用程序。但是我想上下文路径设置是Tomcat的,它为web应用程序映射的URL提供服务。Servlet容器和Tomcat实例是两个独立的东西。那么,应用程序映射的哪一个是我困惑的焦点。@brain storm,虽然从技术上讲Tomcat是Servlet容器,但有些人可能会使用“Servlet容器”来指代应用程序(显然包含Servlet),从而混淆术语。或者我自己把术语倒过来了。在验证了正确的术语之后,Tomcat是Servlet容器,它生成了几个上下文容器(每个容器包含一个应用程序)。