为什么Java Web应用程序不能有两个Web上下文?

4
一个Java Web应用程序必须选择静态上下文或“webcontext”。为什么我们需要一个像Jetty这样的Web服务器专门针对"webcontext",并且为什么我们必须将所有内容都路由到同一个“webcontext”?

doc中可以看出,每个Web应用程序只有一个上下文。如果您说明问题陈述,可能会识别出替代的可行解决方案。 - Ravindra HV
1个回答

7
因为Jetty是一个JEE Servlet容器,在JEE世界中,Web应用程序和Web上下文之间存在一对一的关系。其意图是能够在同一个Servlet容器中运行多个独立的Web应用程序。因此,通过URL路径的第一部分很容易路由到适当的Web应用程序。
理论上讲,可以为一个Web应用程序声明多个Web上下文,但规范是另有规定的。请参见Java Servlet Specification 3.1中的第10.2节“与ServletContext的关系”:

Servlet容器必须强制执行Web应用程序和ServletContext之间的一对一对应关系。ServletContext对象为Servlet提供了其应用程序的视图。


1
我不确定Jetty是否支持,但Tomcat允许您在Web应用程序之间共享上下文(设置crossContext = true,通过request.getServletContext()访问),这可以使您分离动态和静态上下文。其中一个用例是有一组动态Web应用程序共享一组公共的静态内容。由于某些原因从未向我解释过,动态应用程序需要提供自己的内容,但所有内容都来自将发布“内容”war文件的CMS。在我看来,这是一种导致更多问题而不是解决问题的黑客技术,但您可以这样做。 - stringy05

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接