JSP入門向けチートシート

2025年3月22日作成

JSP概要

JSP(JavaServer Pages)は、Javaベースの動的ウェブページ開発技術です。HTMLコードの中にJavaコードを埋め込むことができます。

  • サーブレットベースの技術
  • MVCアーキテクチャと相性が良い
  • 再利用可能なコンポーネントの作成が可能
  • ビジネスロジックとプレゼンテーションの分離
JSPファイルは最終的にサーブレットにコンパイルされて実行されます。

JSP基本構文

JSPページはHTMLJavaの組み合わせで構成されます。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
  <title>はじめてのJSP</title>
</head>
<body>
  <h1>こんにちは、JSP!</h1>
  <%-- JSPコメント --%>
  <% // Javaコード(スクリプトレット) %>
  <%= new java.util.Date() %> <!-- 式 -->
</body>
</html>

スクリプティング要素

JSPには3種類のスクリプティング要素があります:

要素 構文
<%= 式 %>
スクリプトレット <% Javaコード %>
宣言 <%! 宣言 %>
スクリプトレットの多用は避け、JSPタグやELを使いましょう。

JSPディレクティブ

ディレクティブはJSPページの全体設定を制御します。

  • page: ページの属性設定
  • include: 静的インクルード
  • taglib: タグライブラリの定義
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*" %>

<%@ include file="header.jsp" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

暗黙オブジェクト

JSPでは自動的に利用できる組み込みオブジェクトがあります:

  • request: HTTPリクエスト
  • response: HTTPレスポンス
  • session: HTTPセッション
  • application: サーブレットコンテキスト
  • out: JspWriter(出力)
  • pageContext: ページコンテキスト
<% String userName = request.getParameter("name"); %>
<% session.setAttribute("user", userName); %>

JSPアクション

JSPアクションはXML構文で、実行時の動作を制御します。

  • jsp:include: 動的インクルード
  • jsp:forward: 転送
  • jsp:useBean: JavaBeanの使用
  • jsp:setProperty: プロパティ設定
  • jsp:getProperty: プロパティ取得
<jsp:include page="header.jsp" />

<jsp:useBean id="user" class="com.example.User" scope="session" />
<jsp:setProperty name="user" property="name" value="田中太郎" />

式言語 (EL)

Expression Languageは、JSPでデータにアクセスするための簡潔な構文です。

${expression}

ユーザー名: ${user.name}
リクエストパラメータ: ${param.id}
セッション属性: ${sessionScope.cart.items}
配列/リスト: ${users[0].name}

演算子もサポートしています:

${a + b}, ${a * b}, ${a / b}
${a == b}, ${a != b}, ${a < b}
${empty list}, ${not empty list}
${a > 0 ? "正" : "負または0"}

JSTL (JSP標準タグライブラリ)

JSTLは、JSPで一般的なタスクを実行するためのタグを提供します。

  • Core: if, forEach, set, out, catch
  • Formatting: formatDate, formatNumber
  • SQL: データベース操作
  • XML: XML処理
  • Functions: 文字列操作関数
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:if test="${not empty user}">
  ようこそ、<c:out value="${user.name}" />さん
</c:if>

<c:forEach var="item" items="${items}">
  ${item.name}: ${item.price}円
</c:forEach>

ベストプラクティス

  • MVCパターンを適用する
  • スクリプトレットは最小限に抑える
  • ELとJSTLを積極的に活用する
  • JSPでのビジネスロジック実装を避ける
  • エラーページを設定する
  • セッション管理に注意する
  • キャッシュ戦略を実装する
  • セキュリティ対策を実施する
JSPはビューレイヤーとして使用し、ロジックはサーブレットやJavaクラスに配置しましょう。

トラブルシューティング

よくある問題と解決策:

  • 文字化け: pageEncodingとcharsetを確認
  • 404エラー: ファイルパスと配置を確認
  • 500エラー: サーバーログを確認、構文エラーを修正
  • NullPointerException: 値の存在確認をする
  • コンパイルエラー: Javaコードの構文を確認
<%@ page errorPage="error.jsp" %>

<c:catch var="exception">
  // 例外が発生する可能性があるコード
</c:catch>

<c:if test="${not empty exception}">
  エラーが発生しました: ${exception.message}
</c:if>

JSPセキュリティ

JSP開発で注意すべきセキュリティ対策:

  • XSS対策: <c:out>タグを使用してエスケープ
  • SQLインジェクション: PreparedStatementを使用
  • CSRF対策: トークンの実装
  • セッション固定攻撃の防止
  • 適切なエラーハンドリング
<!-- 安全な出力 -->
<c:out value="${param.name}" />

<!-- 危険な出力 -->
${param.name} <!-- XSS脆弱性あり! -->

JSPとフレームワーク

JSPは様々なJavaフレームワークと統合できます:

  • Spring MVC: ViewResolverでJSPを使用
  • Struts: アクションとJSPの連携
  • JSF: Faceletとの関係

現代のwebアプリケーション開発では、JSPの代わりにThymeleafやJSF、モダンなJavaScriptフレームワークと組み合わせたRESTful APIアプローチも人気があります。

新規プロジェクトではJSP以外の選択肢も検討しましょう。レガシーシステムのメンテナンスにはJSP知識が役立ちます。