2011-07-05 86 views
8

編輯:我沒有意識到所有的請求首先進入「Apache」,然後被重定向到Tomcat。我在apache2.conf文件中添加了一個新的重定向。詳情請參閱accepted answerJava Jersey Rest:找不到提供者類。 (訪問URL時404錯誤)

我和這個問題有完全相同的問題。 Jersey REST The ResourceConfig instance does not contain any root resource classes 但是用戶從來沒有回答過這個問題。

我使用Tomcat,沒有maven。我遵循這個教程。 http://www.ibm.com/developerworks/web/library/wa-aj-tomcat/index.html

我做了修改web.xml中按文章
即新的servlet和servlet映射與正確的包名稱創建。

<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.hello.resources</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> 

我已經部署了以下罐子到tomcat

asm.jar 
jersey-server.jar 
jersey-core.jar 
jsr311.jar 

Tomcat啓動日誌有以下例外。

com.sun.jersey.api.core.PackagesResourceConfig init 
    INFO: Scanning for root resource and provider classes in the packages: 
     sample.hello.resources 

    com.sun.jersey.api.core.ScanningResourceConfig logClasses 
    INFO: Root resource classes found: 
     class sample.hello.resources.HelloResource 

    com.sun.jersey.api.core.ScanningResourceConfig init 
    INFO: No provider classes found. 

    com.sun.jersey.server.impl.application.WebApplicationImpl _initiate 
    INFO: Initiating Jersey application, version 'Jersey: 1.8 06/24/2011 12:17 PM' 

當我訪問的URL,我收到了404 http://localhost:8080/Jersey/rest/hello

代碼:

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 HelloResource { 
    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String sayHello() { 
     return "Hello Jersey"; 
    } 
} 

我沒有看到任何其他異常的日誌

+0

如果您發佈的web.xml和sample.hello.resources.HelloResource類以及這將有助於。 – gnuf

+0

@gnuf添加的代碼和web.xml –

+1

在你的日誌中,這些看起來不像例外,只是信息性消息。該IBM教程講述瞭如何使用Eclipse創建一個名爲Jersey的Web應用程序。我不熟悉通過Eclipse部署到Tomcat,但是您確定Jersey是正確的部署路徑嗎?也就是說,你試過瀏覽到http:// localhost:8080/rest/hello嗎? – gnuf

回答

4

此問題已解決,如下所示。我的本地主機已經設置了「Apache」webserver,它將所有請求重定向到Tomcat。由於「Jersey」正在使用新的servlet,因此我必須專門爲此servlet創建單獨的重定向。

在Linux中

/etc/apache2/apache2.conf 

地址:

JkMount /rest/* ajp13_worker 
+1

你確定這是由於的httpd畢竟,你呢?正在訪問http:// localhost:8080/Jersey/rest/hello這意味着apache2沒有重定向,並且你直接訪問tomcat。你能迴應嗎,因爲我有相同的404錯誤,而且我沒有運行httpd所有。 – Gala101

8

確認你有正確的URL:

tomcat管理器應用程序很樂意將您引導到servlet的根URL。 (您假設這是「Jersey」,大寫字母爲J.) http://localhost:8080/manager/html/list

然後,您可以通過將web.xml的servlet映射中的URL模式設置爲「/ *」來跳過「rest」部分,澤西島曾經有一個相關的bug,但那是古老的歷史)

然後你可以附加「application.wadl」來獲得可用資源的描述。從理論上講: http://localhost:8080/Jersey/application.wadl

1

默認情況下,Tomcat使用WAR文件名或爆炸戰爭根上下文的最頂端目錄的名稱,除非在CATALINA_HOME/conf目錄/ server.xml中CATALINA_HOME/conf/context.xml文件或定義應用程序的META-INF/context.xml文件。

要訪問http://localhost:8080/Jersey/rest/hello,上下文條目應爲<Context path="/Jersey" docBase="myapp"/>,並且您的資源應具有@Path("/rest/hello")

+0

的@Path註釋,你有沒有不正確。path指定的路徑相對於該servlet上下文的名稱和servlet映射你的路徑註釋將基本上映射到http://本地主機:8080 /新澤西/ REST/REST /你好 – PeterToTheThird

相關問題