0

次のセットアップを使用して、Tomcat6にRESTWebサービスをデプロイしています。これは機能します。

<web-app>  
  <servlet>  
    <servlet-name>RestServlet</servlet-name>  
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>  
    <load-on-startup>1</load-on-startup>  
  </servlet>  
  <servlet-mapping>  
    <servlet-name>RestServlet</servlet-name>  
    <url-pattern>/*</url-pattern>  
  </servlet-mapping>  
</web-app> 

上記の設定では、TomcatはリソースをスキャンWEB-INF/classesしてWEB-INF/libフォルダーを作成します。

Application次に、サブクラスを使用するように次の設定に変更しました。

<web-app>  
  <servlet>  
    <servlet-name>RestServlet</servlet-name>  
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>  
    <init-param>  
           <param-name>javax.ws.rs.Application</param-name>  
            <param-value>test.MyApplication</param-value>  
    </init-param>  
    <load-on-startup>1</load-on-startup>  
  </servlet>  
  <servlet-mapping>  
    <servlet-name>RestServlet</servlet-name>  
    <url-pattern>/*</url-pattern>  
  </servlet-mapping>  
</web-app>

ここで、リソースクラスを返すtest.MyApplicationサブクラスは次のとおりです。Application

public class MyApplication extends Application {
  public Set<Class<?>> getClasses() {
    Set<Class<?>> s = new HashSet<Class<?>>();
    s.add(MyResource.class);
    return s;
  }
}

しかし、それでもサーバーはリソースをスキャンWEB-INF/classesしますWEB-INF/lib

私は何が欠けていますか?サブクラスがに設定されているWEB-INF場合でも、サーバーはスキャンしますか?Applicationweb.xml

4

1 に答える 1

1

アプリケーション サブクラスが web.xml に設定されている場合でも、サーバーは WEB-INF をスキャンしますか?

いいえ、そうではありません。ドキュメントjavax.ws.rs.Applicationには、リソース構成に関連する初期化パラメーター ( など) が存在しない場合にパスのスキャンが行われることが説明されています。

サーバー ログの内容を確認する必要があります。Jersey が初期化すると、実行内容がログに記録され、クラスパス スキャンの場合は次のように出力されます。

情報: Web アプリのリソース パスでルート リソースとプロバイダー クラスをスキャンしています:
/WEB-INF/lib
/WEB-INF/classes

Applicationクラスを提供すると、代わりにこれが出力されます。

情報: アプリケーション クラス test.MyApplication をインスタンス化しました

サーバーの起動時に適切なweb.xmlファイルがデプロイされていることを確認する必要があります。古いバージョンがまだデプロイされている可能性があります。

于 2013-03-22T11:23:19.887 に答える