【问题标题】:Jersey web services泽西岛网络服务
【发布时间】:2015-08-21 11:26:54
【问题描述】:

我正在尝试使用 jersey 为 Web 服务设置一个简单的 Java Web 应用程序。但是我有以下问题。 tomcat服务器找不到资源http://localhost:8081/OnlineShop/rest/books/list但是可以找到我的简单servlethttp://localhost:8081/OnlineShop/index

我有以下 web.xml

另一方面,我注意到 com.sun.jersey.spi.container.servlet.ServletContainer 存在于我的项目中,因为我使用 maven 添加了依赖项,但是 jersey.config.server.provider.packages 不存在。也许这就是问题所在,但我不知道我必须添加的确切依赖项。

我的 BookRest.java 有以下代码并且在 com.shop.rest 包中。

最后我的 pom.xml 有以下依赖。

 <dependencies>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>1.19</version>
    </dependency>
    <dependency>
        <groupId>net.sf.json-lib</groupId>
        <artifactId>json-lib-ext-spring</artifactId>
        <version>1.0.2</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-servlet</artifactId>
        <version>1.18</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-core</artifactId>
        <version>1.19</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-client</artifactId>
        <version>1.19</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-common</artifactId>
        <version>2.17</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet-core</artifactId>
        <version>2.17</version>
    </dependency>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version>7.0</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

【问题讨论】:

    标签: java maven jersey java-web-start


    【解决方案1】:

    请,请摆脱这整个项目。您显然是初学者,似乎只是将随机配置和依赖项放在一起,可能来自不同的教程。您的依赖项不兼容并且您的 web.xml 配置错误。就像我说的,放弃整个项目并从头开始。如果您刚刚开始,您应该使用其中一个启动应用程序。

    您在 Netbeans 中,所以只需执行以下操作

    1. 文件 → 新建项目
    2. Maven → 来自 Archetype 的项目
    3. 搜索jersey-quickstart-webapp
    4. 选择组 ID org.glassfish.jersey.archetypes 的那个
    5. 应显示最新版本。
    6. 从那里应该是不言自明的

    你会发现唯一添加的依赖是

    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet-core</artifactId>
        <!-- use the following artifactId if you don't need servlet 2.x compatibility -->
        <!-- artifactId>jersey-container-servlet</artifactId -->
    </dependency>
    

    web.xml 看起来像

    <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>com.stackoverflow.jersey</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/api/*</url-pattern>
    </servlet-mapping>
    

    这将使您启动并运行一个简单的应用程序。您将看到需要取消注释以支持 JSON 的依赖项。取消评论它。或者更好的是,取消注释,然后将 jersey-media-moxy 更改为 jersey-media-json-jackson。 Jackson 是 IMO 一个更好的 JSON 库。

    同时将Jersey Documentation 放在手边,以获取一些与泽西岛合作的良好阅读和参考资料

    【讨论】:

    • 是的,你有我随机尝试一些依赖项的原因。但是我只使用 org.glassfish.jersey.core 解决了我的问题。但是你能解释一下为什么 org.glassfish.jersey.core 与 com.sun.jersey.core 依赖不同,因为我认为 com.sun.jersey.core 是官方的,对于一个简单的项目来说已经足够了。
    • com.sun 是 Jersey 1.x org.glassfish 是 Jersey 2.x 两者完全不兼容。你永远不应该将两者混为一谈。永远!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    相关资源
    最近更新 更多