首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >servlet容器是否阻止web应用程序相互干扰,以及它们是如何做到的?

servlet容器是否阻止web应用程序相互干扰,以及它们是如何做到的?
EN

Stack Overflow用户
提问于 2010-12-22 20:34:22
回答 3查看 3K关注 0票数 13

我知道servlet容器(如Apache )在JVM的单个实例中运行,这意味着它的所有servlet都将在同一个进程中运行。

我还知道servlet容器的体系结构意味着每个web应用程序都存在于自己的上下文中,这意味着它与其他web应用程序是隔离的。

如下所示:

承认每个web应用程序是孤立的,我希望您可以创建两个相同web应用程序的副本,更改每个应用程序的名称和上下文路径(以及任何其他相关配置),并并行运行它们,而不影响另一个。this question的答案似乎支持此视图。

然而,一位同事基于他们尝试的经验而不同意这一点。

他们使用了一个web应用程序,并试图在同一个servlet容器中运行两个单独的实例(具有不同的名称等),并且遇到了与这两个实例相冲突的问题(我无法详细说明,因为我没有参与到该工作中)。

基于此,他们认为,由于web应用程序运行在相同的进程空间中,它们不能被隔离,类属性之类的东西最终会被无意中共享。This answer似乎提出了同样的观点

这两个视图似乎不兼容,所以我问您:Do servlet容器防止部署到同一个容器中的web应用程序相互冲突??

如果是,他们是怎么做到的?

如果没有,为什么会发生干扰?

最后,在什么情况下可以分离web应用程序冲突并导致彼此干扰?,可能涉及文件系统上的资源、本机代码或数据库连接的场景?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-22 21:22:38

简而言之,servlet容器通过对每个应用程序使用单独的类加载器来隔离应用程序--由单独的类加载器加载的类(即使来自相同的物理类文件)是彼此不同的。但是,类加载器共享一个公共父类加载器,容器可能提供许多其他容器范围的资源,因此应用程序之间并不完全隔离。

例如,如果两个应用程序共享一些公共代码,每个应用程序在war中都包含相同的jar,那么每个应用程序将从jar加载它们自己的类实例,并且一个应用程序中的一个类的静态变量(例如单例)将与另一个应用程序中相同类的静态变量不同。

现在,举个例子,应用程序尝试使用java.util.Logger (大概不会在war文件中包含自己的Logger类实例)。每个应用程序自己的类加载器都不会在war文件中找到类,因此它们将服从于父类加载器,后者可能是共享的、容器范围的类加载器。父类加载器将加载Logger类,然后两个应用程序共享相同的Logger类。

票数 16
EN

Stack Overflow用户

发布于 2010-12-22 20:49:30

同一个容器中的Servlets将共享一些资源。我认为在同一个容器中部署同一个web应用程序两次应该是可能的,前提是给每个应用程序指定不同的名称,并且它们不会在特定的资源上发生冲突。理论上,这将与部署两个不同的servlet相同,这些servlet恰好具有相同的实现,我们一直在这样做。

一些共享的资源,从我的头顶(我不是一个专家,所以不要引用这些!):

在Tomcat/suspect/lib (Tomcat 5)或tomcat/lib (Tomcat 6)中,tomcat-users.xml

  • OS提供了
  • 库(jars)。在全局server.xml、web.xml、
  • 设置中提供了一些东西,如stdin/stdout/stderr、网络套接字、设备、文件等。静态变量?我不确定ClassLoader设计是否会阻止这一点。
  • 内存。这是最常见的问题:一个servlet可以通过消耗所有内存来拒绝其他的可用。
  • CPU--尤其是多线程应用程序。在HotSpot JVM上,每个Java线程实际上都是一个OS级别的线程,这是非常昂贵的,您不需要超过几千个。

毫无疑问还有更多。

如果您使用的是安全管理器,那么其中的许多东西都是由安全管理器保护的。

票数 6
EN

Stack Overflow用户

发布于 2010-12-22 21:02:59

我相信隔离在类加载器中。即使两个应用程序使用相同的类名和包,它们的类加载器也将加载与应用程序一起部署的类加载器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4513461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档