36

JAX-RS 1.1 仕様の 6 ページには次のように記載されています。

Application サブクラスが存在しない場合、追加するサーブレットには次の名前を付ける必要があります。

javax.ws.rs.core.Application

追加されたサーブレットとは何ですか? 任意のサーブレットでしょうか?

Application サブクラスが存在し、次の名前のサーブレット初期化パラメーターを持つ定義済みのサーブレットが既に存在する場合:

javax.ws.rs.Application

繰り返しますが、ここでの「サーブレット」とは何ですか?

既存のサーブレットによって処理されていない Application サブクラスが存在する場合、ContainerInitializer によって追加されるサーブレットは、Application サブクラスの完全修飾名で命名する必要があります。

「ContainerInitializer によって追加されたサーブレット」は、サーブレットが自動的に追加されるという意味ですか? 構成はどのようになりますか?

現時点では、Application クラスも web.xml も使用していませんが、(GlassFish 3.1 で) 動作します。この展開メカニズムには、大きなライブラリでは遅くなる可能性があるフル クラス パス スキャンが必要ですか?

サーブレットコンテナにデプロイする方法は?

Web には、紛らわしい数の構成オプションがあります。web.xml のコンテキスト パラメータでこの例を参照してください(私にはうまくいきません!)。JAX-RS アプリケーションをデプロイするための推奨される方法は何ですか?

4

4 に答える 4

69

Java EE 6 コンテナー (より具体的には Servlet 3.0 実装) にデプロイするには、いくつかのオプションがあります。

最も簡単なのは次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_3_0.xsd" version="3.0">
    <servlet>
        <servlet-name>javax.ws.rs.core.Application</servlet-name>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>javax.ws.rs.core.Application</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>
</web-app>

次に、Web アプリケーションで見つかったすべての@Pathおよび@Providerクラスは、サーブレット URL パターン"/rest/*".

を拡張するクラスが 1 つ以上ある場合はjavax.ws.rs.core.Application、次のように指定できます。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_3_0.xsd" version="3.0">
    <servlet>
        <servlet-name>com.example.jaxrs.MyApplication</servlet-name>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>com.example.jaxrs.MyApplication</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>
</web-app>

@Path特定の/クラスのセットのみを URL に返したい場合は、上記を実行することをお勧めし@Providerます (そのため、上記の別の URL パターンを持つ 2 番目の MyApplication2 を作成できます)。

全体を完全にスキップして、URL パターンとして機能するクラスweb.xmlに注釈を付けることもできます。いずれにしても、Web アプリケーションに関する他の情報をそこに追加する必要がある可能性があるため、.MyApplication@ApplicationPathweb.xml

がどこからservlet-class来たのか疑問に思っている場合は、環境によって自動的に追加されます。Servlet 3.0 を見ると、アイデアが得られますServletContext

于 2010-07-22T22:57:34.677 に答える
5

WAS 8.5 では、web.xml を変更して以下を追加します。

<servlet>
    <servlet-class>com.ibm.websphere.jaxrs.server.IBMRestServlet</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.tada.rest.RestApplication</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
</servlet>
<servlet-mapping>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

私の RestApplication は次のようになります:

import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.core.Application;

public class RestApplication extends Application {

    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> sets = new HashSet<Class<?>>();
        sets.add(RestService.class);
        return sets;
    }
}

私の RestService は次のようになります

@Path("/tada")
public class RestService {
    @GET
    public String getSomething() {
        return "tada";
    }
}

そして、依存関係を pom.xml に追加します。

<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.0</version>
</dependency>
于 2017-08-28T15:19:53.160 に答える
2

Servlet3.0 では、これに従ってください。これは私にとってはうまくいきます。

<servlet>
    <description>JAX-RS Tools Generated - Do not modify</description>
    <servlet-name>JAX-RS Servlet</servlet-name>
    <servlet-class>com.ibm.websphere.jaxrs.server.IBMRestServlet</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>your.restsrv.config.RESTConfig</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <enabled>true</enabled>
    <async-supported>false</async-supported>
</servlet>
<servlet>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>JAX-RS Servlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
于 2013-10-09T13:05:29.240 に答える