Остальные веб-службы возвращают 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));

вы пытаетесь указать путь метода, который вы хотите вызвать