Java 使用Jersey在web.xml中配置提供程序包

Java 使用Jersey在web.xml中配置提供程序包,java,web-services,jersey,Java,Web Services,Jersey,我正在处理一个web服务,我遇到了一个非常奇怪的错误。 这是my web.xml中的一行: jersey.config.server.provider.packages 服务 据我所知,我的主要申请是在包中提到的。但是,我的应用程序在rest.main包中,但是web服务只使用上面定义的服务值 有什么问题,谁能解释一下这些行吗?如果应用程序只包含存储在特定包中的资源和提供程序,Jersey可以扫描它们并自动注册 <web-app> <servlet> <se

我正在处理一个web服务,我遇到了一个非常奇怪的错误。 这是my web.xml中的一行:

jersey.config.server.provider.packages 服务 据我所知,我的主要申请是在包中提到的。但是,我的应用程序在rest.main包中,但是web服务只使用上面定义的服务值


有什么问题,谁能解释一下这些行吗?

如果应用程序只包含存储在特定包中的资源和提供程序,Jersey可以扫描它们并自动注册

<web-app>
<servlet>
    <servlet-name>Jersey Web Application</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>org.foo.rest;org.bar.rest</param-value>
    </init-param>
    ...
</servlet>
...
</web-app>
参数值指的是将自动扫描的包。

查看有关配置属性的:

<web-app>
<servlet>
    <servlet-name>Jersey Web Application</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>org.foo.rest;org.bar.rest</param-value>
    </init-param>
    ...
</servlet>
...
</web-app>
定义一个或多个包含特定于应用程序的资源和提供程序的包。如果设置了该属性,将扫描指定的包以查找JAX-RS根资源和提供程序

Servlet 2.x容器 此设置经常在web.xml部署描述符中使用,以指示Jersey扫描这些包并自动注册找到的任何资源和提供程序:

jersey.config.server.provider.packages org.foo.myresources,org.bar.otherresources 使用此设置,Jersey将自动发现所选包中的资源和提供程序。默认情况下,Jersey也将递归扫描子包

Servlet 3.x容器 对于Servlet3.x容器,根本不需要web.xml。相反,注释可用于注释自定义或子类,并为应用程序中配置的所有JAX-RS资源定义基本应用程序URI

使用以下命令定义要扫描的包:

@应用程序路径资源 公共类MyApplication扩展了ResourceConfig{ 公共MyApplication{ packagesorg.foo.myresources,org.bar.otherresources; } } 有关更多详细信息,请查看Jersey文档的

重要的 始终使用包的限定名称; 使用,或;在声明多个包时用作分隔符。
您只需要将包名添加到

如果我将资源类放在com.ft.resources包中,请举例说明 然后我必须将包名添加到

<init-param> 
    <!-- For Jersey 2.x -->
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.ft.resources</param-value>
</init-param>

希望这可以解决您的问题

如果您的Web服务资源存在于rest.main包中,则需要将param值设置为rest。main@PaulStatham正如我所说的-如果我将其设置为rest.main,它将无法工作HTTP404。它只适用于、服务,这就是我要问你的魔力:是什么让你尝试使用服务价值?你的项目结构是什么?@PaulStatham我做的一切都是简单的教程。首先我将包命名为service.main,然后我将其重命名并忘记了参数。我现在正试图将它实现到另一个应用程序,但它不起作用,这就是为什么我回到根应用程序,直到不起作用404错误。在哪里可以找到定义的参数?我想知道为什么它只与、、服务一起工作。那么,org.foo.rest的含义是什么;在这里休息?这些是你的应用程序的实际值吗?你有什么例子说明应该使用什么样的实际值来代替org.foo.myresources、org.bar.otherresources。。。。所有的例子都使用这个非常相同的例子,我不知道从一个实际的项目中放置什么。最后找到了添加倍数的分隔符。