投稿日:2003年10月26日 作成鷹の巣

No.13085 servletで、画像だけが正常に表示されません。



servletで、画像だけが正常に表示されません。

No.13085 投稿時間:2003年10月26日(Sun) 22:10 投稿者名:takeshi URL:

またお世話になります。

Linux(Redhat9.0) + tomcat4-4.1.18 + apache2.0.47 + JAVA(j2sdk1.4.02)
でJAVAを実行しましたが、画像だけが正常に表示されませんでした。
(・画像は、classesフォルダに置いてあります。
・下記にソースがありますが、「てすとてすとてすと」は正常に表示されます)
windowsのIE6.0でwebページを確認しました。
(ちなみに linux で http://localhost/hogehoge/HelloWorld2
で実行しても表示されません)
過去スレッドに<img src="/aaa.jpg">とすればOKとありましたので、
試しましたが、不可能でした。


下記に現象を箇条書きします
・画像のみ表示されない
(1) http://サーバー名/hogehoge/HelloWorld2
(2) http://localhost/hogehoge/HelloWorld2
・下記で画像ファイルを参照
(1) http://サーバー名/hogehoge/aaa.jpg 参照不可(ファイルなし)
(2) file:///var/tomcat/webapps/hogehoge/WEB-INF/classes/aaa.jpg
では表示可能
だったので、
<img src="file:///var/tomcat/webapps/hogehoge/WEB-INF/classes/aaa.jpg">
と試しましたが画像は表示されませんでした(あたりまえですね)

下記にソースを記述します。
-------------------------------------------------------------
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorld2 extends HttpServlet{

public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{

int data;
BufferedInputStream in;

res.setContentType("text/html;charset=Shift-JIS");
PrintWriter out = res.getWriter();

out.println("<html>\n<head>\n<title>HelloWorld!</title>\n</head>\n<body>\n");
out.println("<p>Hello World.</p>\n");
out.println("<p>てすとてすとてすと</p>\n");
out.println("<img src=\"/aaa.jpg\">\n");
out.println("<img src=\"/bbb.gif\">\n");
out.println("</body>\n</html>\n");
out.close();
}
}
-------------------------------------------------------------
となっています。


記載不足の情報や、何か不備にお気づきの方がおられましたら、
お教え下さい。
よろしくお願い致します。


マッピング時のパスに注意してください。

No.13103 投稿時間:2003年10月28日(Tue) 00:47 投稿者名:帯鯖 URL:

帯鯖@名古屋です。

下記でよろしかったですか?

・ Web アプリ名 … hogehoge
・ サーブレット(マッピング名) … HelloWorld2
・ ソースコード … HelloWorld2.java
・ 表示したい画像名 … aaa.jpg

このとき、開発環境におけるファイル配置は、例えば図1のようにします。
※ポイントは、WEB-INF より上位のディレクトリに画像を配置することです。

図1.開発環境

/hogehoge

├ /images
│ │
│ ├ aaa.jpg

├ /WEB-INF
│ │
│ ├ web.xml
│ │
│ └ /classes
│ │
│ ├ HelloWorld2.java (/hogehoge/HelloWorld2 にマッピングする)


HelloWorld2 クラスを /hogehoge/HelloWorld2 へマッピングしたのですから、
そのクラスから参照する画像などは、図2のように、マッピングされた仮想パスからの相対パスになります。


図2.外部から参照する場合の仮想パス構造

/hogehoge

├ HelloWorld2 (← マッピングされた場所)

├ /images
│ │
│ ├ aaa.jpg

= これより下の構造は、クライアントには見えない(見せない!)


画像専用ディレクトリを作った上の図例では、HelloWorld2 からは <img src="./images/aaa.jpg"> のように読み出すことになりますね。
画像ディレクトリの作成は好みによりますので、そのパスについては、適当に読み替えてください。

/WEB-INF/classes ディレクトリは、JSP でない、サーブレットのコードやクラス(パッケージディレクトリを含む)を置く場所です。
/WEB-INF/classes 配下に画像等を置くことは、マッピングの目的に反し、セキュリティ面において逆効果です。


> またお世話になります。
>
> Linux(Redhat9.0) + tomcat4-4.1.18 + apache2.0.47 + JAVA(j2sdk1.4.02)
> でJAVAを実行しましたが、画像だけが正常に表示されませんでした。
> (・画像は、classesフォルダに置いてあります。
> ・下記にソースがありますが、「てすとてすとてすと」は正常に表示されます)
> windowsのIE6.0でwebページを確認しました。
> (ちなみに linux で http://localhost/hogehoge/HelloWorld2
> で実行しても表示されません)
> 過去スレッドに<img src="/aaa.jpg">とすればOKとありましたので、
> 試しましたが、不可能でした。
>
>
> 下記に現象を箇条書きします
> ・画像のみ表示されない
> (1) http://サーバー名/hogehoge/HelloWorld2
> (2) http://localhost/hogehoge/HelloWorld2
> ・下記で画像ファイルを参照
> (1) http://サーバー名/hogehoge/aaa.jpg 参照不可(ファイルなし)
> (2) file:///var/tomcat/webapps/hogehoge/WEB-INF/classes/aaa.jpg
> では表示可能
> だったので、
> <img src="file:///var/tomcat/webapps/hogehoge/WEB-INF/classes/aaa.jpg">
> と試しましたが画像は表示されませんでした(あたりまえですね)
>
> 下記にソースを記述します。
> -------------------------------------------------------------
> import java.io.*;
> import javax.servlet.*;
> import javax.servlet.http.*;
>
> public class HelloWorld2 extends HttpServlet{
>
> public void doGet(HttpServletRequest req, HttpServletResponse res)
> throws ServletException, IOException
> {
>
> int data;
> BufferedInputStream in;
>
> res.setContentType("text/html;charset=Shift-JIS");
> PrintWriter out = res.getWriter();
>
> out.println("<html>\n<head>\n<title>HelloWorld!</title>\n</head>\n<body>\n");
> out.println("<p>Hello World.</p>\n");
> out.println("<p>てすとてすとてすと</p>\n");
> out.println("<img src=\"/aaa.jpg\">\n");
> out.println("<img src=\"/bbb.gif\">\n");
> out.println("</body>\n</html>\n");
> out.close();
> }
> }
> -------------------------------------------------------------
> となっています。
>
>
> 記載不足の情報や、何か不備にお気づきの方がおられましたら、
> お教え下さい。
> よろしくお願い致します。


早速やってみて、動きました!

No.13280 投稿時間:2003年11月03日(Mon) 23:27 投稿者名:takeshi URL:

お返事が遅くなり、申し訳御座いません。

早速やってみました。 動きました!
(分かりやすい図解ありがとう御座います)

私はWEB-INF\classesフォルダに、 *****.class と、 #####.jpgファイルを
同じclassesフォルダに入れて実行していました。
何回やっても画像が表示されないわけですね。

また、これで先に進めそうです。
ご協力ありがとう御座いました。

> 帯鯖@名古屋です。
質問を2回投げて、2回とも助けられましたね
ご指導ありがとう御座います。


|目次|掲示板|過去ログ目次|▲頁先頭|