每个服务都得到一个单独的过程吗?一切都在同一个JVM中完成吗?有没有办法查看每个服务有多少内存?
编辑:如果是一个进程,Tomcat是否在不同的线程中运行各个服务?
答案 0 :(得分:1)
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对象应处理该请求。然后,它在该对象上调用service方法。
为了保持Web应用程序的独立性,每个应用程序都使用自己的classloader进行加载。这意味着app1
的{{1}}实例将实现与MyPageServlet
WAR捆绑在一起的com.example.MyHelperClass
的实现,而不是与app1
WAR捆绑的app2
的实现。在大多数情况下,这是您无需关心的实现细节。