【问题标题】:How to configure jersey to avoid com.sun.jersey.spi.container.servlet.ServletContainer giving problems?如何配置 jersey 避免 com.sun.jersey.spi.container.servlet.ServletContainer 出问题?
【发布时间】:2016-12-10 04:55:27
【问题描述】:

我已设法缩小我无法编译我的项目的原因。这是一个旨在成为 api REST 的 maven 项目,在 eclipse 上完成,其想法是让它在 tomcat v6 上运行。

我在 pom.xml 上有这个配置:

<!-- Jersey -->
    <dependency>
     <groupId>com.sun.jersey</groupId>
         <artifactId>jersey-server</artifactId>
         <version>1.19</version>
     </dependency>
     <dependency>
         <groupId>com.sun.jersey</groupId>
         <artifactId>jersey-servlet</artifactId>
         <version>1.19</version>
     </dependency>

这给了我以下错误:

java.lang.ClassCastException: com.sun.jersey.spi.container.servlet.ServletContainer cannot be cast to javax.servlet.Servlet 当我尝试删除 jersey-servlet 时,因为我看到人们说他们会制造麻烦而我只需要 jersey-server 等等,所以我明白了:

java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer

我一直在搞乱很多配置,试图遵循不同的解决方案,但我相信问题出在此处。谁能告诉我如何正确配置它?

我的 pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">


 <modelVersion>4.0.0</modelVersion>
  <groupId>com.CC.enterprise.rest.jersey</groupId>
  <artifactId>CC-HelloWorld</artifactId>
      <version>0.0.1-SNAPSHOT</version>

<distributionManagement>
    <!-- Will be used when it is NOT a snapshot version -->
    <repository>
        <id>releases</id>
        <name>RepositoryProxy</name>
        <url>edited</url>
    </repository>
    <!-- Will be used when IT IS a snapshot version -->
    <snapshotRepository>
        <id>snapshots</id>
        <name>RepositoryProxy</name>
        <url>edited</url>
    </snapshotRepository>
</distributionManagement>


<dependencies>

    <!-- Jersey -->
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>1.8</version>
    </dependency>

    <!-- MongoDB -->
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongodb-driver</artifactId>
        <version>3.2.2</version>
    </dependency>

    <!-- JSON -->
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-json</artifactId>
        <version>1.9</version>
    </dependency>

    <!-- Servlet API -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>

</dependencies>

我的 web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>Restful Web Application</display-name>



<servlet>
    <servlet-name>jersey-helloworld-serlvet</servlet-name>
    <servlet-class>
       com.sun.jersey.spi.container.servlet.ServletContainer
    </servlet-class>
    <init-param>
      <param-name>com.sun.jersey.config.property.packages</param-name>
      <param-value>com.CC.enterprise.rest.jersey</param-value>
    </init-param>
    <init-param>
      <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
      <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>jersey-helloworld-serlvet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
</web-app>

【问题讨论】:

    标签: java rest maven tomcat servlets


    【解决方案1】:

    尝试删除 jersey-server 依赖项。仅使用 jersey-servlet 依赖项:

    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-servlet</artifactId>
        <version>1.19</version>
    </dependency>
    

    并确保com.sun.jersey 依赖项使用相同的版本。在撰写本文时,最新版本是1.19.1

    如果这是一个新项目,忘记旧的 Jersey 1.x 并选择 Jersey 2.x

    【讨论】:

    • 如果我这样做,我会得到: java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer 。如果我删除了 jersey-json 之外,没有更多的 com.sun.jersey 依赖项。它不是新的,它是基于另一个与此配置一起使用的先前配置,因此我们的想法是不要在这些东西上花费太多时间。哈!
    • @monkeyintern com.sun.jersey.spi.container.servlet.ServletContainer 类包含在 jersey-servlet 依赖项中。你不应该有那个错误。
    • 我不知道还能做什么或去哪里看。运行方式:服务器应该在这种情况下工作,如果一切都很好,对吧?不需要.war?我已经检查了所有可能的解决方案。切。
    • @monkeyintern 你什么意思?您是否使用嵌入式服务器而不是部署在 Web 服务器中?
    • @monkeyintern Eclipse 正在为您处理部署。我以为您的意思是您将服务器嵌入到您的应用程序中。你目前的方法很好。我认为这是一个配置/依赖问题。尝试删除 jersey-server 依赖项并仅使用 jersey-servlet 依赖项。有了它,你应该没有ClassNotFoundException。此外,请检查Jersey 1.x documentationchapter 11 为您提供了有关依赖项的良好概述。
    猜你喜欢
    • 2016-05-15
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多