Glassfish 3.0.1上的Jersey JAX-RS:我的web.xml中可以有一个空的webapp元素吗?
我的理解是GlassFish3兼容JEE6,并且支持jax-rs,因此我不必在web.xml文件中包含jersey servlet容器和映射。下面是我希望我的web.xml看起来的样子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
<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类。