ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
JSP タグの全体像
JSP には大きく 5 種類のタグ・記述方法があります:
| 種類 | 記法 | 用途 |
|---|---|---|
| スクリプトレット | <% Java コード %> | Java 文を直接実行 |
| 式 | <%= 式 %> | 出力 |
| 宣言 | <%! メンバー %> | クラスメンバーの定義 |
| ディレクティブ | <%@ page %> など | ページ全体の設定 |
| アクション | <jsp:include /> など | 標準動作の呼び出し |
| JSTL | <c:if> など | 共通ロジックタグ |
| EL | ${user.name} | 式言語による出力 |
1. スクリプトレット系
<%@ page contentType="text/html; charset=UTF-8" %>
<%-- JSP コメント (出力されない) --%>
<%! // 宣言: クラスメンバ・メソッド
private int counter = 0;
public String hello() { return "Hi"; }
%>
<% // スクリプトレット: 直接 Java 文を書く
String user = (String) request.getAttribute("user");
int n = 10;
for (int i = 0; i < n; i++) {
%>
<p>行 <%= i %></p>
<%
}
%>
<%-- 式: 出力 (System.out ではなく out に書き出す) --%>
<p>こんにちは <%= user %> さん</p>
注意: スクリプトレットはメンテ性が低くテンプレートとロジックが混ざるため、現代の JSP ではJSTL + EL に置き換えるのが定石です。
2. ディレクティブ
<%-- page ディレクティブ: ページ全体の設定 --%>
<%@ page contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
language="java"
session="true"
errorPage="/error.jsp"
import="java.util.*, com.example.User" %>
<%-- include ディレクティブ: 静的インクルード (コンパイル時に展開) --%>
<%@ include file="/WEB-INF/jsp/header.jsp" %>
<%-- taglib ディレクティブ: タグライブラリの読み込み --%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
| ディレクティブ | 用途 | 主な属性 |
|---|---|---|
<%@ page %> | ページ設定 | contentType, pageEncoding, import, session, errorPage |
<%@ include %> | 静的インクルード | file |
<%@ taglib %> | タグライブラリ | uri, prefix |
3. 標準アクションタグ
<%-- 動的インクルード (リクエスト時に挿入) --%>
<jsp:include page="/WEB-INF/jsp/parts/menu.jsp">
<jsp:param name="active" value="home" />
</jsp:include>
<%-- フォワード (制御を別ページへ) --%>
<jsp:forward page="/error.jsp">
<jsp:param name="reason" value="auth" />
</jsp:forward>
<%-- JavaBean の利用 --%>
<jsp:useBean id="user" class="com.example.User" scope="session" />
<jsp:setProperty name="user" property="name" value="Taro" />
<jsp:setProperty name="user" property="*" /> <%-- リクエスト全パラメータをセット --%>
<jsp:getProperty name="user" property="name" />
静的 include と動的 include の違い:
<%@ include %> | <jsp:include> | |
|---|---|---|
| タイミング | コンパイル時 | リクエスト時 |
| 変数の共有 | 共有される | 独立 |
| 動的な内容変更 | 不可 (再コンパイル必要) | 可能 |
| パフォーマンス | 速い | やや遅い |
4. JSTL (JSP Standard Tag Library)
JSTL は条件分岐・ループ・国際化等を提供する標準タグライブラリです。主に c: (core)、 fmt: (i18n)、 fn: (関数)、 x: (XML)、 sql: の 5 つ。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%-- 変数 --%>
<c:set var="userName" value="Taro" scope="session" />
<c:remove var="oldValue" />
<%-- 出力 (XSS 安全な escape つき) --%>
<c:out value="${user.name}" default="ゲスト" escapeXml="true" />
<%-- 条件分岐 --%>
<c:if test="${user.role == 'admin'}">
<p>管理者メニュー</p>
</c:if>
<c:choose>
<c:when test="${score >= 80}">A</c:when>
<c:when test="${score >= 60}">B</c:when>
<c:otherwise>C</c:otherwise>
</c:choose>
<%-- ループ --%>
<c:forEach var="item" items="${list}" varStatus="st">
<p>${st.index}: ${item.name}</p>
</c:forEach>
<c:forEach var="i" begin="1" end="5" step="1">
<span>${i}</span>
</c:forEach>
<%-- URL --%>
<a href="<c:url value='/users/${user.id}' />">プロフィール</a>
<%-- リダイレクト --%>
<c:redirect url="/login" />
<%-- 国際化・フォーマット --%>
<fmt:formatDate value="${now}" pattern="yyyy/MM/dd" />
<fmt:formatNumber value="${price}" type="currency" />
<%-- 文字列関数 --%>
<c:if test="${fn:length(name) > 0}">
${fn:toUpperCase(name)}
</c:if>
5. EL (Expression Language)
JSP 2.0 から導入された式言語。Java を書かずに値を取り出せます。
<%-- 単純な取り出し (リクエスト/セッション/アプリスコープを自動探索) --%>
${user.name} <%-- user.getName() を呼ぶ --%>
${list[0]} <%-- インデックスアクセス --%>
${map['key']} <%-- マップ --%>
<%-- 算術・比較 --%>
${a + b}
${age >= 20}
${empty list} <%-- null / 空文字 / 空配列 が true --%>
<%-- 暗黙オブジェクト --%>
${pageContext.request.contextPath}
${param.id} <%-- request.getParameter("id") --%>
${header['User-Agent']}
${cookie.JSESSIONID.value}
<%-- 関数呼び出し (taglib functions) --%>
${fn:length(items)}
${fn:contains(name, 'taro')}
JSP を JSTL + EL ベースに書き換える例
<%-- ❌ 古いスクリプトレット混在 --%>
<%
List<User> users = (List<User>) request.getAttribute("users");
for (User u : users) {
if (u.isActive()) {
%>
<p><%= u.getName() %></p>
<%
}
}
%>
<%-- ✅ JSTL + EL でロジックレスに --%>
<c:forEach var="u" items="${users}">
<c:if test="${u.active}">
<p><c:out value="${u.name}" /></p>
</c:if>
</c:forEach>
FAQ
Q: JSP はもう古い?
A: 新規プロジェクトでは Thymeleaf や API + SPA (React/Vue) が主流。ただし JSP は Jakarta EE 標準であり、業務システムでは今も現役です。
Q: スクリプトレットを使わない方が良い理由は?
A: テストしにくい・XSS リスク・テンプレートとロジックが混在しメンテ困難。JSTL + EL を徹底するか、Servlet で値を組み立てて JSP は表示のみに専念させます。
Q: JSTL の uri は java.sun.com のままで良い?
A: Jakarta EE 9 以降は jakarta.tags.core に変わっています。Tomcat 10+ では新 URI を使ってください。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
同階層のページ
- タグ一覧
- コンテキストパスの取得
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 Spring Frameworkのアノテーション一覧
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- PHPでのファイルアップロード方法|multipart/form-dataと$_FILES 2026-08-07 17:15:57
- PHP $_SERVERとは|DOCUMENT_ROOT・PHP_SELFなど主な要素 2026-08-07 17:15:57
- Scratchのアカウントの作り方|メールアドレスとユーザー名の登録手順 2026-08-07 17:15:57
- djangoにおけるMVCアプリケーション実装例 2026-08-07 17:15:57
- Bluetoothとは|仕組み・BLEとClassicの違い・用途 2026-08-07 17:15:57
- Spring Bootのテスト入門|@SpringBootTestとJUnitでの単体・結合テスト 2026-08-07 17:15:57
- Java とは?言語仕様・JVM・主要フレームワーク一覧 2026-08-07 17:15:56
- インストール方法(Windows版) 2026-08-07 17:15:56
- APIキー取得方法 2026-08-07 17:15:56
- 【PHPフレームワーク】Laravelの使い方 2026-08-07 17:15:56
- Scratch 作品の公開方法 2026-08-07 17:15:56
- Google OAuth 2.0 認証の実装方法 2026-08-07 17:15:56
- データベースとは?RDB / NoSQL / SQL の基礎 2026-08-07 17:15:56
- インストール(eclipseプラグイン) 2026-08-07 17:15:56
- Spring Frameworkの使い方 2026-08-07 17:15:56
コメントを削除してもよろしいでしょうか?