java.lang.ClassNotFoundException : com.sun.jersey.spi.container.servlet.ServletContainer
Jersey + Google 앱 엔진을 사용하여 이틀 동안 간단한 hello world 애플리케이션을 빌드하려고합니다. 간단한 AppEngine 프로젝트의 경우이 자습서를 따랐으며 둘 다 잘 작동합니다. https://developers.google.com/appengine/docs/java/gettingstarted/creating https://developers.google.com/appengine/docs/java/webtoolsplatform
하지만 지금은 Jersey를 추가하고 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
에서 Jersey 를 다운로드 하고 튜토리얼에 설명 된대로 폴더 에 모든 jar 파일을 추가 했습니다. 그리고 이틀이 지난 후에도 아무것도 작동하지 않습니다. 나는 Google에서 여러 번 검색했으며 Maven을 사용하는 사람들이 어떻게 든 해결했지만 Maven을 사용하지 않고 해당 자습서를 작성한 사람도 마찬가지입니다.WEB-INF/lib
com.sun.jersey.spi.container.servlet.ServletContainer
가져온 파일에 존재 하는지 확인 Jersey jars
하기 위해이 정규화 된 이름을 Java로 작성하고 intellisense가 이름을 완성하도록했지만 intellisense를 얻을 수 없었기 com.sun.je
때문에 마지막 추측은 최신 Jersey 빌드에서 패키지 재 배열 이 있었다는 것입니다. 그리고 jersey
더 이상 내부에 없습니다 com.sun
. 나는 지 쳤고 어떤 종류의 도움을 주시면 감사하겠습니다.
Jersey 2 (JAX-RS 2의 RI)를 다운로드했습니다. 참조하는 튜토리얼은 Jersey 1을 사용합니다. ( 여기 ) 에서 Jersey 1.17.1을 다운로드 하면 충분합니다.
Jersey 1은를 사용 com.sun.jersey
하고 Jersey 2는 org.glassfish.jersey
예외를 사용 합니다.
또한로 init-param
시작하는 com.sun.jersey
것은 Jersey 2에서 인식되지 않습니다.
편집하다
Jersey 2에서 리소스 및 공급자 등록 에는 Jersey 2에서 클래스 / 인스턴스를 등록하는 방법에 대한 추가 정보가 포함되어 있습니다.
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>
이것을 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>
Jersey 문제가 아니라 일식 설정 문제입니다.
이 스레드에서 ClassNotFoundException : com.sun.jersey.spi.container.servlet.ServletContainer
Eclipse 프로젝트 속성-> 배포 어셈블리-> 추가-> Java 빌드 경로 항목-> Gradle 종속성-> 완료를 마우스 오른쪽 버튼으로 클릭합니다.
따라서 Eclipse는 Apache가 시작될 때 Gradle 종속성을 사용하지 않았습니다.
이 시도 :
org.glassfish.jersey.servlet.ServletContainer
서블릿 클래스
http://www.mkyong.com/webservices/jax-rs/jersey-hello-world-example/ 다른 가이드를 따랐지만 나는 당신과 같은 문제가있었습니다 .
이상한 부분은 당신의 저지에 1.8.x를 사용 가이드 다음 때문에이 버전 간의 호환성 (2.X에 대한 1.x에서) 어떤 문제가 안된다,이 설명서에 내가 사용하고, 그입니다 pom.xml
및에 web.xml
당신이 참조 com.sun.jersey.spi.container.servlet.ServletContainer
1.x 버전 이전에 언급 한 클래스 ( ). 그래서 내가 추론 할 수 있듯이 이것이 작동해야합니다.
내 생각 엔 JDK 1.7을 사용하고 있기 때문에이 클래스는 더 이상 존재하지 않습니다.
그 후, 나는 내 대답으로 해결하려고 노력했지만 도움이되지 않았으며 오류를 다음 pom.xml
과 web.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 (archetypes)을 사용하여 저지 프로젝트를 생성하십시오.
mvn archetype:generate -DarchetypeGroupId=org.glassfish.jersey.archetypes -DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeVersion=2.0
And it worked for me! :)
I also faced a similar issue. Resolved the problem by going through the step step tutorial from the below link.
http://examples.javacodegeeks.com/enterprise-java/rest/jersey/jersey-hello-world-example/
- The main thing to notice is that the jersey libraries should be placed correctly in TOMCAT WEB-INF/lib folder. It is done automatically by the Eclipse settings mentioned in the above link. It will create a WAR file with the dependent JAR Files. Else, you will run into problems with 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 bytes
- The second tutorial explains about how to create a Webservice which produces and consumes JSON output.
http://examples.javacodegeeks.com/enterprise-java/rest/jersey/json-example-with-jersey-jackson/
Both the links gave a good picture on how things work and save a lot of time.
We get this error because of build path issue. You should add "Server Runtime" libraries in Build Path.
"java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer"
Please follow below steps to resolve class not found exception.
Right click on project --> Build Path --> Java Build Path --> Add Library --> Server Runtime --> Apache Tomcat v7.0
I encountered the same error today although I was using Jersey 1.x, and had the right jars in my classpath. For those who'd like to follow the vogella tutorial to the letter, and use the 1.x jars, you'd need to add the jersey libraries to WEB-INF/lib folder. This will certainly resolve the problem.
you need to add jersey-bundle-1.17.1.jar
to lib of project
<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>
You must replace in your 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>
for this:
<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>
this is Jersey 2.x uses org.glassfish.jersey packages instead of com.sun.jersey (which is used by Jersey 1.x) and hence the exception. Note that also init-param starting with com.sun.jersey won't be recognized by Jersey 2.x once you migrate to JAX-RS 2.0 and Jersey 2.x
if at any moment you use maven, your pom.xml would be this:
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.X</version>
</dependency>
replace 2.X for your desire version, e.g. 2.15
A simple workaround is , check whether you have dependencies or libs in deployment assembly of eclipse.probably if you are using tomcat , the server might not have identified the libs we are using . in that case specify it explicitly in deployment assembly.
Coming back to the original problem - java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
As rightly said above, in JAX 2.x version, the ServletContainer class has been moved to the package - org.glassfish.jersey.servlet.ServletContainer. The related jar is jersey-container-servlet-core.jar which comes bundled within the jaxrs-ri-2.2.1.zip
JAX RS can be worked out without mvn by manually copying all jars contained within zip file jaxrs-ri-2.2.1.zip (i have used this version, would work with any 2.x version) to WEB-INF/lib folder. Copying libs to right folder makes them available at runtime.
This is required if you are using eclipse to build and deploy your project.
In pom.xml file we need to add
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.8</version>
</dependency>
The same error and wasted 2+ hours debugging and trying all options. I was not using the Maven/POM, so I could not leverage that solution given by few.
Finally the following resolved it: Adding the jars directly to the tomcat/lib (NOT WEB-INF\lib) folder and restarting the tomcat.
If anyone is trying to build a hello world application using Jersey, I think one of the easiest ways is to follow Jersey documentation.
https://jersey.github.io/download.html
If you are already using maven, it'd take only a few minutes to see the result.
I used below.
mvn archetype:generate -DarchetypeGroupId=org.glassfish.jersey.archetypes -DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeVersion=2.26
It basically depends on which version jersey you are using. If you are using Jersey ver.1.X.X you need to add
Jersey 1 uses "com.sun.jersey", and Jersey 2 uses org.glassfish. on servlet class tag. Also, note that also init-param starting with com.sun.jersey won't be recognized by Jersey 2.
And Add all the jar file into WEB-INF lib folder
'Program Tip' 카테고리의 다른 글
C #에서 ping 사용 (0) | 2020.10.06 |
---|---|
HighCharts-포인트를 끄려면 어떻게해야합니까? (0) | 2020.10.06 |
Google Maps API v3에서 SVG 마커를 사용하는 방법 (0) | 2020.10.06 |
ExpressJS에서 세션을 종료하는 방법 (0) | 2020.10.06 |
void 메서드 내에서 return을 사용하는 것이 나쁜 습관입니까? (0) | 2020.10.06 |