![]() ![]() ![]() ![]() ![]() |
開発ガイド 05/16/03 09:21:28 |
JSP (JavaServer Pages)技術は、ダイナミックコンテンツを生成し、そのコンテンツをWebベースのアプリケーションに組み込むための標準的な方法を提供します。この章では、JSPについて概説します。次のトピックを取り上げます。
JSPページは、SunのJ2EEプラットフォームの重要な部分で、JSPページを使用してアプリケーションのユーザインタフェースのコアを提供するように推奨します。JSPページは一般的に、WebベースのJ2EEアプリケーション(「Webアプリケーション」)で使用されます。Webアプリケーションには、WAR (Web Archive)ファイルと呼ばれるアーカイブにパッケージ化されたJSPページ、サーブレット、JavaBeans、ユーティリティクラス、イメージなどが含まれています。これらのアプリケーションは、ブラウザクライアントによりアクセスされます。
JSPページとサーブレットが「Web階層」と呼ばれることもあるJ2EEの中央階層にどのように置かれるかは、次の図のとおりです。
JSPページは、Webマークアップ言語の使用を容易にするJavaの機能を組み合わせているため、ダイナミックWebコンテンツの作成プロセスを簡素化します。JSPページの特徴は、次のとおりです。
JavaBeansコンポーネントへの呼び出しだけでなく、埋め込みJavaコードフラグメントへの呼び出しも含めることにより、JSPページの機能を拡張できるようにする
「タグライブラリ」で定義された「カスタムタグ」を含めることもできる
標準JSPタグによってアプリケーションに必要な機能が提供されない場合、独自のアプリケーション固有のタグライブラリを作成し、このライブラリによって定義されたカスタムタグをページで使用できます。また、 Jakartaプロジェクトなど、サードパーティにより提供されるタグライブラリを使用することもできます。
JSPページおよびサーブレットについて JSPページでは、アプリケーションサーバの基礎サーブレット技術を使用します。JSPページは、アプリケーションサーバに配備されると、サーブレットに変換され、実行するためにコンパイルされます。サーブレットとJSPページの違いについては、次に説明します。
サーブレットでは、CGI (Common Gateway Interface)プログラムと同様に、Webサーバの機能を拡張します。サーブレットは、CGIプログラムとは異なり、移植性(Javaで記述されている)およびスケーラビリティに優れ、維持が簡単であるため、より良い選択肢です。サーブレットは、HTTPリクエストを処理して応答を生成する方法を説明します。サーブレットは、ダイナミックコンテンツを配布するために使用できます。
サーブレットと同様、JSPページは、HTTPリクエストを処理してHTTPリクエストに応答する方法を説明します。Javaで記述されているサーブレットとは異なり、JSPページは、HTMLおよびJSPタグの組み合わせ、Javaコード、およびその他の情報を含むテキストベースのドキュメントです。
JSPページおよびサーブレットでは、両方とも同じ問題を解決しますが、JSPページには、アプリケーション論理(Javaでコード化)から表示(HTMLで表現)が区別されるという利点があります。サーブレットを使用すると、表示とアプリケーション論理は同じJavaファイルに互いに混在します。したがって、JSPページを使用すると、UI開発者には情報の表示を作業させる一方、Javaプログラマにはアプリケーション論理の開発を別に行わせることができます。
Novell exteNd Workbenchには、JSPページを開発して配備できるようにするツールがあります。具体的には、次のものを備えています。
Workbenchツール |
説明 |
---|---|
JSPウィザード |
新しいJSPページに対してさまざまな属性をすばやく指定できるようにし、開いているプロジェクトにJSPページを追加します。
|
Tag Handlerウィザード |
カスタムJSPタグに対してタグハンドラクラスおよびTLDをすばやく作成できるようにします。
|
配備記述子エディタ |
J2EE互換配備記述子を作成して追加できるようにします。 |
配備計画エディタ |
exteNd Application ServerにJ2EE互換コンポーネントを配備する配備計画を作成して追加できるようにします。 |
配備ツール |
さまざまなJ2EEサーバにJ2EE互換アーカイブファイル(WARなど)を配備できるようにします。アーカイブは、J2EE 1.2および1.3をサポートするサーバに配備できます。 |
Workbenchでは、2.2および2.3の両方のWARの開発をサポートしています。作成するWARバージョンを決定するには、 J2EEバージョンに関する章を参照してください。
仕様の詳細とアクセスについては、Sun JavaのWebサイト(
http://java.sun.com/j2ee/docs.html)を参照してください。
<html> <jsp:useBean id=\xd3 clock\xd3 scope=\xd3 page\xd3 class=\xd3 util.JspCalendar\xd3 /> <jsp:useBean id=\xd3 sql\xd3 scope=\xd3 request\xd3 class=\xd3 util.JspSQL\xd3 /> <%@ taglib uri=\xd3 SampleTags\xd3 prefix=\xd3 SampleTags\xd3 %> <h4>Use a tag library</h4> <SampleTags:SimpleTag/> <h4>Use the implicit Request object</h4> <ul> <li>Server name: <%= request.getServerName() %> <li>Server port: <%= request.getServerPort() %> <li>HTTP method: <%= request.getMethod() %> </ul> <h4>Use a Bean to access date information</h4> <ul> <li>Day of month: is <jsp:getProperty name=\xd3 clock\xd3 property=\xd3 dayOfMonth\xd3 /> <li>Another form of Day of month: is <%=clock.getDayOfMonth() %> <li>Year: is <jsp:getProperty name=\xd3 clock\xd3 property=\xd3 year\xd3 /> <li>Month: is <jsp:getProperty name=\xd3 clock\xd3 property=\xd3 month\xd3 /> </ul> <h4>Call a function declared on the JSP page</h4> <%-- Function declaration --%> <%! public String getAString(String x) { return x + \xd2 was passed in\xd3 ; } %> <ul> <li>Call getAString: <%= getAString(\xd2 Hello\xd3 ) %> </ul> <h4>Use a Bean to access a database</h4> <%= sql.getSQL(request, \xd2 Select ID, LASTNAME, FIRSTNAME from EMPLOYEES\xd3 ) %> <h4>Execute a scriplet that has embedded text</h4> <% if (java.util.Calendar.getInstance().get(java.util.Calendar.AM_PM) == java.util.Calendar.AM) {%> Good morning! <% } else { %> Good afternoon ! <% } %> <h4>Include the output of another JSP</h4> <jsp:include page=\xd3 include.jsp\xd3 /> </html>
機能 サンプルページは、次を含むJSPのほとんどの機能を示しています。
処理を実行する2つのJavaBeans。ページでは、「アクション」(<jsp:useBean>)を使用して、各BeanをIDに関連付けます。この関連付けが行われると、ページでは、<jsp:getProperty>アクションまたは「式」(<%= ... %>)を使用して、Beanからデータを取り戻します。
JavaBeansは、コンパイルされてJSPページに対して使用可能になる別のJavaソースファイルにあります。
カスタムJSPタグを含む「タグライブラリ」。タグライブラリは、TLD (タグライブラリ記述子)ファイルで定義され、Javaクラスで実装されます。ページのtaglib「ディレクティブ」(<%@ taglib ... >)は、タグを参照するために使用するuriとプリフィックスを指定します。uriは、Webアプリケーションの配備記述子で指定されたタグライブラリにマップします( 配備記述子の作成を参照)。プリフィックスは、ページで使用されるライブラリのすべてのタグに付けられます。
このページで使用されているタグ(SimpleTag)は、ウェルカムテキストを返します。
このページでは、ページをトリガしたサーブレットリクエストに関連付けられているメソッドを複数呼び出す暗黙の「リクエスト」変数を使用します。
ページで一部の条件付き論理を実行する「スクリプトレット」(<% ... %>)。テストの結果に応じて、スクリプトレットは、埋め込みテキストのGood Morning!またはGood Afternoon!を出力ストリームに直接書き込みます。
現在のページに別のJSPページのコンテンツを含む<jsp:include>アクション。
<jsp:include>アクションは、ランタイム時にコンテンツを含みます。また、JSPには、コンパイル時のインクルードメカニズムもあります。コンパイル時に評価されるべきコンテンツを含めるには、<%@ include>ディレクティブを使用します。
HTMLおよびJavaの混在 この例からもわかるように、JSPページには、HTMLおよびJavaコードの両方を含むことができます。この例は非常に単純で、JSP機能を示すことだけを目的としているため、両方を使用することが可能です。しかし、HTMLおよびJavaを同じファイルに撒き散らすことは、大きなアプリケーションでは理想的ではありません。これは、Webページ設計者が必ずしもJavaを知っているわけではなく、Javaプログラマもページ設計者と同様にHTMLを書かない場合があるからです。さらに、HTMLおよびJavaを同じ場所で維持すると、スタティックコンテンツとダイナミックコンテンツの区別があいまいになります。
このような理由から、通常は、JavaコードをJSPとは別に維持する必要があります。これを行うには、次の2つの方法があります。
JSPベースのアプリケーション(Webアプリケーション)を開発するには、JSPページ、Javaサーブレット、JavaBeanコンポーネント、およびその他のサポートJavaクラスを次のように作成します。
Webアプリケーションに必要な形式に従ってアプリケーションのディレクトリ構造を作成します。ディレクトリ構造は、次のようになります。
注記: Workbenchでは、希望の方法でファイルを整理し、ファイルの場所をWARファイルに必要な構造にマップすることができます。JSPページおよびWorkbenchを初めて操作する場合は、JSP開発に慣れるために、まずWAR仕様に一致するようにファイルを整理することが推奨されます。その後、希望の方法でファイルを整理するWorkbenchの柔軟性を利用できます。詳細については、『ツールガイド』の「 プロジェクトおよびアーカイブ」を参照してください。
WAR — Web Archiveファイル。Webベースのアプリケーションに対するコンテナです。
ルートディレクトリ — JSPページ、HTMLドキュメント、およびアプリケーションのその他のコンテンツを含むことができます。ルートから外れたサブディレクトリの場合もあります。たとえば、jspsというディレクトリにJSPページを配置したい場合が挙げられます。
WEB-INF — クライアントに対して直接使用可能になるべきではないアプリケーションのすべてのコンポーネントを含む必要なサブディレクトリ。WEB-INFディレクトリには、Webアプリケーションの配備記述子であるweb.xmlというファイルが含まれていなければなりません。
WEB-INFサブディレクトリでは、次のサブディレクトリを含むことができます。
classesサブディレクトリおよびlibサブディレクトリに加えて、WEB-INFサブディレクトリでは、オプションとして他のサブディレクトリを持つことができます。これらのサブディレクトリには希望の名前を付けることができます。たとえば、タグライブラリ記述子ファイルを含むtldsという名前のサブディレクトリを含めることができます。
アプリケーションにより要求されるJavaサーブレット、JavaBeanコンポーネント、またはその他のサポートJavaクラスを作成し、これらのクラスをコンパイルします。
Workbenchの場合 前に表示したメインJSPページのサンプルアプリケーションに対して作成されたWorkbenchプロジェクトは、次のとおりです。
JSPページは、jspsサブディレクトリにあります。タグライブラリ定義ファイル(SampleTags.tld)は、tldsサブディレクトリにあります。すべてのJavaソースファイルは、classes/utilディレクトリにあります。
アプリケーションがパッケージ化される前に、プロジェクトのすべてのJavaファイルがコンパイルされます。
JSPページはこの段階ではコンパイルされないので注意してください。つまり、JSPページは、アプリケーションを配備するときにサーバで、Javaサーブレットソースファイルに変換されてから、コンパイルされます。WARにパッケージ化されるファイルには、次のものがあります。
Webアプリケーションのコンポーネントを作成したら、そのアプリケーションをWARにパッケージ化します。これを行うには、次の操作を実行します。
ファイルにはweb.xmlという名前を付け、このファイルをWEB-INFディレクトリに保存する必要があります。
WARファイル(拡張子が.WARのJARファイル)を作成し、 JSPソースファイルおよびその他のアプリケーションコンポーネントをそのWARファイルに追加します。
web.xmlファイルはWARファイルの配備記述子で、次のような設定情報を含んでいます。
web.xmlファイルで指定される大部分の情報は、Webアプリケーションで提供されるサーブレットに依存します。URLを通してユーザがサーブレットに直接アクセスできるようにするには、サーブレットに対する名前とURLパターンをweb.xmlで指定します。WEB-INFディレクトリの外部のパブリックディレクトリに配置されるJSPページの名前とURLパターンは指定する必要がありません(ユーザのリクエストに従って自動的に指定されます)。ただし、WARファイルのJSPファイルの場所に一致するURLではないURLを通してアクセス可能にする場合は、web.xmlでJSPページをマップできます。
web.xmlでは、WorkbenchインストールのResource/DTDCatalogサブディレクトリにあるweb-app_2_2.dtdというSun J2EE WebアプリケーションDTDにより指定された形式に従う必要があります。Javaサーブレット仕様のバージョン2.2には、各タグに関する完全なドキュメントがあります。このドキュメントは、Sun JavaのWebサイト( http://java.sun.com/j2ee/docs.html)から入手できます。
サンプルアプリケーションのweb.xmlファイルは次のとおりです。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"> <web-app> <taglib> <taglib-uri>SampleTags</taglib-uri> <taglib-location>/WEB-INF/tlds/SampleTags.tld</taglib-location> </taglib> </web-app>
アプリケーションのweb.xmlファイルは非常に単純で、エントリは1つ(<taglib>)しかありません。このエントリは、タグライブラリのuri (タグライブラリを使用するJSPページで指定されている)をWARのファイルの場所にマップします(同じサンプルアプリケーションでは、SampleTags.tldファイルはWEB-INFディレクトリのtldsサブディレクトリにあります)。
Workbenchの場合 配備記述子エディタを使用すると、アプリケーションの配備記述子を容易に作成して維持できます。
Webアプリケーションは、WARファイルにパッケージ化される必要があります。WARファイルを作成するには、任意のアーカイブツールを使用します。
Workbenchの場合 アーカイブ(WARファイル)を作成するには、[Project]>[Build and Archive]の順に選択するか(コンパイルが必要なJavaファイルをコンパイルし、WARファイルを作成します)、または[Project]>[Rebuild All and Archive]の順に選択します(プロジェクトのすべてのJavaファイルをコンパイルし、WARファイルを作成します)。
ユーザに対してアプリケーションを使用可能にするには、Novell exteNd Application ServerなどのJ2EEサーバにそのアプリケーションを配備します。これは、次のようにして行います。
アプリケーションに固有なランタイム配備情報をファイルで指定します。
この手順はサーバ固有です(J2EE標準では指定されていません)。各J2EEサーバには、ランタイム配備情報を指定するための独自の要件があります。たとえば、Novell exteNd Application Serverでは「配備計画」を使用し、Sun Reference Implementationでは「ランタイム配備記述子」を使用します。
WARのすべてのJSPページをJavaソースファイルにコンパイルします。
Javaソースファイルにより、HttpJspPageインタフェースを実装するクラスが定義されます。デフォルトでは、次のパッケージがインポートされます。
必要な場合は、JSPページディレクティブのインポート属性を使用して、追加のパッケージまたはクラスをインポートできます。
Javaクラスに対して生成されたコードは、JSP 1.1仕様に準拠しています。
JSPページに加えて、配備されたWARでは、サーブレットクラスおよび個別にコンパイルされたその他のサポートJavaファイルだけでなく、HTMLドキュメント、イメージ、およびアプリケーションで要求されたその他のファイルが含まれることがあります。.JSPファイルではないJavaソースファイルは配備でコンパイルされないことに注意してください。
アプリケーションを配備する先のJ2EEサーバに対してサーバプロファイルを定義します。
詳細については、『ツールガイド』の「
Workbenchプロファイルの設定」を参照してください。
[Deployment]ダイアログボックスに情報を入力します。
入力しなければならない情報は、配備する先のサーバによって異なります。[Deployment]ダイアログボックスには、指定したサーバに関連する情報のみが表示されます。
サンプルアプリケーションがNovell exteNd Application Serverで配備された方法は、次のとおりです。Novell exteNd Application Serverでは、「配備計画」、つまりWARファイルのコンテンツとその配備方法に関する追加情報を提供するXMLファイルを使用します。計画は、配備計画エディタで作成します。配備計画の詳細については、『ツールガイド』の「 配備計画エディタ」を参照してください。
サンプルアプリケーションに対して配備計画エディタでプロパティを指定する方法は、次のとおりです。
Workbenchでは、これらの仕様からXMLに配備計画を作成します。
配備計画は、アプリケーションを有効にし、アプリケーションのセッションタイムアウトを設定し、アプリケーションへのアクセスに使用できるURLを定義します。
最後に、アプリケーションは、[Project]>[Deploy Archive]の順に選択して、[Deployment]ダイアログボックスに入力し、[OK]をクリックすることによって配備されました。
アプリケーションは、いったん配備されたら、適切なURLを指定することによってブラウザで実行できます。
JSPページおよびその開発に関する基礎についての説明が終了したので、市販のJSP関連の書籍を入手して、独自の開発を進めてください。
![]() ![]() ![]() ![]() ![]() |
開発ガイド 05/16/03 09:21:28 |
Copyright © 1997, 1998, 1999, 2000, 2001, 2002, 2003 SilverStream Software, LLC, a wholly owned subsidiary of Novell, Inc. All rights reserved.