JavaServer Pages
Jakarta Pages(JSP)は、Eclipse Foundationが開発している、HTMLやXML内にJavaのコードを埋め込んでおき、Jakarta Servlet上で動作し�…
| 拡張子 | .jsp |
|---|---|
| MIMEタイプ | application/jsp |
| 初版 | 1999年6月2日 |
| 最新版 | |
| 種別 | テンプレートエンジン |
| 派生元 | HTML、XML |
| ウェブサイト | Jakarta Pages |
Jakarta Pages(JSP)は、Eclipse Foundationが開発している、HTMLやXML内にJavaのコードを埋め込んでおき、Jakarta Servlet上で動作し、Webサーバで動的にWebページを生成してクライアントに返すテンプレートエンジン。
名称は下記の変遷をたどっている。
- Java 8 までは Java Platform, Enterprise Edition の一部で JavaServer Pages という名称だった。
- Java 9 以降は Eclipse Foundation の Jakarta EE に移管され、Jakarta EE 8, 9, 10 は Jakarta Server Pages 2.3, 3.0, 3.1 という名称だった。[2]
- Jakarta EE 11 以降は Jakarta Pages という名称に変わった。
概要

Javaのコードは、<%と%>の記号で囲まれた部分に書かれる。HTMLの中にスクリプトが断片的に見えるため、この記法をスクリプトレット (英: scriptlet) と呼ぶ。これよりプログラムコードをタグに見立てることができるため、プログラムとデザインの棲み分けができる。定義されたカスタムタグライブラリを使用すればスクリプトレットを使わずに独自のタグでコードを埋め込むことができる。
サーブレットの機能のひとつとして実装されている。
サーブレットと違い、HTMLの中でデザイン部分とプログラム部分を分けて書くためにある程度までウェブデザイナの負担を減らすこともできる。また、静的な出力が多い場合に適している[3]。類似技術としてPHP、ASP、ASP.NETなどがある。
クライアントからのJSPの実行がリクエストされると、アプリケーションサーバのサーブレットコンテナはJSPソースファイルをサーブレットのソースコードに変換する。そしてさらにそのソースコードをその場でコンパイルして実行し、結果をクライアントに返信する。このため、最初はコンパイルの時間がかかるが、いちどコンパイルが実行されると2回目以降は必要なくなるため、結果としてアクセス速度が早くなる。
カスタムタグライブラリとしては、Javaの標準仕様の一部として定義されたJSTLや、Apache Strutsのようなフレームワークが独自に定義したものがあり、こうしたタグを使用することでより可読性を高めることができる。JSP2.0では、従来のタグハンドラクラスを作成しなくてもカスタムタグライブラリを作成できるタグファイルの仕組みが導入された。タグファイルは、JSPの文法で作成されるファイルで拡張子は .tagとなる。
Model View Controllerアーキテクチャでは、JSPをView、ServletをController、JavaBeansをModelとして用いることが想定されている。
構文
タグ
HTMLの中に以下の特殊タグを記述することができる。
| 名称 | タグ | 説明 |
|---|---|---|
| ディレクティブ | <%@ ディレクティブ %> | このJSPファイルの処理時の属性をWebコンテナに伝える |
| 宣言 | <%! 宣言 %> | JSPで使用する変数やメソッドを宣言する |
| スクリプトレット | <% Javaコード %> | タグ内にJavaのコードを自由に記述する |
| 式 | <%= 式 %> | 式の評価結果をHTMLの中に出力する |
| アクション | <jsp:アクション名> | JSPでよく行う処理をタグで簡潔に記述する |
| コメント | <%-- コメント --%> | JSPとしてのコメントを記述する |
ディレクティブ
ディレクティブの種類としては、以下のものがある。
| 名称 | 説明 | 例 |
|---|---|---|
| page | JSPファイルのエンコーディングやJSPプログラムのコーディングに必要なimport文、セッション管理を行う | <%@ page contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J" %> |
| include | テキストファイルやその他のJSPファイルをインクルードする。インクルードは、JSPからServletに変換される時に行われる。ファイルの拡張子としてJSPを使用せずに他の拡張子を使用する。一般的には、「.jspf」(JSP Fragment)が使用される。 | <%@ include file="header.jspf" %> |
| taglib | カスタムタグを使用できるようにするための設定を行う | <%@ taglib uri="http://www.sample.com/tags/test" prefix="tst" %> |
アクション
アクションの種類としては、以下のものがある。
- jsp:include
- jsp:param
- jsp:forward
- jsp:plugin
- jsp:fallback
- jsp:getProperty
- jsp:setProperty
- jsp:useBean
JSP2.0では、以下のものが追加になった。
- jsp:attribute
- jsp:body
- jsp:doBody
- jsp:invoke
- jsp:element
暗黙オブジェクト
Javaのコード中で以下の変数があらかじめ利用できる状態(暗黙オブジェクトとして)で用意されている。
| 変数名 | 説明 |
|---|---|
| out | jakarta.servlet.jsp.JspWriterクラスのオブジェクト変数 |
| request | jakarta.servlet.http.HttpServletRequestクラスのオブジェクト変数 |
| response | jakarta.servlet.http.HttpServletResponseクラスのオブジェクト変数 |
| pageContext | jakarta.servlet.jsp.PageContextクラスのオブジェクト変数 |
| session | jakarta.servlet.http.HttpSessionクラスのオブジェクト変数 |
| application | jakarta.servlet.ServletContextクラスのオブジェクト変数 |
| config | jakarta.servlet.ServletConfigクラスのオブジェクト変数 |
| page | jakarta.servlet.jsp.HttpJspPageクラスのオブジェクト変数 |
| exception | java.lang.Throwableクラスのオブジェクト変数 |
JSTL
JSTL(JavaServer Pages Standard Tag Library、JSP標準タグライブラリ)は、JSPでよく用いられる標準的な機能を定義したカスタムタグライブラリである。2001年に定義されたJ2EE 1.3において標準仕様の一つとして導入された。[4]
JSTLでは、変数の操作やif文といった標準的な機能を提供するコアライブラリに加え、XMLや国際化、SQLのライブラリ、さらに文字列操作といった関数をまとめたライブラリが提供されている。[5]
EL式
EL式(Expression Language、式言語)は、JSP 2.0で導入された新たな構文で、従来のスクリプトレットに代わってより可読性に優れたJSPファイルを記述できるようにしたもの。EL式はJSPをベースにしたWebアプリケーションフレームワークであるJSFにおいても独自に定義されていたが、後のJSP 2.1, JSF 1.2において一つの仕様に統合され(Unified EL、統合式言語)、さらに2013年のEL 3.0ではJSPから独立したJava EE 7の仕様の一つとなっている。[6]
Expression Languageは、${}で表現する。
${sessionScope.user.id}
Expression Languageでは、以下のような暗黙オブジェクトが利用できる。
| 変数名 | 説明 |
|---|---|
| pageContext | jakarta.servlet.jsp.PageContextクラスのオブジェクト変数 |
| pageScope | pageスコープからオブジェクトを取得 |
| requestScope | requestスコープからオブジェクトを取得 |
| sessionScope | sessionスコープからオブジェクトを取得 |
| applicationScope | applicationスコープからオブジェクトを取得 |
| param | リクエストパラメータを格納するMapオブジェクト |
| paramValues | 複数の値を持つリクエストパラメータを格納するString型配列 |
| header | リクエストヘッダーと値を格納するMapオブジェクト |
| headerValues | 複数の値を持つリクエストヘッダーを格納するString型配列 |
| cookie | クッキーを格納するMapオブジェクト |
| initParam | コンテクスト初期化パラメータを格納するMapオブジェクト |
歴史
| バージョン | JSR | リリース日 |
|---|---|---|
| 1.0 | 1999年6月2日 | |
| 1.1 | 1999年12月17日 | |
| 1.2 | 53 | 2001年9月25日 |
| 2.0 | 152 | 2003年11月24日 |
| 2.1 | 245 | 2006年5月11日 |
| 2.2(2.1 Maintenance Release) | 2009年12月10日 | |
| 2.3(2.1 Maintenance Release2) | 2013年6月12日 |
| バージョン | リリース日 | プラットフォーム |
|---|---|---|
| 2.3[7] | 2019年8月8日 | Jakarta EE 8 |
| 3.0[8] | 2020年10月21日 | Jakarta EE 9 |
| 3.1[9] | 2022年4月21日 | Jakarta EE 10 |
| バージョン | リリース日 | プラットフォーム |
|---|---|---|
| 4.0[10] | 2024年4月1日 | Jakarta EE 11 |
批判
「Murach's Java Servlets and JSP」という本は、JSPにJavaコードを埋め込むことは一般的にはやり方だと述べる。より良い手法は、JSPに埋め込まれたバックエンドのロジックをServlet内のJavaコードに移行することである。この場合、Servletは処理を担当し、JSPはHTMLの表示を担当します。これにより、コードを明確な分離ができる。[11]
2000年に、"Java Servlet Programming"の著者であるJason Hunterは、JSPに関するいくつかの「問題点」を述べた。彼はJSPは「Javaプラットフォームにとって最適な解決策ではないかもしれない」と述べる。[12]
脚注
- ^ “Jakarta Server Pages”. jakarta.ee. 2025年9月25日閲覧。
- ^ “Jakarta Pages | JSP | Jakarta Server Pages Specification | Jakarta EE | The Eclipse Foundation”. Jakarta® EE: クラウドネイティブJavaの新ホーム. 2025年9月25日閲覧。
- ^ サーブレットでは`println`メソッドが頻繁に現れて、可読性が低下するため
- ^ “エンタープライズ Java テクノロジ Tech Tips”. オラクル (2003年12月22日). 2014年3月12日閲覧。
- ^ “Chapter 7 JavaServer Pages Standard Tag Library” (英語). The Java EE 5 Tutorial. オラクル (2010年). 2014年3月12日閲覧。
- ^ “Java EE 7が式言語の拡張を提供”. InfoQ (2013年7月12日). 2014年2月23日閲覧。
- ^ “Jakarta Server Pages 2.3 | Jakarta EE | The Eclipse Foundation”. Jakarta® EE: The New Home of Cloud Native Java. 2025年9月25日閲覧。
- ^ “Jakarta Server Pages 3.0 | Jakarta EE | The Eclipse Foundation”. Jakarta® EE: The New Home of Cloud Native Java. 2025年9月25日閲覧。
- ^ “Jakarta Server Pages 3.1 | Jakarta EE | The Eclipse Foundation”. Jakarta® EE: The New Home of Cloud Native Java. 2025年9月25日閲覧。
- ^ “Jakarta Pages 4.0 | Jakarta EE | The Eclipse Foundation”. Jakarta® EE: The New Home of Cloud Native Java. 2025年9月25日閲覧。
- ^ Murach & Urban 2014, pp. 46–47, §1 Get started right - The JSP for the second page.
- ^ The Problems with JSP (January 25, 2000)
引用著作
- Murach, Joel; Urban, Michael (2014) (英語). Murach's Java Servlets and JSP. Mike Murach & Associates. ISBN 978-1-890774-78-3
関連項目
外部リンク
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.