繁体   English   中英

使用Jetty启动多个servlet

[英]Start more than one servlet with Jetty

我将OSGi的Felix实现与Maven一起使用。 我使用Maven包插件来连接依赖项(即Service-Component标头)。 我使用以下内容注册一个servlet

<Service-Component>
 com.mycompany.MyServlet;
 provide:=javax.servlet.http.HttpServlet;immediate:=true;
 http=org.osgi.service.http.HttpService
</Service-Component>

但是,我想使用相同的HTTP服务运行第二个servlet。 我该怎么做?

我建议将felic SCR注释与maven-scr-plugin一起使用

然后,您可以简单地注释您的塞尔维特:

@Component(immediate=true)
@Service(Servlet.class)
@Property(name="alias", value="/path1")
public class Servlet1 extends HttpServlet {
    ...
}

@Component(immediate=true)
@Service(Servlet.class)
@Property(name="alias", value="/path2")
public class Servlet2 extends HttpServlet {
    ...
}

它还假定您已安装Felix HTTP白板捆绑包。 HTTP白板将检测类型为javax.servlet.Servlet的所有服务,并自动在HTTP服务中注册它们。

快速答案:简单,在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具有白板捆绑包。 该捆绑软件在服务注册表中跟踪Servlet服务(不是HttpServlet !,但它跟踪过滤器服务),并自动将它们添加到当前的Http Service服务中。 因此,您要做的就是在Servlet.class下注册一个别名的'alias'属性。 然后,这也不需要您立即执行,从而使其变得懒惰,直到使用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) {
        ...
    }
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM