この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:6
ページ更新者:atom
更新日時:2026-06-11 07:07:02

タイトル: org.apache.jasper.JasperException: ...The jsp:param action must not be...
SEOタイトル: JSP「The jsp:param action must not be」エラーの原因と正しい使い方

この記事の要点
  • / / 子要素としてのみ使える
  • メッセージ: The jsp:param action must not be used outside of jsp:include / jsp:forward / jsp:params
  • 原因: 単独で を書いた / 別タグの中に書いた
  • 対処: 親 ... でラップ
  • 子 JSP では ${param.title} または request.getParameter() で受け取る
  • URL クエリパラメータ ?title=foo と同じ request.parameter に乗る

このエラーの典型

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(...)
    ...

他のアクションタグの内側でのみ意味を持ち、それ以外の場所で書くとコンパイル時に弾かれます。

NG パターン

<%-- ❌ NG: 単独で書いている --%>
<%@ page contentType="text/html; charset=UTF-8" %>


      <%-- ← JasperException --%>
    

${param.title}

<%-- ❌ NG: c:if などの内側に直接 --%> <%-- ← JasperException --%> <%-- ❌ NG: jsp:useBean の中 --%> <%-- ← JasperException --%>

正しい使い方: jsp:include の子要素

<%-- ✅ OK: jsp:include の子として --%>
<%-- parent.jsp --%>

    
    


本文

子 JSP 側で受け取る:

<%-- header.jsp --%>
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%-- EL で受ける(推奨) --%>

lang: ${param.lang}

<%-- スクリプトレットで受ける(非推奨) --%> <% String t = request.getParameter("title"); %>

正しい使い方: jsp:forward の子要素

<%-- ✅ OK: 別 JSP に転送する際にパラメータを付ける --%>

    
        
        
    

使えるアクションタグ一覧

タグ用途jsp:param 可
実行時に別 JSP を取り込み
別 JSP / Servlet に転送
用のパラメータ束
JavaBeans 生成×
Bean プロパティ設定×
<%@ include %> (静的)コンパイル時取り込み×(属性で渡せない)

静的 include との違い

方式タイミングパラメータ
<%@ include file="header.jsp" %>コンパイル時(ソース合体)不可
実行時(別リクエスト的) で渡せる

受け取り側の注意点

<%-- ⚠️ XSS 対策で必ずエスケープ --%>
<%-- ❌ NG: 生で出す --%>

${param.title}

<%-- ✅ OK: c:out で HTML エスケープ --%>

<%-- ✅ OK: fn:escapeXml --%> <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

${fn:escapeXml(param.title)}

同じ名前のパラメータを複数渡す

<%-- 同名複数 --%>

    
    
    


<%-- list.jsp 側 --%>

    
  • ${t}
  • 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 はリクエストパラメータに追加するもの。