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

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

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

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

1回答

214閲覧

JSPでCSSや画像などを読み込めない

char_c

総合スコア1

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2024/03/08 02:26

編集2024/03/08 02:29

実現したいこと

Eclipseの仮想環境内で、HTML教本にあったサンプルサイトをサーブレットに置き換えて作成しています。

メタタグ等を含んだベースとなるjspに
・ヘッダーパーツ.jsp
・メインコンテンツ.jsp
・フッターパーツ.jsp
を読み込ませ、適宜内容を入れ替えるようにしたいと思っています。

発生している問題・分からないこと

ファイルの切り替えや出力内容の切り替えは実現できたのですが、
jsp内で、imgタグやlinkタグでcssの読み込みが失敗します。

ディレクトリ構造
/src
├ /main
│ └ /java
│ │ └ サーブレットなど
│ └ /webapp
│ ├ /images
│ │ └logo.svg など画像ファイル全般
│ └/WEB-INF
│ └ /component
│ │ ├ base.jsp
│ │ ├ header.jsp
│ │ └ footer.jsp
│ └ indexjsp

下記ソースコードでは
base.jspに
header.jsp
index.jsp
footer.jsp
を読ませているのですが、いずれのjspもimgの画像が出力できません(header.jsp L4当たりの<img class="mt-5 mx-auto" src="images/logo.svg" alt="サイトロゴ" />など)

・何が間違っているのか
・解決方法(そもそもこの構造自体が問題であればおすすめ構成の提案など)
をご教授いただきたいです

該当のソースコード

IndexServlet.java

1package servlet; 2import java.io.IOException; 3 4import javax.servlet.ServletException; 5import javax.servlet.annotation.WebServlet; 6import javax.servlet.http.HttpServlet; 7import javax.servlet.http.HttpServletRequest; 8import javax.servlet.http.HttpServletResponse; 9 10import util.PageConfig; 11 12/** 13 * Servlet implementation class index 14 */ 15@WebServlet("/") 16public class IndexServlet extends HttpServlet { 17 private static final long serialVersionUID = 1L; 18 19 /** 20 * @see HttpServlet#HttpServlet() 21 */ 22 public IndexServlet() { 23 super(); 24 // TODO Auto-generated constructor stub 25 } 26 27 /** 28 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 29 */ 30 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 31 request.setCharacterEncoding("UTF-8"); 32 System.out.println("include Check"); // コンソールテスト 33 34 PageConfig conf = new PageConfig.Builder() 35 .jspName("/WEB-INF/index") 36 .pageTitle("- TOP -") 37 .pageHeroImage("画像.jpg") 38 .pageInfo("メッセージ") 39 .build(); 40 41 request.setAttribute("config", conf); 42 43 // 出力 44 request.getRequestDispatcher("/WEB-INF/component/base.jsp").forward(request, response); 45 } 46 47} 48

base.jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2<!DOCTYPE html> 3<html> 4<head> 5 <meta charset="UTF-8"> 6 <script src="https://cdn.tailwindcss.com"></script> 7 <link href="css/baseStyle.css" rel="styleseet"></link> 8 <title>SITE NAME ${config.pageTitle}</title> 9</head> 10<body> 11 12 <jsp:include page="/WEB-INF/component/header.jsp" > 13 <jsp:param name="config" value="${config}" /> 14 </jsp:include> 15 16 <jsp:include page="${config.jspName}.jsp"/> 17 18 <jsp:include page="footer.jsp" /> 19</body>

header.jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2<header class="mb-16"> 3 <div class="bg-repeat-x bg-center h-2" style="background-image: url('<%= request.getContextPath() %>/images/stripe.png')"></div> 4 <a href="/index"><img class="mt-5 mx-auto" src="images/logo.svg" alt="サイトロゴ" /></a> 5 <ul class="mt-5 mb-5 text-center"> 6 <li class="inline"><a href="<%= request.getContextPath() %>/">ホーム</a></li> 7 <li class="inline ml-5"><a href="#news">お知らせ</a></li> 8 <li class="inline ml-5"><a href="#information">店舗情報</a></li> 9 <li class="inline ml-5"><a href="<%= request.getContextPath() %>/access">アクセス</a></li class="inline"> 10 <li class="inline ml-5"><a href="<%= request.getContextPath() %>/menu">メニュー</a></li> 11 <li class="inline ml-5"><a href="<%= request.getContextPath() %>/contact">お問い合わせ</a></li class="inline"> 12 </ul> 13 14 <div class="bg-center bg-cover h-80 flex items-center justify-center mb-5 bg-slate-900" style="background-image: url('images/${config.pageHeroImage}')"> 15 <h1 class="text-4xl font-bold text-center text-white">${config.pageInfo}</h1> 16 </div> 17</header>

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

Eclipseのキャッシュ関連がヒットしたので下記を試しましたが解決しませんでした。

  • 該当サーバー>クリーン
  • プロジェクト>クリーン>すべてのプロジェクトをクリーン
  • eclipse.exe-clean.cmdの実行
  • 別PCでプロジェクトをインポートして試す

ディレクトリの指定が間違えていて読み込めていないのかなと思い、開発者ツール内のネットワークを確認し、該当ファイルが受け取れているか確認しました。
以下結果です

Request URL:http://localhost:8080/cafe01/images/logo.svg
Request Method:GET
Status Code:200 OK
Remote Address:[::1]:8080
Referrer Policy:strict-origin-when-cross-origin

Connection:keep-alive
Content-Length:4076
Content-Type:text/html;charset=UTF-8
Date:Fri, 08 Mar 2024 01:33:53 GMT
Keep-Alive:timeout=20


/WEB-INF/componentから見えていないのかと思い以下のディレクトリにjspを作成しimgタグのみを描いたシンプルなコードを試しましたが、出力されませんでした
・/WEB-INF下
・/webapp直下

補足

以下実行環境です
IDE:Eclipse(Version: 2023-12 4.30.0)
仮想環境:Tomcat9+java17
URL:http://localhost:8080/アプリ名
ブラウザ:chrome 120.0.6099.225

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

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

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

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

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

YT0014

2024/03/09 01:53

http://localhost:8080/cafe01/images/logo.svg をブラウザで表示した場合、正常に表示されるか、ご確認されては如何でしょう。 また、画像を別タブで表示やソース表示などを利用して、画像やCSSの、実際に要求しているURLも、ご確認されると良いかもしれません。
YT0014

2024/03/11 08:14

>これに限らず画像ファイルを直接開くとbase.jspの内容が出力されます ということは、その画像の指定が、base.jspの表示になるような設定が存在しているということです 例えば、.htaccess で、アプリ以下の指定は、全て、base.jspへredirectするとか もし、http://localhost:8080/cafe01/ で、base.jsp を表示するように設定されているのなら、その設定もご提示ください
char_c

2024/03/12 01:52

解説ありがとうございます。 アプリケーションやサーバーの設定でのリダイレクト処理に引っかかっているのでは、というご指摘のものだと解釈していますが間違いないでしょうか? ざっと確認できるもので web.xml > 未作成 context.xml ``` <?xml version="1.0" encoding="UTF-8"?> <Context reloadable="true"></Context> ``` となります。基本動的Webプロジェクトの作成時デフォルト設定のまま進めています Eclipceの設定に慣れておらず、見当違いなものを出しているかもしれません。よろしければ確認の方法などをご教授いただけますでしょうか
YT0014

2024/03/12 03:29

@WebServlet("/*")とかになっている可能性がありますので、そちらも。 また、index.jsp は、表示できるのでしょうか? どちらにしろ、想定していない内部遷移が原因のようなので、可能性があるものを調べていくしかないかと。 例えば、IndexServlet.javaの@WebServletをコメントアウトして、base.jspに遷移しないようにし、遷移元を探るとか。
char_c

2024/03/12 05:14 編集

>@WebServlet("/*")とかになっている可能性がありますので、そちらも。 確認&動作チェックのため IndexServletのアノテーションを@WebServlet("/")から@WebServlet("/index")に切り替えたら画像が出力されました!!ありがとうございます!! 質問ばかりで申し訳ないのですが、後学のためにお聞きしたいのですが ・なぜこのような動きになった、修正できたのか見当は付きますでしょうか?パス指定が何かと競合したのかなー程度の認識です ・継続して@WebServlet("/")とするとページは出るけども画像が出力されません。TOPページなどでhttps://hogehoge.jp/など直下にTOPページを出したい場合どう指定すればいいでしょうか
char_c

2024/03/12 05:08

また重ねて申し訳ないのですが、ベストアンサーに選びたいので回答欄へ記載いただけますでしょうか?
YT0014

2024/03/12 15:03

解決されたようで何よりです。 現象からすると、URLパターンの解釈が、どこかのバージョンで変わっているのかもしれません。 申し訳ございませんが、正確な情報を持っておりません。 その為、"/" をWebServletアノテーションで正しく指定する方法もわかりません。 なお、回答に関してですが、お手数ですが、自己解決でお願いします。回答未満の情報ですし、ベストアンサーを頂戴しても、大してメリットもないので。
char_c

2024/03/12 15:48

了解しました ここまで質問等丁寧に対応していただきありがとうございました。 最後の質問に関しては質問の本筋と少し外れてしまいますので、当質問は自己解決メモを残し閉じさせていただきます。 重ねてお礼を申し上げます。
guest

回答1

0

自己解決

調査の過程でIndexServlet.java内のWebアノテーションを

@WebServlet("/")

から

@WebServlet("/index")

へ変更することで画像が出力されました

投稿2024/03/12 15:56

char_c

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問