2012-05-08 3 views
11

Это мой первый раз, когда я использую Eclipse и заставляю меня сильно гнев.Rest Web-сервисы, возвращающие 404

Я установил 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> 

, и я пытаюсь использовать завиток как:

завитка http://localhost:8081/RestExample/rest/hello

Apache Tomcat/6.0.35 - Сообщить об ошибке

HTTP Status 404 -/RestExample/отдых/Hello

Тип Статус повторно порт

сообщение/RestExample/отдых/привет

де scription запрошенный ресурс (/ RestExample/отдых/привет) это не доступно.

Apache Tomcat/6.0.35

Вопрос в том, что я должен изменить в web.xml, чтобы получить доступ к этому ресурсу?

Я попробовал RestExample/de.jay.jersey.first/rest/hello, и он все еще не работал. TOmcat работает без ошибок.

+0

Как вы применили это приложение к Tomcat? В частности, где находится ваш web.xml и где находится ваш файл класса? –

+0

Я пробовал Tomcat 7.0, и он отлично работает – DaTroop

+0

Я изменил только минимальные вещи, такие как Servlet версии от 2.5 до 3.0 в web.xml – DaTroop

ответ

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 и он хорошо работает

+0

Эта конфигурация хороша, если вы на Джерси 1.x. Джерси 2.x имеет разные имена и имена контейнеров. Таким образом, такая же конфигурация не будет работать, если вы используете банки 2.x. Просто подумал, что я упомянул об этом, поэтому он избавит от лишних проблем для тех, у кого в кластере классов есть 2.x. – adityalad

-2

как говорит Aticle:

// 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)); 

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

12

Мне потребовалось много времени, чтобы понять, почему он не работает для меня, несмотря на то, что он ищет решения по всему миру. Ошибка, которую я делал, заключалась в том, что имена пакетов не были обновлены до нового jersey api. Вот что обновленные имена пакетов должны выглядеть (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. Возможно, это не ответ на этот конкретный вопрос, но может помочь кому-то. Я нашел его от here.

+0

спасибо @gndps, что вы спасли мой день. Ваш ответ заслуживает того, чтобы быть на самом деле на самом деле. Я изменил проект и переместил часть web.xml, но я забыл изменить имя своего пакета. Ваш ответ помог мне. Еще раз спасибо – samir

+0

@samir - что означает gndps - это не имя вашего пакета, а имя параметра init, в котором вы указываете имя своего пакета в web.xml. все же исправление, которое вы сделали, действительно для вашей проблемы, но немного отличается от описанной здесь проблемы. Имя init-param для упоминания пакетов отличается разными версиями трикотажа. –

2

Пожалуйста, добавьте все данные Баночки в проекте

Project (правая кнопка мыши)> Свойства> Java Построить путь> Библиотека> Добавить JARs/Add External баночек

  1. ASM-3.1.jar
  2. Джерси-пачке 1.14.jar
  3. Джерси-client.jar
  4. Джерси-core.1.17.1.jar
  5. Джерси-сервера 1.17.jar
  6. Джерси-сервлет-1.17.jar
0

я искал решение той же задачи в течение нескольких часов тоже.

это решить мою проблему:

, если вы используете Maven-проекта (например, с помощью архетипа Maven-архетипа-веб-приложение) и класс HelloWorldResource реализуется в папке SRC/основные/ресурсы этого класса Безразлично «т компилируются (например, затем запустить„MVN чистый пакет“или„запустить на сервере“в затмении)

Реализовать HelloWorldResource в папку SRC/главная/Java вместо и не более 404 .. встречается, (если вы создайте Maven-Project с maven-archetype-webapp, папка должна быть создана вручную)

1

Проверьте, если ваш путь есть этот бар «/» пример: @Path («/ путь») в некоторых случаях эта проблема только недостающее бар!

Смежные вопросы