最初、Web サーバーには REST サーブレットが 1 つしかありませんでした。何かのようなもの:
@Path("/")
public class Controller {
@GET
@Produces({ MediaType.TEXT_HTML })
public Response get(@Context UriInfo info) throws Exception {
...
}
@GET
@Path("resource1")
@Produces({ MediaType.TEXT_HTML })
public Response resource1() throws Exception {
...
}
...
}
そしてweb.xml:
<servlet>
<servlet-name>rest</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>xpto.mypack1;xpto.mypack2</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>rest</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
しかし、サーバーに静的な html を追加したかったので、サーブレットのマッピングを /rest/* に更新しました。
「/」から「/rest」へのControllerサーブレットクラスの@Pathディレクティブ。すべて正常に動作しますが、 @path ディレクティブを使用したコントローラーのサブリソースまたはメソッドが動作を停止しました..つまり:
- / ルートに index.html ページがあるため、正常に動作します
- /rest は正常に動作し、サーブレットの get メソッドを呼び出します
- /rest/resource1 は 404 http コードを返します...
何か助けはありますか?各 @Path ディレクティブの前後の / の組み合わせのリストを既に試しましたが、成功しませんでした... どうもありがとう
1 つの更新:
trace util を使用したところ、次の結果が得られました。
/[app-name]/rest の場合 (動作します):
- X-Jersey-Trace-002 は右側のパスを受け入れます java.util.regex.Matcher[pattern=/rest(/.*)? region=0,11 lastmatch=/rest]: "/rest" -> "/rest" : ""
- X-Jersey-Trace-003 受け入れリソース: "rest" -> @Path("/rest") xpto.mypack.Controller
- X-Jersey-Trace-000 はルート リソース クラスを受け入れます: "/rest"
- X-Jersey-Trace-001 一致パス "/rest" -> "/application.wadl(/. )?", "/rest(/. )?"
/[app-name]/rest/resource1 の場合 (動作しません):
- X-Jersey-Trace-002 一致例外マッパー: com.sun.jersey.api.NotFoundException@4fd41dc3 -> xpto.myclass
- X-Jersey-Trace-003 は例外を応答にマップしました: com.sun.jersey.api.NotFoundException@4fd41dc3 -> 404 (見つかりません) X-Jersey-Trace-000 はルート リソース クラスを受け入れます: "/resource1" X-Jersey- Trace-001 一致パス "/resource1" -> "/application.wadl(/. )?", "/rest(/. )?"
誰かが私を助けてくれることを願っています..