对于Servlet2.5,必须在web.xml中声明泽西容器servlet,以便将泽西岛连接到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中的,并将一个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>我的问题是,在这种情况下,泽西岛是如何融入Tomcat的?Application类是隐式地执行某些操作,还是servlet在类路径中自动发现Jersey?
发布于 2017-03-15 14:55:45
我不确定jersey是如何实现它的,但是他们可能会使用几种方法:
ServletContainerInitializer的特性(http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContainerInitializer.html ),它允许将web应用程序的启动阶段通知库/运行时,并对Servlet、过滤器和侦听器执行任何必需的编程注册以响应它web-fragment,这允许您在jar中包含web片段. the,您可以在其中注册servlets/filter/等等,然后在启动时将这个web-fragment.xml与web.xml合并。因此,将在web片段中注册的组件视为在web.xml中注册的组件。编辑:(来自@peeskillet注释)泽西使用servlet容器初始化器:https://github.com/jersey/jersey/blob/master/containers/jersey-servlet/src/main/java/org/glassfish/jersey/servlet/init/JerseyServletContainerInitializer.java
https://stackoverflow.com/questions/42812584
复制相似问题