実現したいこと
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
回答1件
あなたの回答
tips
プレビュー