| この記事の要点 |
|
このエラーの典型
org.apache.jasper.JasperException: /index.jsp(15,4)
The jsp:param action must not be used outside of jsp:include,
jsp:forward or jsp:params.
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(...)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(...)
...
<jsp:param> は他のアクションタグの内側でのみ意味を持ち、それ以外の場所で書くとコンパイル時に弾かれます。
NG パターン
<%-- ❌ NG: 単独で書いている --%>
<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<body>
<jsp:param name="title" value="Top" /> <%-- ← JasperException --%>
<h1>${param.title}</h1>
</body>
</html>
<%-- ❌ NG: c:if などの内側に直接 --%>
<c:if test="${true}">
<jsp:param name="x" value="y" /> <%-- ← JasperException --%>
</c:if>
<%-- ❌ NG: jsp:useBean の中 --%>
<jsp:useBean id="foo" class="com.example.Foo">
<jsp:param name="x" value="y" /> <%-- ← JasperException --%>
</jsp:useBean>
正しい使い方: jsp:include の子要素
<%-- ✅ OK: jsp:include の子として --%>
<%-- parent.jsp --%>
<jsp:include page="header.jsp">
<jsp:param name="title" value="トップページ" />
<jsp:param name="lang" value="ja" />
</jsp:include>
<h1>本文</h1>
<jsp:include page="footer.jsp">
<jsp:param name="year" value="2026" />
</jsp:include>
子 JSP 側で受け取る:
<%-- header.jsp --%>
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<header>
<%-- EL で受ける(推奨) --%>
<h2><c:out value="${param.title}" /></h2>
<p>lang: ${param.lang}</p>
<%-- スクリプトレットで受ける(非推奨) --%>
<% String t = request.getParameter("title"); %>
</header>
正しい使い方: jsp:forward の子要素
<%-- ✅ OK: 別 JSP に転送する際にパラメータを付ける --%>
<c:if test="${user == null}">
<jsp:forward page="/login.jsp">
<jsp:param name="redirect" value="/mypage" />
<jsp:param name="message" value="ログインが必要です" />
</jsp:forward>
</c:if>
使えるアクションタグ一覧
| タグ | 用途 | jsp:param 可 |
|---|---|---|
<jsp:include> | 実行時に別 JSP を取り込み | ○ |
<jsp:forward> | 別 JSP / Servlet に転送 | ○ |
<jsp:params> | <jsp:plugin> 用のパラメータ束 | ○ |
<jsp:useBean> | JavaBeans 生成 | × |
<jsp:setProperty> | Bean プロパティ設定 | × |
<%@ include %> (静的) | コンパイル時取り込み | ×(属性で渡せない) |
静的 include との違い
| 方式 | タイミング | パラメータ |
|---|---|---|
<%@ include file="header.jsp" %> | コンパイル時(ソース合体) | 不可 |
<jsp:include page="header.jsp" /> | 実行時(別リクエスト的) | <jsp:param> で渡せる |
受け取り側の注意点
<%-- ⚠️ XSS 対策で必ずエスケープ --%>
<%-- ❌ NG: 生で出す --%>
<h1>${param.title}</h1>
<%-- ✅ OK: c:out で HTML エスケープ --%>
<h1><c:out value="${param.title}" /></h1>
<%-- ✅ OK: fn:escapeXml --%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<h1>${fn:escapeXml(param.title)}</h1>
同じ名前のパラメータを複数渡す
<%-- 同名複数 --%>
<jsp:include page="list.jsp">
<jsp:param name="tag" value="java" />
<jsp:param name="tag" value="spring" />
<jsp:param name="tag" value="jsp" />
</jsp:include>
<%-- list.jsp 側 --%>
<c:forEach var="t" items="${paramValues.tag}">
<li>${t}</li>
</c:forEach>
FAQ
Q: モダンな書き方は?
A: 2026 時点では JSP は新規プロジェクトで非推奨。Spring Boot + Thymeleaf / JSF / React + REST が主流。既存システム保守でのみ JSP を扱うのが現実的です。
Q: jsp:param の value に式を書ける?
A: value="${user.name}" のように EL が使えます。スクリプトレット <%= %> も可。
Q: include した子 JSP でセッション属性は共有される?
A: 同じリクエストなので ${sessionScope.xxx}, ${requestScope.xxx} は共有されます。jsp:param はリクエストパラメータに追加するもの。
子ページ
子ページはありません
同階層のページ
- java.lang.NoSuchMethodError
- java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date
- java.lang.UnsupportedClassVersionError
- version less than X.X is not supported.
- パッケージ~は存在しません
- org.apache.jasper.JasperException: ...The jsp:param action must not be...
- java.io.FileNotFoundException: ファイル名 (許可がありません)
- java.sql.SQLException: Cannot convert value 'YYYY-MM-DD ...' from column n(YYYY-MM-DD ...) to TIMESTAMP.
- 警告: この文字は、エンコーディング[文字コード]にマップできません
- java.text.ParseException: Unparseable date
- Unsupported major.minor version 52.0
- エンティティ" ... "への参照は';'デリミタで終了する必要があります。
- java.math.BigDecimal cannot be cast to java.lang.String
人気ページ
- 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 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38