質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

1回答

4429閲覧

画像が表示できない

claude555

総合スコア7

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2016/02/16 03:21

Eclipse JunoでApache Tomcat v7.0 新規ローカルーサーバーを使ってスケジュール表を作成しています。
そこで、アイコンの画像を表示させたいのですが、上手くいきません。
下記が画像の位置です。
/schedule
|
|-/src
| |
| |-MonthView4.java
| |
| |-/img
| |
| |-aaa.png
|
|-/build
| |
| |-/classes
| |
| |-MonthView4.class
|
|-/WebContent
| |
| |-/WEB-INF
| |
| |-web.xml

Exlipseで操作をしているので、MonthView4.javaから実行しています。
しかし、実行しても画像が表示されなかったです。
下記にソースを表示します。
初心者で情報不足ではありますが、何か不明な点がありましたらお教えください。
よろしくお願いいたします。
※ソースはhttp://www.javadrive.jp/servlet/schedule/index6.html様のを参考に開発しています。


import java.io.;
import javax.servlet.
;
import javax.servlet.http.*;
import java.util.Calendar;

public class MonthView4 extends HttpServlet{

public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{ res.setContentType("text/html;charset=Shift_Jis"); PrintWriter out = res.getWriter(); int[] calendarDay; int count; int year; int month; int day = 1; calendarDay = new int[42]; /* 最大で7日×6週 */ count = 0; String param = req.getParameter("YEAR"); if (param == null || param.length() == 0){ year = -999; }else{ try{ year = Integer.parseInt(param); }catch (NumberFormatException e){ year = -999; } } param = req.getParameter("MONTH"); if (param == null || param.length() == 0){ month = -999; }else{ try{ month = Integer.parseInt(param); }catch (NumberFormatException e){ month = -999; } } /* パラメータが指定されていない場合は本日の日付を設定 */ if (year == -999 || month == -999){ Calendar calendar = Calendar.getInstance(); year = calendar.get(Calendar.YEAR); month = calendar.get(Calendar.MONTH); day = calendar.get(Calendar.DATE); }else{ if (month == 12){ month = 0; year++; } if (month == -1){ month = 11; year--; } } StringBuffer sb = new StringBuffer(); sb.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0.1//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">"); sb.append("<html lang=\"ja\">"); sb.append("<head>"); sb.append("<meta http-equiv=\"Content-Type\" Content=\"text/html;charset=Shift_JIS\">"); sb.append("<title>スケジュール管理</title>"); sb.append("<style>"); sb.append("table{border:1px solid #a9a9a9;width:90%;padding:0px;margin:0px;border-collapse:collapse;}"); sb.append("td{width:12%;border-top:1px solid #a9a9a9;border-left:1px solid #a9a9a9;vertical-align:top;margin:0px;padding:2px;}"); sb.append("td.week{background-color:#f0f8ff;text-align:center;}"); sb.append("td.day{background-color:#f5f5f5;text-align:right;font-size:0.75em;}"); sb.append("td.otherday{background-color:#f5f5f5;color:#d3d3d3;text-align:right;font-size:0.75em;}"); sb.append("td.sche{background-color:#fffffff;text-align:left;height:80px;}"); sb.append("img{border:0px;}"); sb.append("span.small{font-size:0.75em;}"); sb.append("</style>"); sb.append("</head>"); sb.append("<body>"); /* 日付データを配列に格納 */ count = setDateArray(year, month, day, calendarDay, count); /* 年月のリンク作成 */ sb.append(createMonthLink(year, month)); sb.append("<table>"); sb.append("<tr><td class=\"week\">日</td><td class=\"week\">月</td><td class=\"week\">火</td><td class=\"week\">水</td><td class=\"week\">木</td><td class=\"week\">金</td><td class=\"week\">土</td></tr>"); int weekCount = count / 7; for (int i = 0 ; i < weekCount ; i++){ /* スケジュールの日付画面を作成する */ sb.append("<tr>"); for (int j = i * 7 ; j < i * 7 + 7 ; j++){ if (calendarDay[j] > 35){ sb.append("<td class=\"otherday\">"); sb.append(calendarDay[j] - 35); }else{ sb.append("<td class=\"day\">"); sb.append(calendarDay[j]); } sb.append("</td>"); } sb.append("</tr>"); /* カレンダーのスケジュール登録画面を作成する */ sb.append(createScheduleStr(year, month, i * 7, calendarDay)); } sb.append("</table>"); sb.append("</body>"); sb.append("</html>"); out.println(new String(sb)); } /* スケジュール登録へのリンクを設定する */ protected String createScheduleStr(int year, int month, int startDayNo, int[] calendarDay){ StringBuffer sb = new StringBuffer(); sb.append("<tr>"); for (int i = startDayNo ; i < startDayNo + 7 ; i++){ if (calendarDay[i] > 35){ /* 前月及び翌月の箇所にはアイコンは表示しない */ sb.append("<td class=\"sche\"></td>"); }else{ sb.append("<td class=\"sche\">"); sb.append("<a href=\"/schedule/NewSchedule"); /* パラメータの作成 */ sb.append("?YEAR="); sb.append(year); sb.append("&MONTH="); sb.append(month); sb.append("&DAY="); sb.append(calendarDay[i]); sb.append("\">"); sb.append("<img src=\"./img/aaa.png\" width=\"14\" height=\"16\">"); sb.append("</a>"); sb.append("</td>"); } sb.append("</td>"); } sb.append("</tr>"); return (new String(sb)); } protected int setDateArray(int year, int month, int day, int[] calendarDay, int count){ Calendar calendar = Calendar.getInstance(); /* 今月が何曜日から開始されているか確認する */ calendar.set(year, month, 1); int startWeek = calendar.get(Calendar.DAY_OF_WEEK); System.out.println("今月の曜日は" + startWeek + "から"); /* 先月が何日までだったかを確認する */ calendar.set(year, month, 0); int beforeMonthlastDay = calendar.get(Calendar.DATE); System.out.println("先月は" + beforeMonthlastDay + "日まで"); /* 今月が何日までかを確認する */ calendar.set(year, month + 1, 0); int thisMonthlastDay = calendar.get(Calendar.DATE); System.out.println("今月は" + thisMonthlastDay + "日まで\r\n"); /* 先月分の日付を格納する */ for (int i = startWeek - 2 ; i >= 0 ; i--){ calendarDay[count++] = beforeMonthlastDay - i + 35; } /* 今月分の日付を格納する */ for (int i = 1 ; i <= thisMonthlastDay ; i++){ calendarDay[count++] = i; } /* 翌月分の日付を格納する */ int nextMonthDay = 1; while (count % 7 != 0){ calendarDay[count++] = 35 + nextMonthDay++; } return count; } protected String createMonthLink(int year, int month){ StringBuffer sb = new StringBuffer(); sb.append("<p>"); sb.append("<a href=\"/schedule/MonthView?YEAR="); sb.append(year); sb.append("&MONTH="); sb.append(month - 1); sb.append("\"><span class=\"small\">前月</span></a>&nbsp;&nbsp;"); sb.append(year); sb.append("年"); sb.append(month + 1); sb.append("月&nbsp;&nbsp;"); sb.append("<a href=\"/schedule/MonthView?YEAR="); sb.append(year); sb.append("&MONTH="); sb.append(month + 1); sb.append("\"><span class=\"small\">翌月</span></a>"); sb.append("</p>"); return (new String(sb)); }

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

本当に、src フォルダの下に img フォルダを作ってます?javadrive のサンプルがーそこに置きなさいって書いてありますか。

webcontent の下に、置くと、
./img/xxx.png か、/img/xxx.png か、 ../img/xxx.png で画像が取れるはずです。

サーブレットはファイルを置いた場所で実行されますが、作業場所は別のとこに割り当てられます。サーブレットファイル配置場所から相対パスで辿ることもできなくはありませんが。

サーブレットで簡単なhtmlなら出力してもいいけど、複雑なのはjspで記述した方がいいですね。
javadrive のサンプルも、1番目くらいはサーブレットだけでなってるかもしれないけど、進むに連れ jspに処理を移譲する書き方になってきます。あなたの今のコードはまさに、サーブレットに書いてるhtmlをーjspにやらせるようにする段階にーきています。

投稿2016/02/16 03:59

ipadcaron

総合スコア1693

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

claude555

2016/02/16 05:14

webcontentの下に置いたら ./img/xxx.pngで画像が取れました!! 丁寧な解説本当にありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問