使用 Sling Servlet 的多个选择器
Multiple selectors using Sling Servlets
简短版本:如何使用 Felix 注释对 sling servlet 强制基于多个选择器的 servlet 进行最匹配?
我在 OSGI 包中定义了几个 servlet。我正在使用 org.apache.felix.scr.annotations.sling.SlingServlet 注释。
@SlingServlet(
methods={GET},
selectors {"v1"}
...
)
public class MyServlet extends SlingAllMethodsServlet {}
...
@SlingServlet(
methods={GET},
selectors {"v1","special"}
...
)
public class MySpecialServlet extends MyServlet {}
我的问题是我找不到强制 MySpecialServlet 仅在两个选择器都存在时处理请求的方法。
GET http://localhost/my/resource.v1.special.json
有时它只会处理对 v1 选择器的请求。
GET http://localhost/my/resource.v1.json
似乎在通过 felix webconsole 发布新 jar 后,如果我请求双选择器资源。v1.special.json 在任何其他资源之前,MySpecialServlet 也将继续处理仅 v1 请求。
有没有一种方法可以强制更通用的 servlet 使用当前注释处理更通用的选择器列表?我是否缺少某些部分注释?我相信这个系统可能使用了一个旧的注解。也许值得迁移?对于我被要求做的这个小任务,我尽量不要太过分。
如果我将这些技术的某些部分混为一谈,请多多包涵。我刚刚解决了这个问题,但我仍在解决它。请更正任何不一致的术语。
通过 v1.special
注册您的 MySpecialServlet
,例如 selectors = {"v1.special"}
。
根据 documentation:
... The selectors must be configured as they would be specified in the URL that is as a list of dot-separated strings such as print.a4 ...
我知道当通过选择器列表注册 servlet 时,Sling 会单独对待它们(如在 OR 条件内)。因此,在通过 selectors = {"v1","special"}
注册您的特殊 servlet 的情况下,如果您请求:
,将调用 doGet
方法
http://localhost/my/resource.v1.special.json
或
http://localhost/my/resource.special.json
或
http://localhost/my/resource.v1.json
简短版本:如何使用 Felix 注释对 sling servlet 强制基于多个选择器的 servlet 进行最匹配?
我在 OSGI 包中定义了几个 servlet。我正在使用 org.apache.felix.scr.annotations.sling.SlingServlet 注释。
@SlingServlet(
methods={GET},
selectors {"v1"}
...
)
public class MyServlet extends SlingAllMethodsServlet {}
...
@SlingServlet(
methods={GET},
selectors {"v1","special"}
...
)
public class MySpecialServlet extends MyServlet {}
我的问题是我找不到强制 MySpecialServlet 仅在两个选择器都存在时处理请求的方法。
GET http://localhost/my/resource.v1.special.json
有时它只会处理对 v1 选择器的请求。
GET http://localhost/my/resource.v1.json
似乎在通过 felix webconsole 发布新 jar 后,如果我请求双选择器资源。v1.special.json 在任何其他资源之前,MySpecialServlet 也将继续处理仅 v1 请求。
有没有一种方法可以强制更通用的 servlet 使用当前注释处理更通用的选择器列表?我是否缺少某些部分注释?我相信这个系统可能使用了一个旧的注解。也许值得迁移?对于我被要求做的这个小任务,我尽量不要太过分。
如果我将这些技术的某些部分混为一谈,请多多包涵。我刚刚解决了这个问题,但我仍在解决它。请更正任何不一致的术语。
通过 v1.special
注册您的 MySpecialServlet
,例如 selectors = {"v1.special"}
。
根据 documentation:
... The selectors must be configured as they would be specified in the URL that is as a list of dot-separated strings such as print.a4 ...
我知道当通过选择器列表注册 servlet 时,Sling 会单独对待它们(如在 OR 条件内)。因此,在通过 selectors = {"v1","special"}
注册您的特殊 servlet 的情况下,如果您请求:
doGet
方法
http://localhost/my/resource.v1.special.json
或http://localhost/my/resource.special.json
或http://localhost/my/resource.v1.json