Servlet容器是否可以防止Web应用程序相互干扰,它们是如何做到的?
我知道一个 servlet 容器,比如 Apache Tomcat,在 JVM 的单个实例中运行,这意味着它的所有 servlet 都将在同一进程中运行。
我还知道,Servlet容器的架构意味着每个Web应用程序都存在于自己的上下文中,这表明它与其他Web应用程序是隔离的。
如下图所示:
接受每个Web应用程序都是隔离的,我希望您可以创建相同Web应用程序的2个副本,更改每个副本的名称和上下文路径(以及任何其他相关配置),并并行运行它们,而不会影响另一个副本。这个问题的答案似乎支持这一观点。
然而,一位同事根据他们尝试这样做的经验而不同意。
他们采用了一个Web应用程序,并尝试在同一个servlet容器中运行2个单独的实例(具有不同的名称等),并遇到了2个实例冲突的问题(我无法详细说明,因为我没有参与该工作)。
基于此,他们认为,由于Web应用程序在同一进程空间中运行,因此它们不能被隔离,并且诸如类属性之类的东西最终会被无意中共享。这个答案似乎暗示了同样的事情
这两种视图似乎不兼容,所以我问你:servlet容器是否能防止部署到同一容器的Web应用程序相互冲突?
如果是,他们如何做到这一点?
如果不是,为什么会发生干扰?
最后,在什么情况下,单独的Web应用程序会发生冲突并导致彼此干扰?,也许是涉及文件系统上的资源,本机代码或数据库连接的情况?