当多个包使用相同的 ServletContextHelper 时,我需要一些与 Http Whiteboard Specification 相关的 ServletContextHelper 行为的精确度
规范说:
Http Whiteboard 实现必须为每个 ServletContextHelper 服务创建一个单独的 ServletContext 实例。白板服务可以通过使用 osgi.http.whiteboard.context.select 属性与 Servlet 上下文助手相关联。如果未设置此属性,则使用默认的 Servlet 上下文助手。
如果我理解正确,所有使用相同 ServletContextHelper 引用的 Servlet 或过滤器都绑定到相同的“ServletContext”
然后 :
ServletContextHelper 的一些实现可以使用服务工厂来实现,例如从关联的包中提供资源,就像默认实现一样。因此,白板实现必须使用注册白板服务的包的包上下文来获取 Servlet 上下文帮助器。
所以如果一个bundle A用ServletContextHelper X注册了一个Servlet,而bundle B用同一个ServletContextHelper的引用注册了一个Filter,那么Servlet和Filter注册到同一个ServletContext,但是它们的init方法是用两个不同的实例来调用的ServletContext(为了以不同的方式实现 getClassLoader() 方法)?
此外,“默认” ServletContextHelper 的行为是什么?是否总是有一个“默认”的 ServletContextHelper 注册?它是在捆绑包之间共享还是捆绑包只有一个实例?