2015-08-28 103 views
0

我已經建立了一個項目,用於規劃和學習和測試,代碼中沒有錯誤,但無論我多麼努力地嘗試,我都找不到URI路徑,它是testGet中的GET方法的.java,這是一個測試頁面,我總是得到404錯誤,我已搜查谷歌幾個小時,但我沒有找到answer.my代碼是在這裏 https://github.com/abcdef123ghi/jerseytest澤西總是返回404

這裏是我的web.xml

<!DOCTYPE web-app 
    PUBLIC '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN' 
    'http://java.sun.com/dtd/web-app_2_3.dtd'> 
<web-app> 
    <display-name>Restful Web Application</display-name> 
    <servlet> 
     <servlet-name>Restful Web Application</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>service</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Restful Web Application</servlet-name> 
     <url-pattern>/webapi/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

這裏是我的testGET.java

package service; 

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 


@Path("/test") 
public class testGet { 

    @GET 
    //@Path("/test") 
    @Produces({MediaType.APPLICATION_JSON+ ";charset=utf-8"}) 
    public String Hello() 
    { 
     return "Test"; 
    } 
} 

問題

有沒有人曾與相關的東西? 我做錯了什麼? 我認爲這可能是一個錯誤,當使用多個@Path時,一個在Class中,另一個在Method中。 任何提示感謝!

問候

+0

你使用哪個URL返回404狀態? – ColinMc

+0

感謝您回覆我 –

+0

您的web.xml配置不好。您正在使用Jersey 1.x配置,但您使用的是Jersey 2.x jar。看看[文檔](https://jersey.java.net/documentation/latest/deployment.html#deployment.servlet.2)的正確配置 –

回答

2

您是否使用Maven的依賴呢?如果沒有,我會建議你使用它,它會讓你的生活更輕鬆!

我們可以指出的一件事是,您正在使用jersey 2.19。然而,在你web.xml,您使用的

<servlet> 
    <servlet-name>Restful Web Application</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>service</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

這是從jersey 1.x。在jersey 2.x,它已被更改爲:

<servlet> 
    <servlet-name>Restful Web Application</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 

    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value>service</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

然後也嘗試添加您的.jarWebContent/WEB-INF/lib(如建議here

但是,你testGet.java應該是正確的(請注意,我將其重命名爲TestGet.java)。 你應該可以當你啓動服務訪問: http://host:port/rest/test

希望它可以幫助你!

+0

感謝您的幫助 –

0

正確的網址是:

http://{server}:{port}/{context-root}/{servlet-mapping}/{path} 

在您的例子:

  • {server} = localhost
  • {port} = 8080
  • {context-root} = service?(通常是戰爭文件的名稱)
  • {servlet-mapping} = webapi
  • {path} = test

所以它應該是:

http://localhost:8080/service/webapi/test 

如果URL不可用,那麼很可能部署失敗。檢查您的服務器日誌(部署戰爭文件的時間)。