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

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

ただいまの
回答率

88.77%

画像の表示について

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,277

terashamo

score 20

前提・実現したいこと

ローカルに保存してある画像を表示させたい。
(ローカルどころか、何故かプロジェクト内の画像すら表示できません)

該当のソースコード

<img src="${path}">
<img src="../img/001.jpg">
<img src="${pageContext.request.contextPath}/img/001.jpg">

試したこと

上記の1行目のpathの中身は
/Volumes/USBROBO/ファイル/画像/001.jpgで、
http://localhost:8080/Volumes/USBROBO/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB/%E7%94%BB%E5%83%8F/001.jpg 404 (Not Found)
というエラーが出ています。(検証のコンソールにて)
日本語混じりorローカルを見ているから表示されないのかと思い
001.jpgをWebContent/imgに移動させ、ひとまず画像表示だけしてみようと
上記の2,3行目の方法で表示を試みたのですが、ダメでした。
(こちらはエラーは出ていません)

補足情報(言語/FW/ツール等のバージョンなど)

eclipseで開発しています。
Java(Servlet/jsp)です。

ものすごく初歩的なことで申し訳ないのですが・・・
よろしくお願いいたします。

ここから追記です。
エラーが出ていました...

java.lang.ClassNotFoundException: jp.co.files.command.null
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1333)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1167)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at jp.co.files.servlet.Controller.doPost(Controller.java:64)
    at jp.co.files.servlet.Controller.doGet(Controller.java:40)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at jp.co.files.filter.EncodeingFilter.doFilter(EncodeingFilter.java:25)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:217)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

書籍に載っていたコマンドパターン?を真似して作成しているのですが、それが悪さしているのでしょうか...?

@WebServlet({ "/" })
public class Controller extends HttpServlet {
    private static final long serialVersionUID = 1L;

    private HashMap<String, String> commands;

    private String CommandsTable[][] = {

            { "top", "Top" }, { "menu", "Menu" }, { "process", "Process" }, { "lib", "Lib" }

    };

    public void init() throws ServletException {

        commands = new HashMap<String, String>();

        for (int i = 0; i < CommandsTable.length; i++) {
            commands.put(CommandsTable[i][0], CommandsTable[i][1]);
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String action = request.getRequestURI().split("/")[request.getRequestURI().split("/").length - 2];

        String methodName = request.getRequestURI().split("/")[request.getRequestURI().split("/").length - 1];

        if (methodName.equals("booker")) {

            action = "top";

        }
        String className = commands.get(action);

        Command command;

        String url;

        try {

            command = (Command) (Class.forName("jp.co.files.command." + className).newInstance());

            url = command.execute(request, methodName);

            request.getRequestDispatcher(url).forward(request, response);

        } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
            e.printStackTrace();
        }

    }

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • masaya_ohashi

    2016/06/20 09:16

    WebContent/imgに入っているなら三行目で動きそうなものですが…「ダメでした。 (こちらはエラーは出ていません)」というのはどういう状況ですか?

    キャンセル

  • coco_bauer

    2016/06/20 12:03

    質問のHTMLがあるフォルダーの親フォルダーにimgフォルダーを作り、その中に001.jpgを置いてください。そうすれば、2行目で画像が表示さるかと思います。 「Java(Servlet/jsp)です」と書かれていますが、この件にjavaは関係していないように思われます。

    キャンセル

  • terashamo

    2016/06/20 22:41

    ありがとうございます
    >masaya_ohashiさん
    検証のコンソールでエラーが出ていない、という状況です。
    ただ、よく見てみるとeclipseのコンソールでエラーが出ていました...
    質問に追記しておきます。
    >coco_bauerさん
    /WebContent/jsp/view.jspで画像を表示させたいので
    /WebContent/img/001.jpgで、よろしいでしょうか?
    一応今はこの構成になっているのですが...

    キャンセル

回答 1

0

「java.lang.ClassNotFoundException: jp.co.files.command.null」より
「String className = commands.get(action)」の結果がnullになっていますね。
その前の「String action」が何を表しているか確認して下さい。
"top","menu","process","lib"以外になっていませんか。
(requestから取得する位置に誤りはありませんか。)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.77%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る