0

私は 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.htmljs/jump.jshomepage.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)

4

1 に答える 1

1

書いてみてください

<script src="../js/jump.js"></script>

最初の例では、サーバーは相対パスを評価しますhttp://localhost:8080/myapp/account/js/jump.js

しかし、必要なものは次のとおりです。

http://localhost:8080/myapp/js/jump.js

したがって、ブラウザに 1 つのパスを検索するように通知するだけです。幸運を!

于 2013-09-18T20:31:43.333 に答える