6

Javaクラスに次のコードがあります

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で試してみましたが、cURLはすべて404を返します..Tomcat 7.0.26を使用しています

注: ポート 80 で Tomcat を実行していますが、他のサーブレットは期待どおりに応答します。

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>

次の URL では、Http ステータス 500 が表示されます

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

4 に答える 4

9

これは、JAX-RS サーブレット実装をまったく登録していない場合に発生する可能性がありますweb.xml。Jersey には次の構成が必要です。

<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例では、

package com.example.service;

あなたのWebサービスクラスで。それに応じて修正または変更します。

したがって、URL パターンは/*、すべてのリクエストが Jersey を通過することを意味することに注意してください。他のサーブレット、JSP、または静的コンテンツも同じ Web アプリケーションにデプロイする必要がある場合は、より具体的な URL パターンを指定することをお勧めします。例えば

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

リクエスト URL をhttp://localhost/test_server/rest/helloに変更するだけです。

于 2012-05-09T16:36:52.403 に答える
1

サーブレットを間違った場所に登録しているようです。サーブレットのルート URL を再確認し、ヒットしているものと一致することを確認します。

打ってみましたか?:

http://127.0.0.1/hello

これ/helloは、サーブレットのベース URL が何であれ、後に続くことに注意してください。デバッガーでそれを調べて、マウントされている場所を確認してください。

于 2012-05-09T16:29:33.540 に答える
1

問題は修正され、これが私がやった方法です。

jersey .jar ファイルをビルド パスから削除し、WEB-INF\libフォルダー内でそれらを置き換えたところ、すべてが機能しました。

于 2012-05-11T14:46:18.993 に答える
0

私にとっては、実際のファイルがファイル システムから欠落しているjarファイルが追加されていました。Build path -> Librariesjar

からエントリを削除しbuild path、依存関係を追加しましたpom.xml。魅力のように働きました。

于 2016-08-07T13:12:07.957 に答える