87

Jersey + Googleアプリエンジンを使用して、2日間の簡単なHello Worldアプリケーションを構築しようとしています. 単純な AppEngine プロジェクトの場合、これらのチュートリアルに従いましたが、どちらも問題なく動作し ます https://developers.google.com/appengine/docs/java/gettingstarted/creating https://developers.google.com/appengine/docs/java/webtoolsplatform

しかし今、私はジャージーを追加しようとしており、このチュートリアルhttp://www.vogella.com/articles/REST/article.htmlに従っています。

しかし、サーバーは私に与え続けます

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

これらの行を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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>TestServer</display-name>
<servlet>
    <servlet-name>Jersey REST Service</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.test.myproject</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>

ここJAX-RS 2.1 RI bundleからジャージーをダウンロードし、チュートリアルで説明されているように、すべての jar ファイルをフォルダーに追加しました。そして、2日経っても何も機能していません。私はGoogleで何度か検索しましたが、Mavenを使用している人は何とか解決したようですが、私はMavenを使用しておらず、そのチュートリアルを書いた人も使用していません.WEB-INF/lib

com.sun.jersey.spi.container.servlet.ServletContainerインポートに存在する かどうかを確認するJersey jarsために、この完全修飾名を Java で書き込んで、インテリセンスに名前を付けさせようとしましたが、その後インテリセンスを取得できなかったcom.sun.jeので、最後の推測では、最新のジャージー ビルドでパッケージの再配置が行われた可能性があります。そしてjerseyもう中にはありませんcom.sun。私は疲れ果てており、あらゆる種類の助けをいただければ幸いです。

4

18 に答える 18

158

Jersey 2 (JAX-RS 2 の RI) をダウンロードしました。参照しているチュートリアルでは、Jersey 1 を使用しています。Jersey 1.17.1 を ( here ) からダウンロードするだけで十分です。

ジャージー 1 は を使用しcom.sun.jersey、ジャージー 2 はorg.glassfish.jersey例外を使用します。

また、Jersey 2 では認識されないことにも注意してくださいinit-paramcom.sun.jersey

編集

Registering Resources and Providers in Jersey 2には、Jersey 2でクラス/インスタンスを登録する方法に関する追加情報が含まれています。

于 2013-08-07T09:40:02.223 に答える
34

jersey 2.x を使用している場合は、サーブレット クラスが変更されているため、web.xml で別の構成が必要です。次の構成で web.xml を更新できます。

    <servlet>
    <servlet-name>myrest</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>    
    <init-param>
      <param-name>jersey.config.server.provider.packages</param-name>
      <param-value>your.package.path</param-value>
    </init-param>
    <init-param>
     <param-name>unit:WidgetPU</param-name>
     <param-value>persistence/widget</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>myrest</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
于 2013-12-05T10:54:39.530 に答える
22

これをpomに追加します

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-server</artifactId>
    <version>1.17.1</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-core</artifactId>
    <version>1.17.1</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-servlet</artifactId>
    <version>1.17.1</version>
</dependency>
于 2013-10-31T18:24:58.093 に答える
3

私も同様の問題に直面しました。以下のリンクからステップ ステップ チュートリアルを実行して問題を解決しました。

http://examples.javacodegeeks.com/enterprise-java/rest/jersey/jersey-hello-world-example/

  • 注意すべき主な点は、ジャージ ライブラリを TOMCAT WEB-INF/lib フォルダに正しく配置する必要があることです。上記のリンクに記載されているEclipse設定によって自動的に行われます。依存する JAR ファイルを含む WAR ファイルが作成されます。そうしないと、ClassNotFound Exception で問題が発生します。

apache-tomcat-7.0.56-windows-x64\apache -tomcat-7.0.56\webapps\JerseyJSONExample\WEB-INF\lib

"11/23/2014 12:06 AM 130,458 jersey-client-1.9.jar

2014 年 11 月 23 日 12:06 AM 458,739 jersey-core-1.9.jar

2014 年 11 月 23 日午前 12:06 147,952 jersey-json-1.9.jar

11/23/2014 12:06 AM 713,089 jersey-server-1.9.jar" 4 ファイル 1,450,238 バイト

  • 2 番目のチュートリアルでは、JSON 出力を生成および使用する Web サービスを作成する方法について説明します。

http://examples.javacodegeeks.com/enterprise-java/rest/jersey/json-example-with-jersey-jackson/

どちらのリンクも、物事がどのように機能し、多くの時間を節約するかについての良いイメージを与えてくれました.

于 2014-11-22T19:49:16.807 に答える
3

これを試して :

org.glassfish.jersey.servlet.ServletContainer

サーブレットクラス

于 2014-04-01T22:04:06.283 に答える
2

別のガイドに従っていますが、私はあなたと同じ問題を抱えていました: http://www.mkyong.com/webservices/jax-rs/jersey-hello-world-example/

奇妙な部分は、私が使用したこのガイドでは、バージョン間の互換性 (1.x 対 2.x) に問題はないはずです。これは、ガイドに従ってジャージー 1.8.x を使用しているpom.xmlためweb.xmlです。com.sun.jersey.spi.container.servlet.ServletContainer1.x バージョンの前に述べたクラス ( )。だから私が推測できるように、これはうまくいくはずです。

私の推測では、JDK 1.7 を使用しているため、このクラスはもう存在しません。


その後、私は私の前に答えを解決しようとしましたが、助けにはなりませんでしpom.xmlweb.xml。エラーを次のように変更しました。java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer

おそらく存在するはずです!

このエラーの結果、「新しい」解決策を見つけました: http://marek.potociar.net/2013/06/13/jax-rs-2-0-and-jersey-2-0-released/

Maven (アーキタイプ) を使用して、次のような jersey プロジェクトを生成します。

mvn archetype:generate -DarchetypeGroupId=org.glassfish.jersey.archetypes -DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeVersion=2.0

そして、それは私のために働いた!:)

于 2014-08-27T09:41:57.853 に答える
1

ビルド パスの問題により、このエラーが発生します。「サーバー ランタイム」ライブラリをビルド パスに追加する必要があります。

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

クラスが見つからないという例外を解決するには、以下の手順に従ってください。

を右クリックproject --> Build Path --> Java Build Path --> Add Library --> Server Runtime --> Apache Tomcat v7.0

于 2015-08-07T22:42:00.683 に答える
0

元の問題に戻る - java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer

上で正しく述べたように、JAX 2.x バージョンでは、ServletContainer クラスがパッケージ (org.glassfish.jersey.servlet.ServletContainer) に移動されました。関連する jar は、 jaxrs-ri-2.2.1.zipにバンドルされているjersey-container-servlet-core.jarです。

JAX RS は、zip ファイルjaxrs-ri-2.2.1.zip (私はこのバージョンを使用しましたが、任意の 2.x バージョンで動作します) に含まれるすべての jar ファイルを WEB-INF/lib フォルダーに手動でコピーすることにより、mvn なしで解決できます。ライブラリを適切なフォルダーにコピーすると、実行時に使用できるようになります。

これは、Eclipse を使用してプロジェクトをビルドおよびデプロイする場合に必要です。

于 2015-09-17T19:14:24.347 に答える
0

簡単な回避策は、eclipse の展開アセンブリに依存関係またはライブラリがあるかどうかを確認することです。おそらく、Tomcat を使用している場合、サーバーは使用しているライブラリを識別していない可能性があります。その場合は、展開アセンブリで明示的に指定してください。

于 2015-09-15T12:06:00.647 に答える
0

web.xml を次のように置き換える必要があります。

<servlet>
    <servlet-name>Jersey REST Service</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.test.myproject</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

このため:

<servlet>
    <servlet-name>Jersey REST Service</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.test.myproject</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

これは、Jersey 2.x が com.sun.jersey (Jersey 1.x で使用される) の代わりに org.glassfish.jersey パッケージを使用するため、例外です。また、com.sun.jersey で始まる init-param は、JAX-RS 2.0 および Jersey 2.x に移行すると、Jersey 2.x によって認識されないことに注意してください。

いつでもmavenを使用すると、pom.xmlは次のようになります。

<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>2.X</version>
</dependency>

2.X を目的のバージョンに置き換えます (例: 2.15)。

于 2015-01-21T22:31:07.027 に答える
0

jersey-bundle-1.17.1.jarプロジェクトのlibに追加する必要があります

<servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <!-- <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> --> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <!-- <param-name>jersey.config.server.provider.packages</param-name> --> <param-value>package.package.test</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>

于 2014-08-23T06:48:37.207 に答える
0

pom.xml ファイルに追加する必要があります

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-core</artifactId>
    <version>1.8</version>
</dependency>
于 2017-08-31T12:05:17.127 に答える