2012-05-09 92 views
4

我在我的Java類下面的代碼新澤西州的hello world給404

import javax.ws.rs.*; 
import javax.ws.rs.core.MediaType; 

@Path("/hello") 
public class Hello { 
    //This method is called is TEXT_PLAIN is request 
    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String sayPlainTextHello(){ 
     return "Hello World"; 
    } 

    //this method is called if TEXT_XML is requested 
    @GET 
    @Produces(MediaType.TEXT_XML) 
    public String sayXMLHello(){ 
     return "<?xml version=\"1.0\"?>"+"<Hello> Hello World"+"</hello>"; 
    } 

    //this method is called if HTML is requested 
    @GET 
    @Produces(MediaType.TEXT_HTML) 
    public String sayHtmlHello(){ 
     return "<html>"+"<title>"+"hello jersey"+"</title>"+"<body><h1>"+"hello World!!"+"</body></h1>"+"</html>"; 
    } 
} 

我編譯它,並出口它作爲一個.war文件,當我輸入

http://127.0.0.1/test_server/hello

我得到了404。我試了它在WTP,捲曲他們都返回404 ..我使用的是tomcat 7.0.26

注:我在端口80上運行Tomcat,其他servlet按預期做出響應。

的web.xml配置

<display-name>Jersey_Test</display-name> 
    <servlet> 
    <servlet-name>Hello</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>com.example.service</param-value> 
    </init-param> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Hello</servlet-name> 
    <url-pattern>/*</url-pattern> 

下面的網址給我的HTTP狀態500

http://localhost/Jersey_Test/rest/hello 
java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer 

回答

1

問題已得到解決,這是我做到的。

我從構建路徑中刪除了球衣.jar文件,並將其替換爲WEB-INF\lib文件夾中的所有內容。

0

看起來你是在錯誤的地方註冊你的servlet。仔細檢查一下你的servlet的根URL,並確保它符合你的要求。

你試過打?:

http://127.0.0.1/hello 

記住/hello會後無論你的servlet的基本網址去。嘗試在調試器中查看它以查看它的安裝位置。

7

如果您尚未在您的web.xml中註冊JAX-RS servlet實現,則可能發生這種情況。澤西需要以下配置:

<servlet> 
    <servlet-name>jersey</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>com.example.service</param-value> 
    </init-param> 
</servlet> 
<servlet-mapping> 
    <servlet-name>jersey</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

com.sun.jersey.config.property.packages初始化參數值必須指向你所有的服務包。但是,您的代碼片段缺少package聲明。我不確定這是否爲簡潔而省略,但是無包類對於本身在包中的類(例如Tomcat和Jersey引擎本身)是不可見的。以上web.xml示例假定您的web服務類上有一個

package com.example.service; 

。修復或相應地更改它。

請注意,/*的URL模式意味着所有請求都將通過澤西傳遞。如果您需要在同一個webapp中部署其他servlet,JSP或靜態內容,則可能需要指定更具體的URL模式。例如。

<url-pattern>/rest/*</url-pattern> 

您只需要將您的請求URL更改爲http://localhost/test_server/rest/hello

+0

我收到以下錯誤'java.lang.ClassNotFoundException:com.sun.jersey.spi.container.servlet.ServletContainer'我的buildpath中有以下.jar文件'asm-3.1.jar,jersey- core-1.12.jar,jersey-server-1.12.jar,jersey servlet-1.12.jar和jsr311-api-1.11.jar'關於'web.xml'的另一個問題我一直在用書來學習servlet編程,它由budi kurniawan寫的一個新的。本書到目前爲止我還沒有遇到過編輯web.xml的問題,我曾經寫過,然後將它作爲'.war'文件導出並運行,所以我現在對web.xml的目的感到困惑。 – cyberbemon

+0

使用當前'web.xml'更新的問題config – cyberbemon

+0

要部署哪個servletcontainer? – BalusC

0

對我而言,在Build path -> Libraries中增加了一個jar文件,其中文件系統中缺少實際的jar

我從build path刪除了條目,並在pom.xml中添加了依賴關係。 像魅力一樣工作。