2013-10-23 17 views
7

Tôi chỉ cần thực hiện REST API đầu tiên của tôi dựa trên này http://www.vogella.com/articles/REST/article.html Tôi đang sử dụng eclipse Kepler, tomcat7, và Jerseyngoại lệ java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer

khi tôi cố gắng "chạy trên máy chủ" tôi nhận được lỗi này:

SEVERE: Servlet /de.vogella.jersey.first threw load() exception 
java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559) 
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:527) 
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:509) 
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:137) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1144) 
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088) 
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5176) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5460) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
    at java.util.concurrent.FutureTask.run(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 

Dưới đây là mã nguồn:

package de.vogella.jersey.first; 

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 

@Path("/hello") 
public class Hello { 

    // This method is called if TEXT_PLAIN is request 
    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String sayPlainTextHello() { 
    return "Hello Jersey"; 
    } 

    // This method is called if XML is request 
    @GET 
    @Produces(MediaType.TEXT_XML) 
    public String sayXMLHello() { 
    return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey" + "</hello>"; 
    } 

    // This method is called if HTML is request 
    @GET 
    @Produces(MediaType.TEXT_HTML) 
    public String sayHtmlHello() { 
    return "<html> " + "<title>" + "Hello Jersey" + "</title>" 
     + "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> "; 
    } 

} 

đây là 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>de.vogella.jersey.first</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>de.vogella.jersey.first</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> 

đây là các thư viện mà tôi đã thêm từ Jersey:

asm-all-repackaged-2.2.0-b14.jar 
cglib-2.2.0-b14.jar 
guava-14.0.1.jar 
hk2-api-2.2.0-b14.jar 
hk2-locator-2.2.0-b14.jar 
hk2-utils-2.2.0-b14.jar 
javax.annotation-api-1.2.jar 
javax.inject-2.2.0-b14.jar 
javax.servlet-api-3.0.1.jar 
javax.ws.rs-api-2.0.jar 
jaxb-api-2.2.7.jar 
jersey-client.jar 
jersey-common.jar 
jersey-container-servlet-core.jar 
jersey-container-servlet.jar 
jersey-server.jar 
org.osgi.core-4.2.0.jar 
osgi-resource-locator-1.0.1.jar 
persistence-api-1.0.jar 
validation-api-1.1.0.Final.jar 
+2

này nên giải quyết vấn đề của bạn .... http: //stackoverflow.com/questions/18086218/java-lang-classnotfoundexception-com-sun-jersey-spi-container-servlet-servletco – AsG

+0

cảm ơn @AakashGoyal đã giải quyết được vấn đề này – Navid

Trả lời

6

Nếu bạn đang sử dụng jersey 2.x API, bạn cần phải đổi tên các lớp học như thực hiện dưới đây, và vấn đề của bạn sẽ được đã giải quyết.

<servlet> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>org.glassfish.jersey.config.property.packages</param-name> 
     <param-value>com.practise.rest</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 

Karthik [aka DjNickZ]

2

Bạn đang nhận được

com.sun.jersey.spi.container.servlet.ServletContainer 

Điều đó có nghĩa bạn đang sử dụng phiên bản khác của jar. Bạn đã thêm jersey-server.jar số jar này được nâng cấp lên jersey-servlet-1.17.jar.

Vì vậy hãy thêm jersey-servlet-1.17.jar vào dự án của bạn.

0

Bạn cần thêm các tệp jar sau vào thư mục web-inf/lib của mình, bạn cũng cần phải định cấu hình đường dẫn xây dựng - Nhấp chuột phải vào dự án của bạn - Tạo đường dẫn - định cấu hình đường dẫn xây dựng - thư viện - thêm bên ngoài lọ (thêm tất cả các tệp jar bên dưới). Và khởi động lại máy chủ

Jersey libs

1

Chúng tôi gặp lỗi này vì vấn đề đường dẫn xây dựng. Bạn nên thêm các thư viện "Server Runtime" trong Build Path.

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

Hãy làm theo các bước dưới đây để giải quyết lớp không tìm thấy ngoại lệ.

Nhấp chuột phải vào dự án -> Build Path -> Java Build Path -> Add Library -> Server Runtime -> Apache Tomcat v7.0

Cảm ơn, Sachin GN

Các vấn đề liên quan