如果在一台Tomcat服务器上运行多个服务,这是如何实现的?

如果在一台Tomcat服务器上运行多个服务,这是如何实现的?,tomcat,Tomcat,每个服务都有一个单独的流程吗?所有事情都是在同一个JVM中完成的吗?是否有一种方法可以查看每个服务占用了多少内存 编辑:如果是一个进程,Tomcat是否在不同的线程中运行各个服务?Tomcat服务器作为单个进程运行。当它接受一个新连接时,它会分配一个线程来从头到尾处理该连接 每个web应用程序(WAR)都使用唯一的上下文根进行部署:因此,如果您有URLhttp://localhost:8080/app1和http://localhost:8080/app2,您知道它们是基于上下文根的不同应用程序

每个服务都有一个单独的流程吗?所有事情都是在同一个JVM中完成的吗?是否有一种方法可以查看每个服务占用了多少内存


编辑:如果是一个进程,Tomcat是否在不同的线程中运行各个服务?

Tomcat服务器作为单个进程运行。当它接受一个新连接时,它会分配一个线程来从头到尾处理该连接

每个web应用程序(WAR)都使用唯一的上下文根进行部署:因此,如果您有URL
http://localhost:8080/app1
http://localhost:8080/app2
,您知道它们是基于上下文根的不同应用程序

在每个web应用程序中,Tomcat维护一个路由表,该表说明应该为给定URL调用哪个类。如果您使用的是servlet,它可能会说
/mypage
路由到
com.example.MyPageServlet
,而
/myotherpage
路由到
com.example.MyOtherPageServlet

每个servlet类都是一个实例对象。因此,Tomcat在接受请求后做的第一件事是根据上下文根确定它属于哪个web应用,以及该web应用中的哪个servlet对象应该处理该请求。然后调用该对象上的服务方法


为了保持web应用程序的独立性,每个应用程序都使用自己的应用程序加载。这意味着
MyPageServlet
app1
实例将支持与
app1
WAR绑定的
com.example.MyHelperClass
的实现,而不是与
app2
WAR绑定的实现。在大多数情况下,这是一个您不必关心的实现细节。

有一个进程、一个JVM和单独的类加载器。太宽泛了。你可以运行几个Tomcat,也可以只运行一个,当然它们都有多个线程。@EugèneAdell:我问的是在同一个Tomcat服务器中部署了多个WAR。你可以编辑你的问题,让它更清楚-没有这样的“在Tomcat中运行的服务”,决不。@EugèneAdell:多个战争是关键:所有战争是在同一进程中运行,还是可以通过tomcat配置使它们在不同进程或不同线程中运行?