如果在一台Tomcat服务器上运行多种服务,该如何实现?

时间:2019-02-06 21:41:18

标签: tomcat

每个服务都得到一个单独的过程吗?一切都在同一个JVM中完成吗?有没有办法查看每个服务有多少内存?

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

1 个答案:

答案 0 :(得分:1)

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

每个Web应用程序(WAR)均使用唯一的上下文根进行部署:因此,如果您有URL http://localhost:8080/app1http://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的实现。在大多数情况下,这是您无需关心的实现细节。