Sun ONE ロゴ     前へ      目次      索引      次へ     
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 タグを利用できます。たとえば、prefixmypfx の場合は、<mypfx:cache><mypfx:flush> のように cache タグを利用できます。

このタグライブラリに別の URI を使用するには、web.xml ファイルで <taglib> 要素を明示的に使用します。

使用できるタグは次のとおりです。

cache

cache タグは、指定された属性に従って、開始タグと終了タグの間にある本体をキャッシュします。このタグが初めて見つかると、本体のコンテンツが実行され、キャッシュされます。次回以降の実行時には、キャッシュされているコンテンツが毎回チェックされます。コンテンツの更新が必要な場合は、コンテンツがもう一度実行され、キャッシュされているデータが更新されます。コンテンツの更新が不要な場合は、キャッシュされているデータが提供されます。

属性

次の表は、cache タグの属性を示します。左の列に属性の名前、中央の列にデフォルト値、右の列にその属性の説明を示します。

   cache の属性

属性

デフォルト値

説明

key

 

ServletPath_Suffix

 

(省略可能) この名前は、キャッシュエントリにアクセスするためにコンテナで使用される。キャッシュキーの末尾にサーブレットのパスが追加されて、キャッシュエントリにアクセスするためのキーが生成される。キーが指定されていない場合は、ページ内でのタグの位置に従って番号が生成される

 

timeout

 

60s

 

(省略可能) この時間が経過すると、タグの本体が実行され、キャッシュが更新される。デフォルトでは、この値の単位は秒と見なされる。別の単位を指定するには、タイムアウト値の末尾に次の単位を追加する。s は秒、m は分、h は時間、d は日を表す。たとえば、2 時間を指定するには 2h とする

 

nocache

 

false

 

(省略可能) true を設定すると、cache タグがないかのように本体のコンテンツが実行され、提供される。この属性を使うと、キャッシュされている応答を送信するか、本体を実行する (ただし、応答はキャッシュされない) のかをプログラムで決定できる

 

refresh

 

false

 

(省略可能) true を設定すると、本体のコンテンツがもう一度実行され、応答がキャッシュされる。この場合、timeout 設定には関係なく、プログラムを使って即座にキャッシュを更新できる

 

次の例はキャッシュされた 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 コマンドのファイル指示子

ファイル指示子

説明

files

 

コンパイルする 1 つまたは複数の JSP ファイル

 

-webapp dir

 

Web アプリケーションがあるディレクトリ。指定したディレクトリとそのサブディレクトリ内のすべての JSP がコンパイルされる。WAR、JAR、または ZIP ファイルは指定できない。これらのファイルは最初にオープンディレクトリ構造に抽出する必要がある

 

次の表は、jspc コマンドの基本的なオプション (options) を示しています。左の列はオプション、右の列は各オプションの説明です。

   jspc の基本的なオプション

オプション

説明

-q

 

非出力モードを有効にする (-v0 と同じ)。重大なエラーメッセージだけ表示する

 

-d dir

 

コンパイル済み JSP の出力ディレクトリを指定する。コンパイルされていない JSP が含まれているディレクトリに基づいてパッケージディレクトリが自動的に生成される。デフォルトの最上位ディレクトリは jspc が起動されるディレクトリである

 

-p name

 

すべての指定済み JSP にターゲットパッケージの名前を指定し、-d オプションによって実行されるデフォルトのパッケージ生成をオーバーライドする

 

-c name

 

最初にコンパイルされる JSP のターゲットクラス名を指定する。後続の JSP は影響を受けない

 

-uribase dir

 

コンパイルに相対的な URI ディレクトリを指定する。コマンドに一覧表示された JSP ファイルだけに適用され、-webapp で指定された JSP ファイルには適用されない

uriroot に相対的な各 JSP ファイルの場所を指定する。指定されない場合、デフォルトの場所は /(ルート)

 

-uriroot dir

 

URI ファイルを解決するルートディレクトリを指定する。コマンドに一覧表示された JSP ファイルだけに適用され、-webapp で指定された JSP ファイルには適用されない

このオプションを指定しない場合は、最初の JSP ページのすべての親ディレクトリ内で WEB-INF サブディレクトリを検索する。WEB-INF サブディレクトリを持つ JSP ページにもっとも近いディレクトリが使われる

JSP のどの親ディレクトリにも WEB-INF サブディレクトリがない場合は、jspc が起動されるディレクトリが使われる

 

-genclass

 

生成されたサーブレットをクラスファイルにコンパイルする

 

次の表は、jspc コマンドの高度なオプション (options) を示しています。左の列はオプション、右の列は各オプションの説明です。

   jspc の高度なオプション

オプション

説明

-v[level]

 

詳細モードを有効にする。level はオプション。デフォルトは 2。可能な level 値は次のとおり

  • 0 - 重大なエラーメッセージのみ
  • 1 - エラーメッセージのみ
  • 2 - エラーおよび警告メッセージのみ
  • 3 - エラー、警告、および情報メッセージ
  • 4 - エラー、警告、情報、およびデバッグメッセージ
 

-mapped

 

各 HTML 行の write 呼び出しと、JSP ファイルの各行の場所を記述するコメントを生成する。デフォルトでは、すべての隣接した write 呼び出しが結合され、場所のコメントは生成されない

 

-die[code]

 

エラーが発生した場合に、 code によって指定されたエラー番号を返す。code がない場合やパースできない場合は、デフォルトで 1 に設定される

 

-webinc file

 

-webapp オプションの部分的なサーブレットマッピングを作成する。これを web.xml ファイルに貼り付け可能

 

-webxml file

 

-webapp オプションの web.xml ファイル全体を作成する

 

-ieplugin class_id

 

Internet Explorer の Java プラグイン COM クラス ID を指定する。<jsp:plugin> タグによって使われる

 

たとえば、このコマンドは、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 のチュートリアルを参照してください。


前へ      目次      索引      次へ     
Copyright 2002 Sun Microsystems, Inc. All rights reserved.