Sun ONE Application Server 7 Web アプリケーション開発者ガイド |
JavaServer Pages の使用法このmoduleでは、JSP (JavaServer Pages) を Sun ONE Appllication Server Web アプリケーションのページテンプレートとして使う方法について説明します。
この moduleには次の節があります。
JSP の紹介
JSP は HTML または XML で書かれたブラウザページです。JSP には Java コードを含めることもできるため、複雑な処理を実行したり、出力に条件を付けたり、アプリケーション内のほかのオブジェクトと通信したりできます。Sun ONE Application Server の JSP は JSP 1.2 仕様に準拠しています。この仕様は install_dir/docs/index.htm からアクセス可能です。install_dir は、Sun ONE Application Server がインストールされているディレクトリです。
Sun ONE Application Server アプリケーションでは、JSP はアプリケーションを構成する個々のページです。サーブレットから JSP を呼び出してユーザー対話からの出力を処理できます。また、JSP はほかのアプリケーションコンポーネントと同じ方法でアプリケーション環境にアクセスするので、JSP を対話の相手として利用できます。
JSP は、JSP 要素とテンプレートデータから構成されています。テンプレートデータとは、JSP 仕様に定義されていないテキストや HTML タグなどのデータのことです。たとえば、最小の JSP は JSP エンジンによる処理が不要な静的 HTML ページです。
Sun ONE Application Server は、JSP が最初に呼び出されたときにその JSP を HTTP サーブレットにコンパイルします。また、パフォーマンスを向上させるために、JSP を事前にコンパイルしておくこともできます。これにより、JSP を標準オブジェクトとしてアプリケーション環境で使えるようになり、URL を使ってクライアントから JSP を呼び出すことができるようになります。
JSP エンジン内で動作する JSPは、JSP 固有のタグを解釈し、そのタグが指定するアクションを実行することによって動的コンテンツを生成します。このコンテンツは、それを囲んでいるテンプレートデータとともに出力ページにまとめられ、呼び出したユーザーに返されます。
JSP の作成
JSP の作成方法は、HTML ファイルの作成方法と基本的に同じです。HTML エディタを使ってページを作成したりレイアウトを編集したりできます。ページを JSP にするには、生のソースコードの適切な位置に JSP 固有のタグを挿入し、ファイル拡張子を .jsp にします。
JSP 1.2 仕様に準拠する JSP は、ほとんどの部分で HTML との整合性がある XML 構文に従っています。使用可能な JSP タグについては、「JSP タグライブラリおよび移植可能な標準タグ」を参照してください。
JSP はサーブレットにコンパイルされるので、サーブレットの設計上の注意事項は JSP にも当てはまります。JSP とサーブレットは同じタスクを実行できますが、それぞれ得意とするタスクは異なります。サーブレットは処理能力と適応性に優れています。ただし、サーブレットから HTML の出力を実行すると、手動でコーディングする必要があるため処理が面倒な println 文が多量に発生します。それに対し、JSP は HTML ファイルなので HTML エディタで編集でき、レイアウト作業に優れています。ただし、複雑な計算タスクや処理タスクの実行には不向きです。サーブレットについては「サーブレットの使用法」を参照してください。
JSP は、次の特徴もあります。
メンテナンスの容易さを考慮した設計
各 JSP はほかの任意の JSP を呼び出したり、取り込んだりできます。たとえば、汎用のコーポレートヘッダー、標準のナビゲーションバー、左側の目次カラムなどを作成できます。このカラムの各要素は、個別の JSP に入っており、作成されたページごとに取り込まれています。このページは、各サブフレームを読み込むページを動的に決めるフレームセットとして機能する JSP で構成できます。JSP は、サーブレットへのコンパイル時または要求の到着時に取り込むこともできます。
移植性を考慮した設計
JSP は、異なるアプリケーションおよび異なるサーバー間で完全に移植できます。特定のアプリケーションデータの知識を保持しないという欠点がありますが、そのようなデータが不要な場合は問題ありません。
汎用 JSP を使う例としては、ナビゲーションバーやコーポレートヘッダーおよびフッターのような移植性のあるページ要素があります。これはほかの JSP に取り込まれることを想定しています。再利用可能な汎用ページ要素のライブラリを作成してアプリケーション全体で使ったり、ほかの複数のアプリケーションで使ったりすることができます。
たとえば、もっとも簡単な汎用 JSP は JSP 固有のタグを持たない静的 HTML ページです。これよりやや複雑な JSP は、日時の表示などの一般データを操作したり、要求オブジェクトの標準値セットに基づいたページ構造を変更したりする Java コードを含みます。
例外の処理
検出できない例外が JSP ファイルで発生すると、通常、Sun ONE Application Server は 404 または 500 エラーの例外を生成します。この問題を避けるには、<%@ page%> タグの errorPage 属性を設定します。
JSP タグライブラリおよび移植可能な標準タグ
Sun ONE Application Server はタグライブラリおよび移植可能な標準タグをサポートしています。タグライブラリの詳細については、次の Web サイトで JSP 1.2 仕様書を参照してください。
http://java.sun.com/products/jsp/download.html
JSP 1.2 のタグ構文の要約については、次の PDF ファイルを参照してください。
http://java.sun.com/products/jsp/pdf/card12.pdf
JSP キャッシュ
JSP キャッシュを使うと、JSP ページのフラグメントを Java エンジン内にキャッシュできます。フラグメントごとに異なるキャッシュ基準を使ってキャッシュできます。たとえば、株式相場を表示するフラグメントや気象情報を表示するフラグメントなどがあるとします。株式相場のフラグメントは 10 分間キャッシュし、気象情報のフラグメントは 30 分間キャッシュするというように設定できます。
サーブレット関連の応答キャッシュの詳細については、「サーブレットの結果のキャッシュ」を参照してください。
JSP キャッシュは JSP 1.2 で提供されているカスタムタグライブラリのサポートを使います。JSP キャッシュは、install_dir/lib/appserv-tags.jar ファイルにパッケージされているタグライブラリによって実装されます。このファイルは、ユーザーの Web アプリケーションの WEB-INF/lib ディレクトリにコピーして使用できます。appserv-tags.tld というタグ記述ファイルは、この JAR ファイルと install_dir/lib/tlds ディレクトリにあります。
これらのタグを JSP ファイル内で次のように参照します。
<%@ taglib prefix="prefix" uri="Sun ONE Application Server Tags" %>
これ以降は、<prefix:cache> や <prefix:flush> のように cache タグを利用できます。たとえば、prefix が mypfx の場合は、<mypfx:cache> や <mypfx:flush> のように cache タグを利用できます。
このタグライブラリに別の URI を使用するには、web.xml ファイルで <taglib> 要素を明示的に使用します。
使用できるタグは次のとおりです。
cache
cache タグは、指定された属性に従って、開始タグと終了タグの間にある本体をキャッシュします。このタグが初めて見つかると、本体のコンテンツが実行され、キャッシュされます。次回以降の実行時には、キャッシュされているコンテンツが毎回チェックされます。コンテンツの更新が必要な場合は、コンテンツがもう一度実行され、キャッシュされているデータが更新されます。コンテンツの更新が不要な場合は、キャッシュされているデータが提供されます。
属性
次の表は、cache タグの属性を示します。左の列に属性の名前、中央の列にデフォルト値、右の列にその属性の説明を示します。
例
次の例はキャッシュされた JSP ページを示しています。
<%@ taglib prefix="mypfx" uri="Sun ONE Application Server Tags" %>
<%
String cacheKey = null;
if (session != null)
cacheKey = (String)session.getAttribute("loginId");
// キャッシュの有無のチェック
boolean noCache = false;
String nc = request.getParameter("nocache");
if (nc != null)
noCache = "true";
// 再読み込みの強制
boolean reload=false;
String refresh = request.getParameter("refresh");
if (refresh != null)
reload = true;
%>
<mypfx:cache key="<%= cacheKey %>" nocache="<%= noCache %>" refresh="<%= reload %>" timeout="10m">
<%
String page = request.getParameter("page");
if (page.equals("frontPage") {
// データベースからの見出し取得
} else {
.....
%>
</mypfx:cache>
<mypfx:cache timeout="1h">
<h2> Local News </h2>
<%
// ヘッドラインニュースの取得とキャッシュ
%>
</mypfx:cache>flush
キャッシュを強制的にフラッシュします。key が指定されている場合は、そのキーを持つエントリだけがフラッシュされます。キーが指定されていない場合は、キャッシュ全体がフラッシュされます。
属性
次の表は、flush タグの属性を示します。左の列に属性の名前、中央の列にデフォルト値、右の列にその属性の説明を示します。
   flush の属性
属性
デフォルト値
説明
key
ServletPath_Suffix
(省略可能) この名前は、キャッシュエントリにアクセスするためにコンテナで使用される。キャッシュキーの末尾にサーブレットのパスが追加されて、キャッシュエントリにアクセスするためのキーが生成される。キーが指定されていない場合は、ページ内でのタグの位置に従って番号が生成される
例
key="foobar" を持つエントリだけをフラッシュするには
<mypfx:flush key="foobar"/>
キャッシュ全体をフラッシュするには
<% if (session != null && session.getAttribute("clearCache") != null) { %>
<mypfx:flush />
<% } %>JSP のコンパイル : コマンド行コンパイラ
Sun ONE Application Server は、次の方法で JSP 1.2 準拠のソースファイルをサーブレットにコンパイルできます。
- JSP は実行時に自動的にコンパイルされる
- asadmin deploy コマンドには precompilejsp オプションがある。『Sun ONE Application Server 開発者ガイド』を参照
- Ant タスク sun-appserv-jspc で JSP を事前にコンパイルできる。『Sun ONE Application Server 開発者ガイド』を参照
- この節で説明する jspc コマンド行ツールを使って、コマンド行で JSP をプリコンパイルする
JSP コンテナが JAR ファイルから事前にコンパイルした JSP を取り出せるようにするには、JSP の動的再読み込みを無効にする必要があります。そのためには、sun-web.xml ファイルの jsp-config 要素の reload-interval プロパティの値を -1 に設定します。「JSP に関する要素」を参照してください。
jspc コマンド行ツールは、install_dir/bin の下にあります。このディレクトリがパスに含まれていることを確認してください。jspc コマンドの形式は次のとおりです。
jspc [options] file_specifier
次の表は、jspc コマンドで指定できる jsp_specifier を示しています。左の列はファイル指示子、右の列は各ファイル指示子の説明です。
次の表は、jspc コマンドの基本的なオプション (options) を示しています。左の列はオプション、右の列は各オプションの説明です。
次の表は、jspc コマンドの高度なオプション (options) を示しています。左の列はオプション、右の列は各オプションの説明です。
たとえば、このコマンドは、hello という JSP ファイルをコンパイルし、コンパイル済みの JSP を hellodir の下に書き込みます。
jspc -d hellodir -genclass hello.jsp
このコマンドは、webappdir の下の Web アプリケーション内のすべての JSP ファイルをコンパイルし、jspclassdir の下のクラスファイルに書き込みます。
jspc -d jspclassdir -genclass -webapp webappdir
これらの事前コンパイル済み JSP のいずれかを Web アプリケーションで使用するには、hellodir または jspclassdir の下のクラスを JAR ファイルに書き込み、この JAR ファイルを WEB-INF/lib に置きます。さらに、sun-web.xml ファイルの reload-interval プロパティの値を -1 に設定します。
JSP のデバッグ
Sun ONE Studio 4 を使って JSP をデバッグする場合、JSP コードと生成されたサーブレットコードの両方にブレークポイントを設定し、これらの間で表示を切り替えて両方の同一ブレークポイントを見ることができます。
Sun ONE Studio でのデバッグの設定方法については、『Sun ONE Application Server 開発者ガイド』を参照してください。詳細については、Sun ONE Studio 4, Enterprise Edition のチュートリアルを参照してください。