ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
JSP タグの全体像
JSP には大きく 5 種類のタグ・記述方法があります:
| 種類 | 記法 | 用途 |
|---|---|---|
| スクリプトレット | <% Java コード %> | Java 文を直接実行 |
| 式 | <%= 式 %> | 出力 |
| 宣言 | <%! メンバー %> | クラスメンバーの定義 |
| ディレクティブ | <%@ page %> など | ページ全体の設定 |
| アクション | など | 標準動作の呼び出し |
| JSTL | など | 共通ロジックタグ |
| 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++) {
%>
行 <%= i %>
<%
}
%>
<%-- 式: 出力 (System.out ではなく out に書き出す) --%>
こんにちは <%= user %> さん
注意: スクリプトレットはメンテ性が低くテンプレートとロジックが混ざるため、現代の 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. 標準アクションタグ
<%-- 動的インクルード (リクエスト時に挿入) --%>
<%-- フォワード (制御を別ページへ) --%>
<%-- JavaBean の利用 --%>
<%-- リクエスト全パラメータをセット --%>
静的 include と動的 include の違い:
<%@ 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" %>
<%-- 変数 --%>
<%-- 出力 (XSS 安全な escape つき) --%>
<%-- 条件分岐 --%>
管理者メニュー
A
B
C
<%-- ループ --%>
${st.index}: ${item.name}
${i}
<%-- URL --%>
プロフィール
<%-- リダイレクト --%>
<%-- 国際化・フォーマット --%>
<%-- 文字列関数 --%>
${fn:toUpperCase(name)}
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 users = (List) request.getAttribute("users");
for (User u : users) {
if (u.isActive()) {
%>
<%= u.getName() %>
<%
}
}
%>
<%-- ✅ JSTL + EL でロジックレスに --%>
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 と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?