- - PR -
コンテキストパスと相対パス
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-01-02 06:47
Webアプリケーション開発においての、JSP(またはHTML)中の
画像やスクリプトファイルを示すパスについて質問です。 (ちょっと長いですが・・・) 例えばあるWebアプリケーションを /abc というコンテキストパスに 割り当てたとします。(URL: www.example.com/abc) このWebアプリの index.jsp (URL: www.example.com/abc/index.jsp)の 中に <img src="images/photo.jpg"> で示される画像タグがあると、 これはURLでいうと www.example.com/abc/images/photo.jpg を 参照します。 このWebアプリに、全てのJSPページで読み込まれる header.jsp があるとします。その中に <img src="images/logo.gif"> という 画像タグがあります。もし前述の index.jsp にこの header.jsp が 読み込まれれば、www.example.com/abc/images/logo.gif に 位置する画像ファイルを参照できます。 しかしながら、/abc/next-level/index.jsp という異なるディレクトリに 属するJSPファイルに header.jsp が読み込まれると、画像のURLは www.example.com/abc/next-level/images/logo.gif となり 正しいパスを表しておらず、画像は表示されません。 この問題は、<img src="/abc/images/logo.gif"> というように 絶対パスを用いて画像ファイルのパスを示せば解決できます。 がしかし、この方法ではコンテキストパスの変更に対応できず、 もしこのWebアプリが /def というコンテキストパスに設定 されてしまうと画像は表示されません。つまりWebアプリに ポータビリティがなくなってしまいます。 実際は画像パスだけでなく、JavaScript 内での画像を含めた ファイルパスやCSSファイルの指定などがあると思いますが、 何かよい解決方法はないものでしょうか? | ||||
|
投稿日時: 2003-01-03 08:34
中込です。
| ||||
|
投稿日時: 2003-01-03 19:11
実は上記と同様の処理をTablibにまとめたものを使って、これまで 対処してきました。 全てのページの全てのパスに適用するのは大変で、時々忘れることも ありましたので、スマートなやり方ではない気がしていました。 でも中込さんが挙げてくれたこともあり、こういう方法しかないのかな とも思えてきました。 この方法が一般的な解となるのでしょうか? | ||||
|
投稿日時: 2003-01-04 18:31
<base href= ..> を定義して、画像は固定パスにするのはどうでしょうか
| ||||
|
投稿日時: 2003-01-10 09:25
レスが遅くなりましたが、<base href=..>での定義は相対パスに適用されるので、 残念ながら意味をなさないですね。 他のJSPをincludeしないJSPであれば、<base href=コンテキストパス>を 定義して全て相対パスで画像ファイル等を指定するのが最適解となり得そうですが。 Strutsも <html:base /> というTaglibで、これを実現しています。 | ||||
|
投稿日時: 2003-01-10 11:23
><base href=..>での定義は相対パスに適用されるので、
え! 絶対パスにも適応されませんか? 今まで仕事で作ったほとんどの CGI/JSPなどでは適応されてますが。。。 なぜだろう | ||||
|
投稿日時: 2003-01-13 03:03
簡単にしかテストしていないので断言はできませんが、 HTMLの仕様的には相対パスに適用されるもののようです。 http://www.w3.org/TR/html4/struct/links.html#edef-BASE | ||||
|
投稿日時: 2003-01-13 10:54
Function さん、こんにちは。
>HTMLの仕様的には相対パスに適用されるもののようです。 そうなんですか、ということは絶対パスに対して base href が適応されるのは、IE, Netscape の独自仕様んんですね ところで、 <!-- BBCode Start --><TABLE BORDER="0" ALIGN="CENTER" WIDTH="90%" CELLSPACING="0" CELLPADDING="0"><TR><TD WIDTH="5%" NOWRAP><FONT SIZE="-1">コード:</font></td><TD WIDTH="95%"><HR SIZE="1" WIDTH="100%"></td></tr><TR><TD COLSPAN="2"><PRE> <html><head> <base href="<%=request.getContextPath()%>"> ... </head><body> .... <img src="./images/photo.jpg"> </pre><HR SIZE="1" WIDTH="100%"></td></tr></table><!-- BBCode End --> では ダメなんでしょうか? 相対パスの images/photo.jpg は JSP(HTML)がどのデイレクトリーにあっても request.getContextPath() + '/images/photo.jpg' になると思うのですが ? [ メッセージ編集済み 編集者: yuu 編集日時 2003-01-13 14:01 ] | ||||
