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アプリケーションをデプロイする好ましい方法は何ですか?
Java EE 6コンテナー(より具体的にはサーブレット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
クラスは、"/rest/*"
のサーブレットURLパターンを持つ「デフォルト」のJAX-RSアプリケーションで使用可能になります。
javax.ws.rs.core.Application
を拡張する1つ以上のクラスがある場合、次のように指定できます。
<?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>
URLで特定の@Path
/@Provider
クラスのセットのみを返したい場合は、上記を実行できます(上記の異なるURLパターンを持つ2つ目のMyApplication2を作成できます)。
web.xml
全体を完全にスキップして、URLパターンとして機能する@ApplicationPath
を使用してMyApplication
クラスに注釈を付けることもできます。いずれにせよ、おそらくウェブアプリケーションに関する他の情報を追加する必要があるため、web.xml
を保持することをお勧めします。
servlet-class
がどこから来ているのか疑問に思っている場合は、環境によって自動的に追加されます。サーブレット3.0 ServletContext
を見ると、アイデアを得ることができます。
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>
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>