メインメニューを開く

JavaServer Pages (JSP) は、HTML内にJavaのコードを埋め込んでおき、Webサーバで動的にWebページを生成してクライアントに返す技術のこと。

JSP
拡張子 .jsp
MIMEタイプ application/jsp
初版 1999年6月2日 (1999-06-02)
最新版
2.2
(2009年12月10日 (2009-12-10))
種別 テンプレートエンジン
派生元 HTML, Java
国際標準 JSR 245
ウェブサイト JavaServer Pages Technology

概要編集

 
MVCアーキテクチャにおけるJSP, Java Servlet, JavaBeansの位置づけ

Javaのコードは、<%%>記号で囲まれた部分に書かれる。HTMLの中にスクリプトが断片的に見えるため、この記法をスクリプトレット (scriptlet) と呼ぶ。これよりプログラムコードをタグに見立てることができるため、プログラムとデザインの棲み分けができる。定義されたカスタムタグライブラリを使用すればスクリプトレットを使わずに独自のタグでコードを埋め込むことができる。

サーブレットの機能のひとつとして実装されている。

サーブレットと違い、HTMLの中でデザイン部分とプログラム部分を分けて書くためにある程度までウェブデザイナの負担を減らすこともできる。また、静的な出力が多い場合に適している[1]。類似技術としてPHPASPASP.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 2009年12月10日

脚注編集

  1. ^ サーブレットではprintlnメソッドが頻繁に現れて、可読性が低下するため
  2. ^ エンタープライズ Java テクノロジ Tech Tips”. オラクル (2003年12月22日). 2014年3月12日閲覧。
  3. ^ Chapter 7 JavaServer Pages Standard Tag Library” (英語). The Java EE 5 Tutorial. オラクル (2010年). 2014年3月12日閲覧。
  4. ^ Java EE 7が式言語の拡張を提供”. InfoQ (2013年7月12日). 2014年2月23日閲覧。

関連項目編集

外部リンク編集