快速回答:简单,在 Service-Component 标头中添加更多子句:
<Service-Component>
com.mycompany.MyServlet1;
provide:=javax.servlet.http.HttpServlet;immediate:=true;
http=org.osgi.service.http.HttpService,
com.mycompany.MyServlet2;
provide:=javax.servlet.http.HttpServlet;immediate:=true;
http=org.osgi.service.http.HttpService
</Service-Component>
更好的答案。Apache Felix 有 White board bundle。此捆绑包在服务注册表中跟踪 Servlet 服务(不是 HttpServlet!但它确实跟踪过滤器服务),并自动将它们添加到当前的 Http 服务服务中。所以你所做的就是在 Servlet.class 下注册一个别名的“别名”属性。这也不需要您立即执行,使其在使用 servlet 之前变得懒惰。这在 42 的回答中得到了提倡,但使用标题方法看起来像这样:
<Service-Component>
com.mycompany.MyServlet1;
provide:=javax.servlet.servlet.Servlet;
properties="alias=/path"
</Service-Component>
最佳答案,使用 OSGi DS 注释来注册您的 servlet:
@Component(provide=Servlet.class, properties='alias=/path')
public void MyServlet extends HttpServlet {
public void doGet(HttpServletRequest rq, HttpServletResponse rsp) {
...
}
}