私はJerseyでプロジェクトをセットアップしようとしていますが、基本的に2つのサーブレットを持っています。クライアントアプリケーションによるプライベートなものと、APIとして機能するものです。 apiコールはプライベートコールのサブセットです。 (これが関連している場合、私のクライアント側はRestyGWTを持つGWTです)。プライベートサーブレットは、それらのパッケージの両方を包含する必要があります
ジャージー2つのサーブレットを設定する
com.path.to.server.resources.internal com.path.to.server.resources.api
:私のリソースは、すべてのいずれかに格納されていますapiはapiパッケージのみを使用します。
私はこのように見て、私の内部コールたい:
ます。https:// localhostを:8445 /リソース/認証/ログイン
を、私のAPIは、このように見えるように呼び出します。
HTTPS :// localhostを:8445/API /ユーザー/ getUserメソッド
私のweb.xmlが次のようになります。
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<!-- Servlets -->
<servlet>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.path.to.server.resources.exceptionmappers;com.path.to.server.resources.api;com.path.to.server.resources.internal</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>com.path.to.server.ApiApplication</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
<url-pattern>/resources/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>com.path.to.server.ApiApplication</servlet-name>
<url-pattern>/api</url-pattern>
</servlet-mapping>
</web-app>
私はこのようなApiApplicationの設定があります。
public class ApiApplication extends ResourceConfig
{
public ApiApplication()
{
System.out.println("SETTING UP API");
packages("com.path.to.server.resources.exceptionmappers;com.path.to.server.resources.api");
}
}
を今、私はすべてのことのセットアップを持っていることを、私は私のサービスをヒットしようとしています。私はこのようになりますDirectRestServiceを使用しています:
@Path("resources/authentication")
public interface AuthenticationService extends BaseService
{
@POST
@Path("/login/{loginType}")
@Produces(MediaType.APPLICATION_JSON)
Session login(@HeaderParam("Authorization") String authorization, @PathParam("loginType") UserTypes loginType);
@POST
@Path("/findActiveSession")
@Produces(MediaType.APPLICATION_JSON)
Session findActiveSession();
}
それはこのようになります実装し、サーバリソース:
@Path("authentication")
public class AuthenticationResource extends BaseResource implements AuthenticationService
{
public Session login(String authorization, UserTypes loginType)
{
// Code to do stuff
}
public Session findActiveSession()
{
// Code to do stuff
}
}
私がhttpsを訪問
:// localhostを:8445、 findActiveSession( Chromeのネットワークモニタに示すように)メソッドは私のクライアントから呼び出されたが、私は404のサービスのURLを取得しているが、次のようになりますます。https:// localhostを:8445 /リソース/認証/ findActiveSession
どのようなものがどのような経路を必要とするのかは非常に混乱しています。私が不明なこと:
AuthenticationResourceパスは正しいですか?パス注釈が必要なのでしょうか?
プライベートサーブレットがjavax.ws.rs.core.Applicationを使用するのは正しいですか?
アプリケーションサブクラス(ApiApplication)でカスタムサーブレットを正しく設定していますか?
アプリケーションをアプリケーションサーバーのルートコンテキストに展開しましたか? – JimHawkins
あなたの 'web.xml'は奇妙に見えます。 [Jersey](https://jersey.java)を見てください。 – JimHawkins
@JimHawkins今は、maven tomcatプラグインを使ってテストしています。あなたはそれについて奇妙に見えることができますか?あなたがリンクしたページは私がこれまでに得たものです。 – Troncoso