Jersey如何连接到servlet 3容器

时间:2017-03-15 14:26:45

标签: tomcat jersey web.xml servlet-3.0

对于servlet 2.5,必须在web.xml中声明Jersey容器servlet以将Jersey挂钩到Tomcat。

<web-app>
    <servlet>
        <servlet-name>MyApplication</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            ...
        </init-param>
    </servlet>
</web-app>

对于servlet 3.x,我们可以做同样的事情。但是我们也可以在web.xml中删除Jersey容器servlet,并将Application子类直接放入其中。

<web-app>
    <servlet>
        <servlet-name>org.foo.rest.MyApplication</servlet-name>
    </servlet>
    ...
    <servlet-mapping>
        <servlet-name>org.foo.rest.MyApplication</servlet-name>
        <url-pattern>/resources</url-pattern>
    </servlet-mapping>
    ...
</web-app>

我的问题是在这种情况下Jersey如何集成到Tomcat中? Application类是否隐式执行某些操作,或者servlet是否在类路径中自动发现Jersey jar?

1 个答案:

答案 0 :(得分:1)

我不确定球衣是如何实现它的,但他们可能会使用几种方法:

  • Servlet 3.0(http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContainerInitializer.html)中引入了一个名为ServletContainerInitializer的功能,它允许库/运行时通知Web应用程序的启动阶段并执行任何必需的servlet编程注册,过滤器和监听器以响应它

  • 可以将他的库创建为web-fragment,它允许您在jar中包含web-fragment.xml,您可以在其中注册servlets / filter / etc.然后在启动期间,web-fragment.xmlweb.xml合并。因此,Web片段中注册的组件将被视为已在web.xml中注册

编辑:(来自@peeskillet评论)Jersey使用servlet容器初始化程序:https://github.com/jersey/jersey/blob/master/containers/jersey-servlet/src/main/java/org/glassfish/jersey/servlet/init/JerseyServletContainerInitializer.java