2012-05-08 127 views
11

這是我第一次使用Eclipse,並且使我憤怒了很多。其餘的Web服務返回404

我安裝了Tomcat 6.0,下載Jersey庫,我跟着教程來自: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狀態404 -/RestExample/REST /你好

狀態重新 端口

消息/RestExample/REST /你好

德 scription所請求的資源(/ RestExample/REST /你好)是 不可用。

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

我在web.xml中只修改了Servlet版本從2.5到3.0的最小的東西 – 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

如果您使用的是Jersey 1.x,則此配置非常有用。 Jersey 2.x具有不同的容器包名稱和屬性名稱。所以,如果你使用2.x罐子,相同的配置將無法工作。只是覺得我會提到它,所以它會爲其類路徑中擁有2.x jar的人留下不必要的麻煩。 – 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

我花了很多時間來弄清楚爲什麼它不適用於我,儘管在網絡上尋找解決方案的全部內容。 我正在犯的錯誤是軟件包名稱沒有及時更新到新的球衣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意味着不是你的包的名稱,而是你在web.xml中提供你的包名的init參數名。您所做的修復仍然適用於您的問題,但與此處解釋的問題略有不同。提到軟件包的init-param名稱因不同的澤西版本而異。 –

2

請添加所有給定的罐子在您的項目

項目(右鍵)>屬性> Java構建路徑>庫>添加JAR文件/添加外部JAR

  1. ASM-3.1.jar
  2. 球衣束-1.14.jar
  3. 球衣-client.jar中
  4. 球衣-core.1.17.1.jar
  5. 球衣 - 服務器1.17.jar
  6. 球衣,servlet的1.17.jar
0

我找了一個解決同樣的問題,好幾個小時了。

這個解決我的問題:

如果你使用Maven的項目(例如與原型Maven的原型 - web應用程序)和類HelloWorldResource在文件夾中實現的src/main /資源這個類沒有按「T被編譯(例如然後在Eclipse中運行‘MVN清潔包’或‘在服務器上運行’)

文件夾中實現HelloWorldResource 的src/main/java的反而並沒有更多的404個occures .. (如果您使用maven-archetype-webapp創建Maven-Project文件夾需要手動創建)

1

檢查你的路徑有這條「/」 例如: @Path(「/路徑」) 在某些情況下,這個問題只是缺少的吧!