Остальные веб-службы возвращают 404
Это мой первый раз, когда я использую Eclipse и заставляю меня сильно разгневаться.
Я установил Tomcat 6.0, загрузил библиотеки Джерси, и я следил за учебниками: http://www.vogella.com/articles/REST/article.html#first_client
Я создал имя проекта как RestExample, и в нем у меня есть пакет de.jay.jersey.first, и внутри него есть класс HelloWorldResource, и вот что он выглядит:
package de.jay.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 HelloWorldResource {
// 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> ";
}
}
и мой 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>RestExample</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.jay.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>
И я пытаюсь использовать curl как:
curl http://localhost:8081/RestExample/rest/hello
Apache Tomcat/6.0.35 - Отчет об ошибке
Статус HTTP 404 -/RestExample/rest/Hello
type Статус re
port
/RestExample/rest/hello
de
scription Запрошенный ресурс (/RestExample/rest/hello) является
недоступен.
Apache Tomcat/6.0.35
Вопрос в том, что мне следует изменить в web.xml, чтобы я мог получить доступ к этому ресурсу?
Я попробовал RestExample/de.jay.jersey.first/rest/hello, и он все еще не работал. TOmcat работает без ошибок.
Ответы
Ответ 1
Я пробовал его с Tomcat 7.0, и он отлично работает:
package de.jay.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 HelloWorldResource {
// 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> ";
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>RestExample</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.jay.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>
Просмотрен http://localhost:8084/RestExample/rest/hello, и он работает нормально
Ответ 2
Мне потребовалось много времени, чтобы понять, почему он не работает для меня, несмотря на то, что он ищет решения в Интернете.
Ошибка, которую я делал, заключалась в том, что имена пакетов не были в курсе новой трикотажной ави.
Вот, какие обновленные имена пакетов должны выглядеть (Web.xml):
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>RestExample</display-name>
<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>de.jay.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>
Обратите внимание, что <servlet-class>
и <param-name>
отличаются (обновлены) от vogella tutorial.
Возможно, это не ответ на этот конкретный вопрос, но может помочь кому-то.
Я нашел его от здесь.
Ответ 3
Пожалуйста, добавьте все данные Jars в свой проект
Проект (правый клик) > Свойствa > Путь сборки Java > Библиотеки > Добавить JARs/Добавить внешние JAR
- ASM-3.1.jar
- джерси-пачка 1.14.jar
- джерси-client.jar
- джерси-core.1.17.1.jar
- джерси-сервер 1.17.jar
- джерси-сервлет-1.17.jar
Ответ 4
Проверьте, имеет ли ваш путь этот бар '/'
пример:
@Path ( '/путь')
в некоторых случаях эта проблема является только отсутствующим баром!
Ответ 5
Я искал решение этой проблемы в течение нескольких часов.
это решило мою проблему:
если вы используете Maven-Project (например, с архетипом maven-archetype-webapp), а класс HelloWorldResource реализован в папке src/main/resources, этот класс не компилируется ( например, затем запустить "mvn clean package" или "запустить на сервере" в eclipse)
Внедрите HelloWorldResource в папку src/main/java, и не более 404 происходит.
(если вы создаете Maven-Project с maven-archetype-webapp, папка должна быть создана вручную)
Ответ 6
как говорится, говорит:
// Get the Todos
System.out.println(service.path("rest").path("todos").accept(
MediaType.TEXT_XML).get(String.class));
// Get XML for application
System.out.println(service.path("rest").path("todos").accept(
MediaType.APPLICATION_JSON).get(String.class));
// Get JSON for application
System.out.println(service.path("rest").path("todos").accept(
MediaType.APPLICATION_XML).get(String.class));
вы пытаетесь указать путь метода, который вы хотите вызвать