JavaServer Pages (JSP、もしくは英 : Jakarta Server Pages ) は、HTML 内にJava のコードを埋め込んでおき、Webサーバ で動的にWebページ を生成してクライアントに返す技術のこと。
概要
MVC アーキテクチャにおけるJSP, Java Servlet , JavaBeans の位置づけ
Javaのコードは、<%
と%>
記号で囲まれた部分に書かれる。HTMLの中にスクリプトが断片的に見えるため、この記法をスクリプトレット (英 : scriptlet ) と呼ぶ。これよりプログラムコードをタグに見立てることができるため、プログラムとデザインの棲み分けができる。定義されたカスタムタグライブラリを使用すればスクリプトレットを使わずに独自のタグでコードを埋め込むことができる。
サーブレット の機能のひとつとして実装されている。
サーブレットと違い、HTMLの中でデザイン部分とプログラム部分を分けて書くためにある程度までウェブデザイナの負担を減らすこともできる。また、静的な出力が多い場合に適している[ 1] 。類似技術としてPHP 、ASP 、ASP.NET などがある。
クライアントからのJSPの実行がリクエストされると、アプリケーションサーバ のサーブレットコンテナ はJSPソースファイルをサーブレットのソースコードに変換する。そしてさらにそのソースコードをその場でコンパイルして実行し、結果をクライアントに返信する。このため、最初はコンパイルの時間がかかるが、いちどコンパイルが実行されると2回目以降は必要なくなるため、結果としてアクセス速度が早くなる。
カスタムタグライブラリとしては、Javaの標準仕様の一部として定義されたJSTL や、Apache Struts のようなフレームワークが独自に定義したものがあり、こうしたタグを使用することでより可読性を高めることができる。JSP2.0では、従来のタグハンドラクラスを作成しなくてもカスタムタグライブラリを作成できるタグファイルの仕組みが導入された。タグファイルは、JSPの文法で作成されるファイルで拡張子は .tag
となる。
Model View Controller アーキテクチャでは、JSPをView、Java Servlet をController、JavaBeans をModelとして用いることが想定されている。
構文
タグ
HTMLの中に以下の特殊タグを記述することができる。
JSPのタグ
名称
タグ
説明
ディレクティブ
<%@ ディレクティブ %>
この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
javax.servlet.jsp.JspWriterクラスのオブジェクト変数
request
javax.servlet.http.HttpServletRequestクラスのオブジェクト変数
response
javax.servlet.http.HttpServletResponseクラスのオブジェクト変数
pageContext
javax.servlet.jsp.PageContextクラスのオブジェクト変数
session
javax.servlet.http.HttpSessionクラスのオブジェクト変数
application
javax.servlet.ServletContextクラスのオブジェクト変数
config
javax.servlet.ServletConfigクラスのオブジェクト変数
page
javax.servlet.jsp.HttpJspPageクラスのオブジェクト変数
exception
java.lang.Throwableクラスのオブジェクト変数
JSTL
JSTL(JavaServer Pages Standard Tag Library 、JSP標準タグライブラリ)は、JSPでよく用いられる標準的な機能を定義したカスタムタグライブラリ である。2001年 に定義されたJ2EE 1.3において標準仕様の一つとして導入された。[ 2]
JSTLでは、変数 の操作やif文 といった標準的な機能を提供するコアライブラリに加え、XML や国際化 、SQL のライブラリ、さらに文字列 操作といった関数 をまとめたライブラリが提供されている。[ 3]
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の仕様の一つとなっている。[ 4]
Expression Languageは、${}で表現する。
${sessionScope.user.id}
Expression Languageでは、以下のような暗黙オブジェクトが利用できる。
暗黙オブジェクト
変数名
説明
pageContext
javax.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日
批判
「Murach's Java Servlets and JSP」という本は、JSPにJavaコードを埋め込むことは一般的にはやり方だと述べる。より良い手法は、JSPに埋め込まれたバックエンドのロジックをServlet内のJavaコードに移行することである。この場合、Servletは処理を担当し、JSPはHTMLの表示を担当します。これにより、コードを明確な分離ができる。
2000年に、"Java Servlet Programming"の著者であるJason Hunterは、JSPに関するいくつかの「問題点」を述べた。彼はJSPは「Javaプラットフォームにとって最適な解決策ではないかもしれない」と述べる。[ 6]
脚注
引用著作
関連項目
ウィキブックスに
Java 関連の解説書・教科書があります。
外部リンク
プラットフォーム オラクルのテクノロジー プラットフォーム技術 主なサードパーティ技術 歴史 主要なJVM言語 コミュニティ