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


Saya mencoba membangun aplikasi hello world sederhana selama dua hari menggunakan Jersey + Google app engine. Untuk proyek AppEngine yang sederhana, saya mengikuti tutorial ini dan keduanya bekerja dengan baik https://developers.google.com/appengine/docs/java/gettingstarted/creating https://developers.google.com/appengine/docs/java/webtoolsplatform

Tapi sekarang saya mencoba menambahkan Jersey dan mengikuti tutorial ini http://www.vogella.com/articles/REST/article.html.

Tapi server terus memberi saya

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

ketika saya menambahkan baris-baris ini 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>

Saya telah mengunduh Jersey JAX-RS 2.1 RI bundle dari sini dan telah menambahkan semua file jar di WEB-INF/lib folder seperti yang dijelaskan dalam tutorial. Dan bahkan setelah dua hari tidak ada yang berhasil. Saya telah mencari beberapa kali di Google dan tampaknya orang-orang yang menggunakan Maven telah memecahkannya entah bagaimana tetapi saya tidak menggunakan Maven tidak melakukan orang yang menulis tutorial itu.

Hanya untuk memeriksa apakah genap com.sun.jersey.spi.container.servlet.ServletContainer ada di impor Jersey jars Saya mencoba hanya menulis nama yang sepenuhnya memenuhi syarat ini di Java dan membiarkan intellisense menyelesaikan nama tetapi saya tidak bisa mendapatkan intellisense setelah com.sun.je jadi tebakan terakhir saya adalah bahwa ada beberapa penataan ulang paket di Jersey terbaru dan jersey tidak lagi di dalam com.sun. Saya lelah dan saya akan sangat menghargai segala bentuk bantuan.


75
2017-08-06 17:02


asal


Jawaban:


Anda telah mengunduh Jersey 2 (yang RI dari JAX-RS 2). Tutorial yang Anda maksudkan menggunakan Jersey 1. Unduh Jersey 1.17.1 dari (sini), seharusnya cukup untuk Anda.

Jersey 1 menggunakan com.sun.jersey, dan Jersey 2 menggunakan org.glassfish.jersey maka terkecuali.

Juga perhatikan itu juga init-param dimulai dengan com.sun.jersey tidak akan diakui oleh Jersey 2.

Edit

Mendaftarkan Sumber Daya dan Penyedia di Jersey 2 berisi info tambahan tentang cara mendaftar kelas / instance di Jersey 2.


141
2017-08-07 09:40



Jika Anda menggunakan jersey 2.x maka Anda perlu konfigurasi yang berbeda di web.xml karena kelas servlet berubah di dalamnya. Anda dapat memperbarui web.xml Anda dengan konfigurasi berikut.

    <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>

28
2017-12-05 10:54



Tambahkan ini di 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>

21
2017-10-31 18:24



Ini masalah pengaturan gerhana, bukan masalah Jersey.

Dari thread ini, ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer

Klik kanan proyek gerhana Anda Properties -> Deployment Assembly -> Add -> Java Build Path Entries -> Gradle Dependencies -> Selesai.

Jadi Eclipse tidak menggunakan dependensi Gradle ketika Apache mulai.


8
2017-08-04 18:58



coba ini :

org.glassfish.jersey.servlet.ServletContainer

di kelas servlet


3
2018-04-01 22:04



Saya memiliki masalah yang sama seperti Anda meskipun saya telah mengikuti panduan yang berbeda: http://www.mkyong.com/webservices/jax-rs/jersey-hello-world-example/

Bagian yang aneh adalah bahwa, dalam panduan ini saya telah menggunakan, saya seharusnya tidak memiliki masalah dengan kompatibilitas antara versi (1.x terhadap 2.x) karena mengikuti panduan Anda menggunakan jersey 1.8.x pada pom.xmldan di web.xmlAnda merujuk ke kelas (com.sun.jersey.spi.container.servlet.ServletContainer) seperti yang dikatakan sebelumnya tentang versi 1.x. Sehingga saya dapat menyimpulkan ini harus bekerja.

Tebakanku karena saya menggunakan JDK 1.7 kelas ini tidak ada lagi.


Setelah, saya mencoba menyelesaikan dengan jawaban sebelum saya, tidak membantu, saya telah membuat perubahan pada pom.xmldan di web.xml kesalahan diubah menjadi: java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer

Yang seharusnya seharusnya ada!

Akibat kesalahan ini, saya menemukan solusi "baru": http://marek.potociar.net/2013/06/13/jax-rs-2-0-and-jersey-2-0-released/

Dengan Maven (arketipe), menghasilkan proyek jersey, suka ini:

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

Dan itu berhasil bagi saya! :)


2
2017-08-27 09:41



Saya juga menghadapi masalah serupa. Selesaikan masalah dengan melalui tutorial langkah langkah dari tautan di bawah ini.

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

  • Hal utama yang perlu diperhatikan adalah bahwa pustaka jersey harus ditempatkan dengan benar di folder TOMCAT WEB-INF / lib. Ini dilakukan secara otomatis oleh pengaturan Eclipse yang disebutkan di tautan di atas. Ini akan membuat file WAR dengan file JAR dependen. Lain, Anda akan mengalami masalah dengan 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

11/23/2014 12:06 AM 458.739 jersey-core-1.9.jar

11/23/2014 12:06 AM 147,952 jersey-json-1.9.jar

11/23/2014 12:06 AM 713.089 jersey-server-1.9.jar "                4 File (s) 1.450.238 byte

  • Tutorial kedua menjelaskan tentang cara membuat Webservice yang menghasilkan dan mengkonsumsi output JSON.

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

Kedua tautan memberikan gambaran yang bagus tentang cara kerja dan menghemat banyak waktu.


2
2017-11-22 19:49



Kami mendapatkan kesalahan ini karena masalah jalur pembangunan. Anda harus menambahkan "Server Runtime"perpustakaan di Build Path.

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

Ikuti langkah-langkah di bawah ini untuk menyelesaikan pengecualian kelas yang tidak ditemukan.

Klik kanan pada project --> Build Path --> Java Build Path --> Add Library --> Server Runtime --> Apache Tomcat v7.0 


1
2017-08-07 22:42