3

私はサーブレットを書いています(特にScalatraを使用)。サーブレットには、すべてのページに含まれる目次に多くのリンクがあります。これらのリンクをアプリケーション ベースに関連付けたいと思います。「/foo」などのリンクを使用すると、サーブレットがルート (localhost:8080/) から提供されるとすべて正常に機能しますが、Jetty/Tomcat から他のサーブレット (localhost:8080/servlet) と一緒に提供すると、リンクサーブレットの外側を指します。

この問題の良い修正は何ですか?

4

1 に答える 1

6

リンクURLの前に、によって取得されたコンテキストパスを含むドメイン相対パスを追加する必要がありますHttpServletRequest#getContextPath()。私はScalaを使用していないので、Scalaをターゲットにした答えを出すことはできませんが、JSPでそれを実行して、画像が健全になるようにする方法は次のとおりです。

<a href="${pageContext.request.contextPath}/servlet">link</a>

現在のコンテキストパスが/foo、の場合、上記はHTMLで次のようになります。

<a href="/foo/servlet">link</a>

または、サーブレットクラス内でJavaを使用してプログラムでHTMLを生成している場合(これは実際には不適切な方法ですが、それは別として):

out.println("<a href=\"" + request.getContextPath() + "/servlet\">link</a>");

別の方法は、すべての相対リンクが相対リンクになるようにHTMLでタグを設定する<base>ことです。詳細については、この回答も参照してください。ブラウザは、サーブレットに転送するサーブレットを呼び出すときに、CSS、画像、リンクなどの相対リソースにアクセス/検索できません。 JSP

于 2011-09-09T21:24:10.147 に答える