2013-05-30 46 views
1

我在Web開發牛逼,我努力創建使用的球衣簡單的REST Web服務,打包爲一個獨立的戰爭文件,將被部署在Tomcat 7404訪問時,應用程序新澤西州在Tomcat中7

I have followed this tutorial爲了創建簡單的hello world寧靜的web服務。 我已經使用intelij爲了創建戰爭文件(戰爭文件和爆炸版本),並將它們部署在tomcat \ webapps文件夾中。

當啓動tomcat的,我無法訪問URL(http://localhost:8080/rest/hello) - 讓404

望着tomcat的日誌,我找不到任何異常或錯誤,其他然後這些組線:

INFO: Scanning for root resource and provider classes in the packages: 
    sample 
εαΘ 30, 2013 11:24:38 PM com.sun.jersey.api.core.ScanningResourceConfig logClasses 
INFO: Root resource classes found: 
    class sample.Hello 
εαΘ 30, 2013 11:24:38 PM com.sun.jersey.api.core.ScanningResourceConfig init 
INFO: No provider classes found. 

我搜查了很多,並試圖按照這個錯誤的所有解決方案,但沒有任何工作。

我有一種感覺,我錯過了一些非常基本的東西,由於我的新生命。 任何想法搜索什麼?我錯過了什麼? 這是一個簡單的Hello World應用程序,我exahuster和沮喪...

Java類

package sample; 

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 Hello { 

    // This method is called if TEXT_PLAIN is requested 
    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String sayHelloInPlainText() { 
    return "Hello world!"; 
    } 

    // This method is called if HTML is requested 
    @GET 
    @Produces(MediaType.TEXT_HTML) 
    public String sayHelloInHtml() { 
    return "<html> " + "<title>" + "Hello world!" + "</title>" 
     + "<body><h1>" + "Hello world!" + "</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_3_0.xsd" 
    id="WebApp_ID" version="3.0"> 

     <display-name>rest</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>sample</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
     </servlet> 

     <servlet-mapping> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <url-pattern>/*</url-pattern> 
     </servlet-mapping> 

    </web-app> 
+0

請在你的問題中包含'Hello.java'和'web.xml'的代碼。沒有更多細節很難幫助你。 –

+0

您的WAR部署爲「休息」嗎? – 2013-05-31 14:06:29

回答

7

這是對此SO問題類似:「No provider classes found: when running Jersey REST example application」。

消息「沒有找到提供程序類」很好,不需要擔心。要使用URL http://localhost:8080/rest/hello工作,您的WAR文件需要稱爲rest.war。然後rest成爲上下文根。您在項目註釋中定義的所有路徑相對於上下文根爲

+0

謝謝。畢竟,那是我的問題。 (缺少URL)。我的war文件被稱爲'webr4',如果使用了url localhost:8080/webr4/hello它就可以工作。現在我所剩下的只是瞭解如何改變上下文(?),以便它不會成爲'webr4'。 –

+0

最簡單的方法是重命名WAR文件。 –

+0

如果這有助於您解決問題,請考慮[接受此答案](http://meta.stackexchange.com/a/5235)以幫助其他用戶。 –

3

如果你叫你的項目日食:休息,所以你應該得到正確的信息:「Hello world!」從與網址的tomcat:

http://localhost:8080/rest/hello. 

比如你有人稱您的項目:創建MyHello,與你的代碼貼在正確的URL應該是:

http://localhost:8080/MyHello/hello 

(原因是,Eclipse中通過創建默認情況下,稱爲該項目的名稱戰爭並將其發佈到你已經在你的配置中添加了Tomcat服務器)

讓我知道

+0

謝謝。事實上,這是問題所在。它在改變時運行良好,正如我對上面的答案評論的那樣。 –