Glassfish 3.0.1上的Jersey JAX-RS:我的web.xml中可以有一个空的webapp元素吗?

Glassfish 3.0.1上的Jersey JAX-RS:我的web.xml中可以有一个空的webapp元素吗?,glassfish,web-applications,jersey,jax-rs,web.xml,Glassfish,Web Applications,Jersey,Jax Rs,Web.xml,我的理解是GlassFish3兼容JEE6,并且支持jax-rs,因此我不必在web.xml文件中包含jersey servlet容器和映射。下面是我希望我的web.xml看起来的样子 <webapp> </webapp> 但是,这不起作用,因为当我尝试访问我的jax-rs路径时,我得到了404。当我包含servlet适配器时,效果非常好,如下所示: <webapp> <servlet> <servlet-name>S

我的理解是GlassFish3兼容JEE6,并且支持jax-rs,因此我不必在web.xml文件中包含jersey servlet容器和映射。下面是我希望我的web.xml看起来的样子

<webapp>
</webapp>

但是,这不起作用,因为当我尝试访问我的jax-rs路径时,我得到了404。当我包含servlet适配器时,效果非常好,如下所示:

<webapp>
  <servlet>
    <servlet-name>ServletAdaptor</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servle
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>ServletAdaptor</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</webapp>

伺服适配器

com.sun.jersey.spi.container.servlet.ServletContainer只有在web.xml中声明正确的版本时,才可能支持处理web-fragment.xml文件。这样,当部署到新版本的应用服务器时,现有应用程序的行为不会突然改变

请使用这样的web.xml进行尝试,它是从Netbeans中新创建的EE6Web项目复制的

<web-app version="3.0"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
</web-app>

对于兼容Java EE 6的JAX-RS实现,我认为您需要执行以下操作:

  • javax.ws.rs.core.Application
    子类添加到web项目中
  • 然后,将
    @javax.ws.rs.ApplicationPath(“/*”)
    注释添加到应用程序子类
  • 您的应用程序子类不应该做任何事情。根据规范,这意味着在应用程序中找到的任何
    @Path/@Provider
    都将包含在应用程序中,然后您的
    @ApplicationPath
    就像您的servlet映射一样。这将使您拥有一个空的web.xml


    没有web.xml的问题是,JAX-RS实现将不知道使用哪个servlet映射(url模式)。此外,如果您希望仅返回
    应用程序中
    @Path
    /
    @Provider
    注释类的子集,则这允许您仅为特定URL模式提供某些资源/提供程序。getClasses()

    感谢您的建议;不幸的是,它仍然不起作用!对未来的读者重复:我得到了404HTTP错误页面,这是因为我用Java7运行GlassFish4,用Java8编译JAX-RS类。