#java #eclipse #rest #jersey #tomcat8
#java #eclipse #rest #джерси #tomcat8
Вопрос:
Я пытаюсь создать службу RESTful в Eclipse с использованием Джерси.
Я неоднократно получаю следующую ошибку, когда пытаюсь запустить localhost в Eclipse.
SEVERE: Servlet [Jersey Web Application] in web application [/TestPrject] threw load() exception
java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer
Мой web.xml выглядит примерно так :
<web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<display-name>TestPrject</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Jersey Web Application</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.eviac.blog.MyTestSvc</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
У меня также есть все jar-файлы Jersey 2.0 в WEB-INF / lib. Я использую Apache Tomcat 8.0 с JDK 1.7.0_79.
Класс, используемый для ввода службы, выглядит следующим образом:
@Path("/")
public class MyTestSvc {
@GET
@Path("/callService")
@Produces({ "text/plain" })
public String userName() {
return "hello";
}
}
Есть идеи, где я могу ошибаться?
Ответ №1:
Убедитесь, что у вас есть зависимость jersey-container-servlet-core.
Ответ №2:
если вы используете maven, добавьте в свой pom следующую зависимость
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>{your version here (2.0)?}</version>
</dependency>
Комментарии:
1. Я не использую Maven
Ответ №3:
В соответствии с классом обслуживания или контроллером ваш URL-адрес выглядит следующим образом
ProjName/rest // CallService
Поэтому создайте в классе service
@Path("/service")
public class MyTestSvc {
@GET
@Path("/callService")
@Produces({ "text/plain" })
public String userName() {
return "hello";
}
}
Тогда URL-адрес будет ProjName / rest / service / CallService
Ответ №4:
В вашем приложении есть несколько проблем:
Исправление зависимостей
Если вы используете Maven, убедитесь, что у вас есть следующая зависимость:
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.23.2</version>
</dependency>
Если нет, убедитесь, что у вас есть все jersey-container-servlet
зависимости артефактов от пути к классу.
Исправление web.xml
jersey.config.server.provider.packages
Параметр определяет один или несколько пакетов, содержащих ресурсы и поставщиков, специфичных для конкретного приложения. Изменить:
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.eviac.blog.MyTestSvc</param-value>
</init-param>
Для:
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.eviac.blog</param-value>
</init-param>
Если вам нужно добавить больше пакетов, используйте ;
или ,
для их разделения.
Как только Tomcat 8.x поддерживает Servlet 3.x, вам не нужен дескриптор web.xml
развертывания для простых приложений. Для получения более подробной информации ознакомьтесь с документацией Jersey, касающейся развертывания в контейнерах Servlet 3.x.
Улучшение дизайна пути к ресурсам
Избегайте @Path
аннотаций с пустой строкой или просто косой чертой в качестве значения. Это плохо пахнет.
Комментарии:
1. Когда я пытаюсь добавить
ServletContainer
код, Eclipse просит меня импортировать изorg.glassfish.jersey.servlet
, это предполагает, что добавлена ссылка наjersey-container-servlet
, что желательно. Однако он находится в web.xml где я все еще сталкиваюсь с ошибкой.2. К вашему сведению: я не использую Maven
3. @RitwikSen Если вы создаете приложение для примера, это хорошая возможность начать использовать Maven.