私は Jersey REST Web サービスを持っており、これが URL パスのリソース クラスですhttp://localhost:8080/myapp/account/home
。
@Path("account/home")
public class AccountResources {
@GET
@Produces(MediaType.TEXT_HTML)
public Viewable displayForm() {
return new Viewable("/homepage.html");
}
}
HTML ファイルは、サーバーhomepage.html
からロードする必要がある JavaScript ファイルにリンクされています。js/jump.js
<script src="js/jump.js"></script>
ただし、webapp を起動して開いたときhttp://localhost:8080/myapp/account/home
(基本的にはこれですhomepage.html
)、JavaScript ファイルjs/jump.js
が読み込まれません。したがって、それを機能させるには、コンテキスト ルート パスを追加する/myapp/
必要がありました。
<script src="/myapp/js/jump.js"></script>
コンテキスト ルート パス/myapp
は後で変更できるため、これは見栄えがよくありません。/myapp
そのため、HTML ファイルのどこにでも追加したくありません。また、私の webapp の物理ディレクトリ レイアウトは次のとおりです。
WebContent
|
|_____ homepage.html
|
|_____ js
|
|____ jump.js
では、物理的に使用していて<script src="js/jump.js"></script>
、サーバー上の同じ Web ルート ディレクトリにある場合でも、なぜ機能しないのでしょうか? アノテーションをそのように使用すると、Jersey サーブレットは HTML および JavaScript ファイルの相対 URL パスを変更しますか? サブリソースなしで使用する別の方法を試しました:homepage.html
js/jump.js
homepage.html
@Path
@Path
@Path("account")
今回<script src="js/jump.js"></script>
はmyhomepage.html
で使用でき、.jsファイルを開くと正常に読み込まれますhttp://localhost:8080/myapp/account
。そのため、Jersey の@Path("account/home")
アノテーションで定義されている URL パスのサブリソースにより、JavaScript の相対ファイル パスが検索不能になるようです。
両方を幸せにする良い方法はありますか?@Path("account/home")
(つまり、に変更せずjs/jump.js
にURL パスで両方のサブリソースを使用できます/myapp/js/jump.js
)