2.3. JSPファイルの作成

2.3.1. JSPとは

JSP(JavaServer Pages)は、HTML要素などで表現される静的コンテンツとJSP要素で表現される動的コンテンツの2つのタイプを含むテキストドキュメントです。JSPは、通常のJavaのソースコードと違ってコンパイルする必要がありません。JSPのソースコードをサーバー(Webコンテナ)に配置するだけで実行可能になります。Webコンテナは、JSPファイルにリクエストが発生した時点でそれをServletとしてコンパイルして実行します。

2.3.2. JSP要素

JSPは、HTMLをベースに記述します。JSP固有の記述には次の表の8種類があります。
表2.2.3.2-1
名前
記述イメージ
説明
ディレクティブ
<%@ ... %>
WebコンテナにJSPページの情報を指示します。
コメント
<%-- ... %>
コメントを記述します。
スクリプティング
スクリプトレット
<% ... %>
記述されるJavaコードを実行します。

<%= ... %>
式を文字列として記述します。
宣言
<%! ... %>
変数の定義などJavaコードに関する宣言をします。
アクション
<jsp:include...>など
JSP内でオブジェクトを利用、編集や生成したりします。
暗黙オブジェクト
request、responseなど
JSP内のJavaプログラムで利用できるオブジェクトです。
EL(ExpressionLanguage)
${param.value}など
シンプルな記述でテンプレートデータや属性値を表現できます。JSP2.0仕様より導入されました。
2.3.2.1. ディレクティブ
ディレクティブには、page、taglib、includeの3つがあります。まず、pageディレクティブは、そのページに依存する設定をWebコンテナに知らせます。
pageディレクティブのシンタックスを以下に示します。
<%@ page(pageディレクティブ属性)%>
pageディレクティブ属性 ::= {language="scriptingLanguage"}
                            {extends="className"}
                            {import="importList" }
                            {session="true|false" }
                            {buffer="none|sizekb" }
                            {autoFlush="true|false" }
                            {isThreadSafe="true|false" }
                            {info="info_text" }
                            {errorPage="error_url" }
                            {isErrorPage="true|false" }
                            {contentType="ctinfo" }
                            {pageEncoding="peinfo" }
                            {isELIgnored="true|false" }
通常、1つの宣言に複数の属性を定義するのではなく、1つのインポート宣言で1つのpageディレクティブ、1つの文字エンコード関連で1つのpageディレクティブと、分けて記述します。
pageディレクティブに設定できる属性を以下に示します。
表2.2.3.2-2
属性
説明
language
スクリプトレットで使用するスクリプト言語を定義します。デフォルトの言語は"java"です。
extends
JSPサーブレットが継承するスーパークラスを指定します。これは、JSPファイルをJSPサーブレットに変換するときに使用され、Java言語のextendsに相当します。
import
宣言、スクリプトレット、式で使用するパッケージをインポートします。デフォルトでインポートされるパッケージは、"java.lang.*"と"javax.servlet.*"と"javax.servlet.jsp.*"と"javax.servlet.http.*"です。
session
HTTPセッションを使用するかをtrue/falseで指定します。trueを指定すると、暗黙オブジェクト"session"が利用できます。デフォルトの定義はtrueです。
buffer
クライアントに送信するデータをバッファに蓄積する際のバッファの容量をkb単位で指定します。バッファに蓄積しない場合はnoneを指定します。サイズを小さくすると、サーバーのメモリ負荷が軽減され、クライアント側でのレスポンスが向上します。デフォルトは、8kbです。
autoFlush
バッファリングされたデータを自動的にフラッシュするかどうかをtrue/falseで指定します。trueの場合、バッファがいっぱいになると自動的にWebブラウザにデータが送信されます。falseの場合、バッファがいっぱいになってもフラッシュせず、例外を発生させてWebブラウザにエラーを表示します。falseを指定する場合はbuffer属性に適切な値を指定する必要があります。また、buffer="none"を定義する場合、autoFlush="false"を定義することはできません。デフォルトの定義はtrueです。
isThreadSafe
複数のクライアントからのリクエストに対して同時に処理できるかどうかをtrue/falseで指定します。デフォルトはtrueです。
info
JSPファイルの作成者やバージョンなどの情報を記述したいときに利用します。この情報はServletインタフェースのgetServletInfo()メソッドで取得できます。デフォルトは空の文字列が設定されています。
isErrorPage
このJSPがエラーページかどうかをtrue/falseで指定します。trueの場合、JSPページ内でエラーへの参照となる暗黙オブジェクト、"exception"が利用できます。falseの場合、"exception"は利用できません。デフォルトはfalseです。
errorPage
JSPファイル内で対応していない例外が発生した場合に転送するエラーページを指定します。autoFlush="true"でバッファがフラッシュされた後に例外が発生した場合、指定したエラーページに転送することはできません。また、buffer属性が"none"の場合、例外が発生する前にJSPの出力があると、エラーページに転送することができません。
contentType
JSPのレスポンスのMIMEタイプと文字エンコード方式を指定します。定義できるMIMEタイプについては、IANAの『MIME Media Type』を、文字エンコード方式については、IANAの『CHARACTER SETS』を参照してください。
pageEncoding
JSPファイルの文字エンコード方式を指定します。JSPがServletに変換される際に利用されます。定義できる文字エンコード方式については、IANAの『CHARACTER SETS』を参照してください。
isELIgnored
JSP2.0から利用できるようになった式言語(EL)をJSPファイルで利用するかをtrue/falseで指定します。trueの場合、EL式はWebコンテナに無視されます。falseの場合、EL式がWebコンテナに認識されます。
以下に簡単な利用例を記述します。
次に、taglibディレクティブについて説明します。taglibディレクティブは、JSPで利用するカスタムタグライブラリの宣言です。
taglibディレクティブのシンタックスは次のようになります。
<%@taglib ( uri="タグライブラリURI" |
tagdir="タグライブラリディレクトリ")
prefix="カスタムタグの接頭辞" %>
taglibディレクティブに設定できる属性は次のようになります。
表2.2.3.2-3
属性
説明
uri
prefix属性の定義値に対応するタグライブラリ記述子(TLDファイル)の絶対URI、相対URIを定義します。
prefix
JSPファイル内に記述するカスタムタグライブラリの接頭辞を定義します。
tagdir
uri属性の代わりとして、Webアプリケーション内のタグライブラリ記述子の格納ディレクトリを定義することができます。"WEB-INF/tags"で始まらない定義値はWebコンテナによりエラーとなります。
最後にincludeディレクティブについて説明します。includeディレクティブは、外部のテキストファイルやJSPファイルをインクルードするときに利用します。
includeディレクティブのシンタックスは次のようになります。
<%@include file="インクルードファイルの相対URL" %>

Memo
IANAとはインターネット上で利用されるアドレス資源(IPアドレス、ドメイン名、プロトコル番号など)の標準化や割り当てを行なっていた組織でした。1998年10月、インターネット資源の管理・調整を行なう国際的な非営利法人ICANNが設立されて、2000年2月には、ICANN、南カリフォルニア大学、アメリカ政府の三者合意により、IANAが行なっていた各種資源の管理はICANNに移管されました。現在では、IANAはICANNにおける資源管理・調整機能の名称として使われています。

2.3.2.2. スクリプティング
スクリプティングには、スクリプトレット・式・宣言の3つがあります。以下にそれぞれの使用例を説明します。
2.3.2.3. アクション
JSPで利用できる主なアクションには次のようなものがあります。
表2.2.3.2-4
アクション
説明
<jsp:useBean>
JavaBeansをインスタンス化して特定のスコープに登録を行い、JSPページから使用可能にするアクションタグです。
<jsp:setProperty>
<jsp:useBean>などで生成したインスタンスに対して、値の設定を行うアクションタグです。
<jsp:getProperty>
<jsp:useBean>などで生成したインスタンスに対して、取得・表示を行うアクションタグです。
<jsp:include>
リソース(ページ)のインクルードをするアクションタグです。
<jsp:forward>
リクエストを転送するアクションタグです。
<jsp:param>
キーと値のペアの情報を扱うアクションタグです。このアクションタグを利用して<jsp:include>や<jsp:forward>に値を渡すことができます。
<jsp:plugin>
JavaプラグインをダウンロードしてアプレットやJavaBeansコンポーネントを実行するHTMLを生成します。
<jsp:params>
<jsp:plugin>の一部として利用するアクションタグです。アプレットに渡すパラメーターなどを指定します。
<jsp:fallback>
<jsp:plugin>の一部として利用するアクションタグです。ブラウザがサポートしていないタグがある場合に表示するテキストを指定します。
2.3.2.4. 暗黙オブジェクト
JSPで利用できる暗黙オブジェクトには次のようなものがあります。
表2.2.3.2-5
オブジェクト
スコープ
説明
request
request
HTTPリクエスト(javax.servlet.http.HttpServletRequest)のオブジェクトです。
response
page
HTTPレスポンス(javax.servlet.http.HttpServletResponse)のオブジェクトです。
pageContext
page
このJSPページ(javax.servlet.jsp.PageContext)のオブジェクトです。
session
session
HTTPセッション(javax.servlet.http.HttpSession)オブジェクトです。
application
application
Servletコンテキスト(javax.servlet.ServletContext)のオブジェクトです。
out
page
出力用ストリーム(javax.servlet.jsp.JspWriter)のオブジェクトです。
config
page
Servletの設定(javax.servlet.ServletConfig)のオブジェクトです。
page
page
このページを実装するクラスのインスタンス(java.lang.Object)です。
なお、スコープとはデータの有効範囲のことで、Webアプリケーションでは以下のスコープがあります。
表2.2.3.2-6
スコープ
説明
request
リクエスト間でデータを共有したい場合に使用します。
session
HTTPセッション間でデータを共有したい場合に使用します。これにより、異なるページ間でブラウザを閉じるまで、もしくはセッションが解放されるまでデータを共有することができます。
application
Webアプリケーション間でデータを共有したい場合に使用します。Webアプリケーション間とは、サーブレットコンテナに設定されるWebアプリケーション内のことを指します。
page
ひとつのJSPファイル中でデータを共有したい場合に使用します。
2.3.2.5. EL(Expression Language)
EL(ExpressionLanguage)はJSP2.0で追加された機能です。式の結果を出力するために使用され、アクションタグに属性の値として与えることもできます。ただ、EL単独では高度なロジックを書くことはできません。JSTLなどのカスタムタグと組み合わせることにより、JSPページの中からスクリプトレットを排除することで、コードの簡素化をすることができます。
従来の式の例
   <%=o.getDta() %>
ELの例
   ${o.data }
ELには次の専用の暗黙オブジェクトがあります。
表2.2.3.2-7
オブジェクト
説明
pageContext
PageContextオブジェクトです。
pageScope
pageスコープに格納されたキーと値のMap型オブジェクトです。
requestScope
requestスコープに格納されたキーと値のMap型オブジェクトです。
sessionScope
sessionスコープに格納されたキーと値のMap型オブジェクトです。
applicationScope
applicationスコープに格納されたキーと値のMap型オブジェクトです。
param
リクエストパラメーターのパラメーター名とパラメーター値を格納するMap型オブジェクトです。(パラメーター値は、ServletRequest.getParameter("パラメーター名")で取得できる値です。)
paramValues
リクエストパラメーターのパラメーター名とパラメーター値(複数)を格納するMap型オブジェクトです。(パラメーター値は、ServletRequest.getParameterValues("パラメーター名")で取得できる値です。)
header
ヘッダのキーと値を格納するMap型オブジェクトです。(値は、ServletRequest.getHeader("キー")で取得できる値です。)
headerValue
ヘッダのキーと値(複数)を格納するMap型オブジェクトです。(値は、ServletRequest.getHeaders("キー")で取得できる値です。)
cookie
Cookieのキーと値を格納するMap型オブジェクトです。
initParam
コンテキストの初期化パラメーターのキーと値を格納するMap型のオブジェクトです。(値は、ServletContext.getInitParameter("キー")で取得できる値です。)

2.3.3. JSPウィザードの活用

JSPウィザードの画面について、説明します。
メニュー ファイル新規その他 を選択して、新規ダイアログを表示します。
新規ダイアログで WebJSP File を選択して、次へ をクリックします。


図2.2.3.3-1

親フォルダ(JSPファイルの作成場所)をツリーもしくは直接入力により指定します。
このときWebContentディレクトリ配下を指定するようにします。
ここで、ファイル名(M)を入力し、完了をクリックすると JSPファイルが作成されます。
 次へをクリックすると作成時の JSPファイルの詳細な設定を行うJSP詳細が表示されます。


図2.2.3.3-2

完了のクリックにより、作成される JSPファイルを以下に示します。
<%@pagelanguage="java"contentType="text/html;charset=windows-31j"
   pageEncoding="windows-31j"%>
<!DOCTYPE Html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
<title>Insert title here</title>
</head>
<body>
</body>
</html>
この記述をもとに、用途に応じてJSPファイルの編集を行って下さい。
次へをクリックした場合、 JSPテンプレートの選択が表示されます。
選択したテンプレートをもとに、JSPファイルが作成されます。
新規にJSPのテンプレートを作成して利用することも可能です。


図2.2.3.3-3

JSP テンプレートで選択できる項目の詳細について、次の表で説明します。
表2.2.3.3-1
項目
説明
New JSP File(html)
HTML マークアップつきのJSPファイルを作成します。
New JSP File(xhtml)
XHTML マークアップつきのJSPファイルを作成します。
New JSP File(xhtml, xml syntax)
XHTML マークアップつきおよびXMLスタイル構文のJSPファイルを作成します。
New JSP File(xhtml, xml syntax, JSP 2.0)
JSP 2.0仕様のタグ、XHTML マークアップつきおよびXMLスタイル構文のJSPファイルを作成します。

2.3.4. JSP事前コンパイル

JSP事前コンパイルについて説明します。Warファイルの配備後、最初のJSPへのアクセス時にServletコンテナはJSPのコンパイルを行います。このため、JSPの多いWTP動的アプリケーションでは、JSPコンパイルの処理のために最初のレスポンスに時間がかかってしまいます。JSP実行時のコンパイル時間を省略することで、レスポンス性能を向上させるために、JSPファイルの事前コンパイル機能を提供します。

Memo
コマンドラインからJSPコンパイルを実行する方法については、 [ > ドメインの拡張機能 > JSPの事前コンパイル方法 ] を参照してください。

2.3.4.1. 単独JSPファイルのコンパイル
JSPファイルを右クリックすると、ポップアップメニューにWebプロジェクトが表示されます。


図2.2.3.4-1

Webプロジェクトを選択すると、JSPコンパイルが表示されます。


図2.2.3.4-2

JSPコンパイルを選択すると、JSPのコンパイルが行われます。


図2.2.3.4-3

JSP事前コンパイルを行うと、JSPファイルに対応するServletソースが、プロジェクトのソース・フォルダーに作成されます。


図2.2.3.4-4

さらに、このServletソースの定義はweb.xmlファイルに自動的に追加されます。
web.xmlの例を以下に示します。
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.5"
  xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name>DynamicWebPJ</display-name>
  <servlet>
   <servlet-name>org.apache.jsp.index_jsp</servlet-name>
   <servlet-class>org.apache.jsp.index_jsp</servlet-class>
  </servlet>
  <servlet-mapping>
   <servlet-name>org.apache.jsp.index_jsp</servlet-name>
   <url-pattern>/index.jsp</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
   <welcome-file>index.html</welcome-file>
   <welcome-file>index.htm</welcome-file>
   <welcome-file>index.jsp</welcome-file>
   <welcome-file>default.html</welcome-file>
   <welcome-file>default.htm</welcome-file>
   <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>
2.3.4.2. 一括JSPファイルのコンパイル
動的Webプロジェクトの右クリックメニュー で Webプロジェクトが表示されます。


図2.2.3.4-5

Webプロジェクト一括JSPコンパイルが表示されます。


図2.2.3.4-6

一括JSPコンパイルを選択すると、動的Webプロジェクト内のJSPが一括してコンパイルされます。


図2.2.3.4-7

一括JSPコンパイルを行うと、JSPファイルに対応するServletソースがWEB-INF/src配下に作成され、Servletソースの定義がweb.xmlファイルに自動的に追加されます。 なお、一括JSPコンパイルの結果は、全JSPを個別にJSPコンパイルするのと同じです。
2.3.4.3. JSP事前コンパイルの異常処理
Servlet2.4の動的Webプロジェクトの「WEB-INF」配下にweb.xmlが存在しない場合、JSPコンパイルを実行すると、以下の確認ダイアログが表示されます。


図2.2.3.4-8

web.xmlが存在していても、内容が不正な場合、JSPコンパイルを実行すると、以下web.xml更新エラーダイアログが表示されます。 赤枠で囲んだ理由が、エラー原因を表しています。


図2.2.3.4-9

動的Webプロジェクト以外のJSPファイルをJSPコンパイルすると、以下の、確認ダイアログが表示されます。


図2.2.3.4-10

2.3.5. JSPコンパイル結果ビューの説明

JSPコンパイルでエラーが発生すると、以下のJSPコンパイル結果ビューが開き、エラー情報が表示されます。


図2.2.3.5-1

表示されたエラー項目をダブルクリックすると、対応するJSPファイルのエラー箇所がエディターで開きます。


図2.2.3.5-2