3

我的理解是 glassfish 3 兼容 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>

是否可以在 glassfish 3.0.1 上使用 jersey 有一个空的 webapp 元素?

4

2 回答 2

4

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

  1. javax.ws.rs.core.Application子类添加到您的 Web 项目
  2. 然后,@javax.ws.rs.ApplicationPath("/*")在 Application 子类中添加注解。

您的 Application 子类不应该做任何事情。根据规范,这意味着@Path/@Provider在应用程序中找到的任何内容都将包含在应用程序中,然后您@ApplicationPath就像您的 servlet 映射一样。这将使您有一个空的 web.xml。

没有 web.xml 的问题是 JAX-RS 实现不知道要使用哪个 servlet 映射(url 模式)。@Path此外,如果您希望@Provider在您的Application.getClasses().

于 2010-07-17T13:06:24.007 回答
0

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

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

<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>
于 2010-06-19T19:23:52.503 回答