Oracle9iAS Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス
リリース9.0.3

部品番号 J06903-01
       

JSPのユーティリティとユーティリティ・タグについて

このトピックでは、JSPページで使用できるOC4Jの一般的なユーティリティ機能について説明します。次の機能が含まれます。

メールJavaBeanとメール・タグ

多くの場合、Webサイトの状態またはユーザー操作に基づいて、電子メール・メッセージをWebアプリケーションから送信できると便利です。Sun社では、このために、プラットフォームやプロトコルに依存しないフレームワークの仕様を定めました。これは、JavaMail APIと呼ばれ、javax.mailパッケージとサブパッケージを使用します。

利便性向上のために、Oracleには、サーブレットやJSPページを介して電子メール機能を使用できるように、このJavaMail APIに基づいたJavaBeanとJSPカスタム・タグが用意されています。 Beanとタグは、OC4Jが提供する他のJavaBeansやカスタム・タグと同様、JSP標準とサーブレット標準に基づいて実装されます。

このセクションは、次の内容で構成され、メールJavaBeanとメール・タグについて説明します。


注意:

Oracle9iASでのメールJavaBeanとメール・タグには、OC4J環境が必要です。JServはサポートされていません。


JavaMail APIの詳細は、次のSun社のWebサイトを参照してください。


http://java.sun.com/products/javamail/1.2/docs/javadocs/index.html

メールJavaBeanとメール・タグについての一般的な考慮事項

メールJavaBean(SendMailBean)またはメール・タグ(sendMail)を使用するときは、次の点に注意してください。

メール添付

Oracle9iASリリース2(9.0.3)では、メールBeanとメール・タグによって、電子メール・メッセージとともに添付を送信できます。操作モードは次の3つです。

クライアント・サイド添付の場合、ファイルは、処理の一部として、サーバー・マシンに自動的にアップロードされます。複数のクライアント・サイド添付はサポートされません。

添付の有効化

デフォルトでは、セキュリティ上の理由から、メール添付機能は、メール・タグとメールBeanの両方で無効化されています。添付が有効かどうか、および添付の種類は、アプリケーションの/WEB-INFディレクトリにあるsendmail.propertiesファイルによって決まります。OC4Jデモ・インスタンスの場合、このファイルはデフォルトで存在し、内容は次のようになっています。


## email attachment permissions
sendmail.attachment=none

このファイルを/WEB-INFにコピーするか、新規に作成し、メール添付を使用する他のOC4Jインスタンス用に適切に更新する必要があります。

1つのアプリケーションでサポートできるのは、サーバー・サイド添付かクライアント・サイド添付のいずれかです。両方はサポートできません。

サーバー・サイド添付を有効化するには、設定をserverに変更します。


sendmail.attachment=server

クライアント・サイド添付を有効化するには、設定をclientに変更します。


sendmail.attachment=client

複数設定するとエラーになります。


注意:

sendmail.propertiesファイルが存在しない場合は、sendmail.propertiesnoneに設定(メール添付が無効化)された場合と同様に処理されます。


添付の送信

メール・タグでサーバー・サイド添付が有効化されている場合、1つ以上のサーバー・サイド・ファイルをメッセージに添付するには、serverAttachmentタグ属性を使用します。クライアント・サイド添付が有効化されている場合、クライアント・サイド・ファイル(最大1ファイル)をメッセージに添付するには、clientAttachmentタグ属性を使用します。「sendMailタグの説明」を参照してください。1つのアプリケーションでサポートできるのは、2つの添付モードのいずれか1つです。両方はサポートできません。

サーバー添付モードとクライアント添付モードの両方のメールBeanには、添付ファイルの名前を指定または取得するメソッドが含まれています。setServerAttachment()getServerAttachment()setClientAttachment()およびgetClientAttachment()の詳細は、「SendMailBeanメソッドの説明」を参照してください。

メール・タグまたはメールBeanでは、サーバー・サイド・ファイルのリストは、カンマ区切りまたはセミコロン区切りで指定できます。ただし、スペース区切りは、ファイル名にスペースが許可されているオペレーティング・システムの場合でも使用できません。

添付の使用方法

メール添付に関する次の使用方法は、メール・タグとメールBeanの両方に適用されます。

SendMailBeanの説明

OC4Jが提供するoracle.jsp.webutil.email.SendMailBean JavaBeanは、サーブレットからJSPアプリケーションまでの電子メール機能をサポートします。これをJSPページで使用するには、標準のjsp:useBeanタグを使用してインスタンス化できます。(ただし、JSPアプリケーションの場合は、通常SendMailBeanではなくsendMailタグを使用します。「sendMailタグの説明」を参照してください。)

SendMailBeanの要件

SendMailBeanを使用するには、ojsputil.jarmail.jarおよびactivation.jarの各ファイルがインストール済で、クラスパスに存在していることを確認します。これらのファイルは、OC4Jによって提供されます。

SendMailBeanをコードで使用する場合は、次の内容を指定する必要があります。

その他のSendMailBeanの属性は、すべてオプションです。

SendMailBeanメソッドの説明

このセクションでは、メール・メッセージの送信、メール・セッションのクローズおよびBean属性の設定と取得に使用するSendMailBeanメソッドのリストを示し、内容を説明します。


注意:

JavaBeanの仕様に準拠して、SendMailBeanには、引数なしのコンストラクタがあります。


次に、パブリックSendMailBeanメソッドを示します。

sendMailタグの説明

JSP開発者が便利なように、OC4Jには、JSPページに電子メール機能を設定するsendMailタグが用意されています。このセクションでは、このタグについて説明します。次の項目が含まれます。

SendMailBeanタグを使用するには、ojsputil.jarmail.jarおよびactivation.jarの各ファイルがインストール済で、クラスパスに存在していることを確認します。これらのファイルは、OC4Jによって提供されます。

現在の実装では、sendMailタグには独自のTLDファイル、email.tldが含まれています。このファイルは、アプリケーションとともにデプロイされている必要があります。また、タグを使用するJSPページには、適切なtaglibディレクティブが存在する必要があります。Oracle9iASのインストール時、TLDファイルは、予約済のタグ・ライブラリ・ディレクトリに置かれます。taglibディレクティブと予約済のタグ・ライブラリ・ディレクトリの詳細は、『Oracle9iAS Containers for J2EE JavaServer Pages開発者ガイド』を参照してください。

sendMailタグ構文

sendMailタグには、次の構文があります。


<mail:sendMail host = "SMTP_host_name" | session = "JavaMail_session_name"
               sender = "sender_address"
               recipient = "primary_recipient_IDs"
             [ cc = "cc_recipient_IDs" ]
             [ bcc = "bcc_recipient_IDs" ]
             [ subject = "subject_line" ]
             [ contentType = "MIME_type; [charset=charset]" ]
             [ contentEncoding = "B"|"base64"|"Q"|"quoted-printable"|
                                 "7bit"|"8bit" ]
             [ serverAttachment = "server_file_list" |
               clientAttachment = "client_file" ] >
...
E-mail body
...
</mail:sendMail>

sendMailタグの使用方法

sendMailタグを使用する場合は、次の点に注意してください。

sendMailタグ属性の説明

sendMailタグは、次の属性をサポートします。

sendMailタグに関するサンプル・アプリケーション

次に、sendMailタグを使用したサンプル・アプリケーションを示します。添付はありません。ページでの最初の実行サイクルでは、ユーザーが送信者(またはその他)を指定する前に、ユーザー入力のためのHTMLフォームが表示されます。ページでの次の実行サイクルでは、ユーザーが入力を送信した後に、sendMailタグが実行されます。このページでは、スローされた例外を表示するためのエラー・ページerror.jsp(後述)も使用されます。


<%@ page language="java" errorPage="error.jsp" %>
<%@ taglib uri="/WEB-INF/email.tld" prefix="mail" %>
<%
if (request.getParameter("sender")==null) {
%>
<HTML>
<HEAD><TITLE>SendMail Sample</TITLE></HEAD>
<FORM METHOD=post>
<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 WIDTH="20%">
<TR><TD>Host:</TD><TD><INPUT TYPE="text" name="host" ></TD></TR>
<TR><TD>From:</TD><TD><INPUT TYPE="text" name="sender" ></TD></TR>
<TR><TD>To:</TD><TD><INPUT TYPE="text" name="recipient"  ></TD></TR>
<TR><TD>Cc:</TD><TD><INPUT TYPE="text" name="cc" ></TD></TR>
<TR><TD>Bcc:</TD><TD><INPUT TYPE="text" name="bcc" ></TD></TR>
<TR><TD>Subject:</TD><TD><INPUT TYPE="text" name="subject"
VALUE="Hi"></TD></TR>
</TABLE><br>
<TEXTAREA name="body" ROWS=4 COLS=30>"How are you!"</TEXTAREA><br><br>
<INPUT TYPE="submit" value="Send">
</FORM>
<%
}
else{
%>
<BODY BGCOLOR="#FFFFFF">
<P>Result:
       <HR>
       <mail:sendMail host='<%=request.getParameter("host")%>'
             sender='<%=request.getParameter("sender")%>'
             recipient='<%=request.getParameter("recipient")%>'
             cc='<%=request.getParameter("cc")%>'
             bcc='<%=request.getParameter("bcc")%>'
             subject='<%=request.getParameter("subject")%>'>
             <%=request.getParameter("body")%>
       </mail:sendMail>
Sent out Successfully!
       <HR>
</BODY>
<%
}
%>
</HTML>

次にエラー・ページerror.jspを示します。


<%@ page language="java" isErrorPage="true"%>
<HTML>
Error: <%= exception.getMessage() %>
</HTML>

このアプリケーションを実行すると、最初に次のデフォルトの画面が表示されます。

Text description of smaildef.gif follows.

次は、ホストgmail.oraclecorp.comを介してbrian.wright@oracle.comからblodney.treehut@oracle.comに送信されるメッセージのユーザー入力のサンプルです。

Text description of smailtst.gif follows.

ファイル・アクセスJavaBeansとファイル・アクセス・タグ

OC4Jには、JSPページとサーブレットに便利なファイルのアップロード機能とダウンロード機能を追加する、標準準拠のタグ・ライブラリとJavaBeansが用意されています。ファイルは、ファイル・システムやデータベースとの間でアップロードしたりダウンロードすることができます。

このセクションでは、これらの機能を説明します。構成は次のとおりです。


注意:

Oracle9iASでのファイル・アクセスJavaBeansとファイル・アクセス・タグには、OC4J環境が必要です。JServはサポートされていません。


OC4Jのファイル・アクセス機能の概要

開発者は、カスタム・タグまたはJavaBeansのいずれかを必要に応じて使用し、ユーザーによるファイルのアップロードまたはダウンロードを可能にするアプリケーションをプログラミングできます。いずれの場合も、アプリケーションは、アップロード元のクライアント・システム上のブラウザまたはダウンロード先のクライアント・システム上のブラウザを介して、ユーザーがファイルを指定するようにプログラミングされます。アップロード用のJSPページについて、OC4Jには、このためのフォームを作成する便利なタグhttpUploadFormが用意されています。

接続先のファイル・システムまたはデータベースの場所の指定を含め、アップロードの処理には、HttpUploadBean JavaBeanまたはhttpUploadタグを使用します。ソース・ファイル・システムまたはデータベースの場所の指定を含め、ダウンロードの処理には、HttpDownloadBeanまたはhttpDownloadタグを使用します。Beanは、HttpFileAccessBeanを拡張します。ただし、これは、公開使用を目的としていません。すべてのBeanは、oracle.jsp.webutil.fileaccessパッケージにあります。

ファイル・アップロードの概要

ユーザーがアップロードするファイルの場所をJSPページに指定するためのフォームは、httpUploadFormタグを使用して作成できます。このタグによって、ユーザーはアップロードするファイルを選択し、必要な複数の部分に分割されたHTTPリクエストを作成できます。標準のHTMLフォームを使用しても、リクエストを作成できます。

HttpUploadBean JavaBeanまたはhttpUploadタグを使用して、複数の部分に分割されたフォームでエンコードされたデータ・ストリームを受信および処理し、ファイル・システムまたはデータベースのいずれかの適切な場所にそのファイルを書き込みます。ターゲット・ファイルまたはデータベース行がすでに存在する場合、前のデータを上書きするかどうかを決定できる機能があります。


注意:

アップロードするファイルの最大サイズは、2GBです。


ファイル・システムの接続先

接続先がファイル・システム内の場合は、ベース・ディレクトリを指定するプロパティ・ファイルを用意する必要があります。プロパティ・ファイルは、fileaccess.propertiesという名前でアプリケーションの/WEB-INFディレクトリに配置し、さらに、fileaccess.basedirエントリがファイル内に存在している必要があります。次に例を示します(この例は、Microsoft Windowsシステム用です)。


fileaccess.basedir=C:\tmp

ベース・ディレクトリの下には、サブディレクトリ(各認可ユーザーのサブディレクトリなど)を必要に応じて置く必要があります。ベース・ディレクトリの下の接続先サブディレクトリは、アップロードBeanまたはアップロード・タグの属性を使用して指定する必要があります。すべてのディレクトリとサブディレクトリが存在し、書込み可能な状態である必要があります。OC4Jの機能を使用して、作成したり書込み可能にすることはできません。

データベースの接続先

接続先がデータベース内の場合は、デフォルトの表fileaccessを必要に応じて使用できます。この表は、付属のfileaccess.sqlスクリプトを使用して作成します。あるいは、必要な列型が含まれた他の既存の表を利用できます。いずれの場合も、データベースへの接続をoracle.jsp.dbutil.ConnBeanまたは標準のjava.sql.Connectionのインスタンスとして指定する必要があります。ConnBeanインスタンスを明示的に指定するか、またはJSPページでdbOpenタグ内にhttpUploadタグをネストして暗黙的に指定できます。(ConnBean JavaBeanとdbOpenタグの詳細は、「データ・アクセスJavaBeansとデータ・アクセス・タグ」を参照。)


注意:

Oracle9iASリリース2(9.0.3)では、java.sql.Connectionがサポートされるのは、ファイル・アクセスBeanに対してのみです。ファイル・アクセス・タグに対してはサポートされません。


さらに、アップロードBeanまたはアップロード・タグの属性を使用して接続先を指定する必要があります。接続先は、データベース表の接頭辞列に配置されるJava文字列の値です。接頭辞は、ファイル・システム・パスと同じです。

ファイル・データは、BLOBまたはCLOB(アップロードBeanまたはアップロード・タグの属性によって指定)としてデータベースに書き込まれます。

デフォルトのfileaccess表を使用しない場合は、アップロードBeanまたはアップロード・タグの属性を使用して、データベース表の名前およびファイル・データ、ファイル接頭辞およびファイル名を格納する列の名前を指定する必要があります。それ以外の表を使用する場合は、次のように、fileaccessのパターンに準拠する必要があります。


注意:

  • ConnBeanインスタンスを使用する場合は、接続を起動するjsp:useBeanタグに指定したスコープの最後で、接続が自動的にクローズされます。Connectionインスタンスのような機能はありません。

  • ConnBeanでは、JspScopeListener インタフェースを使用する必要があります。


アップロードに関するセキュリティ上の考慮事項

データベースへのアップロードの場合、データベース表には、指定のファイルに対する特定の認可ユーザーを示す列がありません。したがって、すべてのユーザーは、ファイルの接頭辞を知らなくても、他のユーザーがアップロードしたファイルを警告なしに参照できます。これを防止するために、各接頭辞に適切なユーザー名を付加できます。

ファイル・ダウンロードの概要

HttpDownloadBean JavaBeanまたはhttpDownloadタグは、次のように使用します。

再帰的なダウンロードを行うかどうかを指定する機能もあります。このダウンロードでは、サブディレクトリ内のファイルまたはデータベース接頭辞の追加情報を含むファイルも、ダウンロード可能になります。データベースのダウンロードの場合の接頭辞はファイル・システム・パスと同じで、ファイルを階層にグループ化するために使用できます。データベースからの再帰的なダウンロードの例として、接頭辞に/userを指定したと仮定します。再帰的なダウンロードでは、「/user」で始まる接頭辞を持つファイルとの一致を検出します。「/user/bill」や「/user/mary」、「/user1」、「/user2」、「/user1/tom」および「/user2/susan」などがその例です。

ファイル・システムからのファイルのダウンロードでは、「ファイル・アップロードの概要」で説明した機能が使用されます。つまり、fileaccess.propertiesファイルを使用してベース・ディレクトリを指定し、ダウンロードBeanまたはダウンロード・タグ内の属性を使用してファイル・パスの残りの部分を指定します。

データベースからのファイルのダウンロードでは、データベースへのアップロードと同様に、oracle.jsp.dbutil.ConnBeanまたはjava.sql.Connectionのインスタンスを指定する必要があります。さらに、デフォルトのfileaccess表(付属のfileaccess.sqlスクリプトを使用して作成可能)を使用していない場合は、データベースの表や列に関する必要な情報をすべて指定する必要があります。この情報は、ダウンロードBeanまたはダウンロード・タグの属性を使用して指定します。

ファイルの実際のダウンロードは、OC4Jが提供するDownloadServletによって実行されます。ダウンロード・タグの使用時に、タグ属性を使用してこのサーブレットのパスを指定します。ファイル・システム・ソースの場合は、このサーブレットへのハイパーリンクが自動的に作成されます。このため、ユーザーは各ファイルのリンクを選択して、そのファイルをダウンロードできます。データベース・ソースの場合、サーブレットはファイル・コンテンツを構成する選択済のCLOBまたはBLOBデータをフェッチします。(詳細は、「ダウンロード・サーブレット」を参照してください。)

ダウンロードに関するセキュリティ上の考慮事項

ダウンロードの場合は、ユーザーがソース(サーバー・サイド)・ファイル・システムまたはデータベースの内容を参照できる機能に制限を設けることを検討してください。警告がない場合は、次のような例が発生する可能性があります。

これが心配な場合は、次のような保護手段が考えられます。

ファイル・アップロードおよびダウンロード用JavaBeanとクラスの説明

このセクションでは、OC4Jが提供するファイル・アップロードおよびダウンロード用JavaBeans(HttpUploadBeanHttpDownloadBean)の属性とメソッドについて説明します。

OC4Jが提供する、ファイルのダウンロードを実際に実行するDownloadServlet、およびファイルのアップロードとダウンロードに関連する例外でファイル・アクセスJavaBeansが使用するFileAccessExceptionクラスについても簡単に説明します。

JavaBeanの仕様に準拠して、ファイル・アップロードおよびダウンロード用JavaBeansには、引数なしのコンストラクタがあります。


注意:

ファイル・アップロードおよびダウンロード用JavaBeansを使用するには、ojsputil.jarファイルがインストール済で、クラスパスに存在していることを確認します。このファイルは、OC4Jに含まれています。


HttpUploadBean

oracle.jsp.webutil.fileaccess.HttpUploadBean JavaBeanには、アップロードに使用する情報を指定するためのsetterメソッドが多数あります。また対応するほとんどのgetterメソッドも含まれています。必須属性と適切な属性をすべて設定した後、upload()メソッドを使用してアップロードを実行します。アップロードされたファイルの名前を表示するメソッドもあります。そのため通常は、情報を含むメッセージをブラウザに提供できます。

HttpUploadBeanは、HttpDownloadBeanと同様に、HttpFileAccessBeanを拡張します。ただし、これ自体は、公開使用を目的としていません。

関連情報は、「ファイル・アップロードの概要」を参照してください。

必須属性のサマリー

次のリストは、HttpUploadBeanの必須属性のサマリーです。

さらに、ファイル・システムへのアップロードでは、setBaseDir()メソッドをコールして、サーブレット・コンテキストとHTTPリクエスト・オブジェクトを指定する必要があります。その結果、Beanはベース・ディレクトリを指定するfileaccess.propertiesファイルを検出できます。

メソッド

次に、HttpUploadBeanのパブリック・メソッドを説明します。


注意:

HttpUploadBeanの属性とsetterメソッドの多くは、HttpDownloadBeanの場合と同じです。



注意:

通常、destination値の少なくとも一部は、ユーザー入力に基づいています。


この例では、単純なHTMLフォームを使用してファイル・システムにアップロードするファイルを指定し、次に、HttpUploadBeanを採用しているJSPページを使用してアップロードを行います。

次に示すHTMLフォームでは、その操作用にbeanUploadExample.jspを指定し、複数の部分に分割されたアップロード・ストリームを生成します。


<html><body>
<form action="beanUploadExample.jsp" ENCTYPE="multipart/form-data" method=POST>
<br> File to upload: <INPUT TYPE="FILE" NAME="File" SIZE="50" MAXLENGTH="120" >
<br><INPUT TYPE="SUBMIT" NAME="Submit" VALUE="Send"> </form>
</body></html>

次にbeanUploadExample.jspページを示します。


<%@ page language="java"
         import="java.util.*, oracle.jsp.webutil.fileaccess.*" %>
<html><body>
<% String userdir = "fileaccess"; %>   // user's part of the upload directory
<jsp:useBean id="upbean"
   class="oracle.jsp.webutil.fileaccess.HttpUploadBean" >
   <jsp:setProperty name="upbean" property="destination" value="<%= userdir %>"
/>
</jsp:useBean>
<%   upbean.setBaseDir(application, request);
         upbean.upload(request);
         Enumeration fileNames = upbean.getFileNames();
         while (fileNames.hasMoreElements()) { %>
              <br><%= (String)fileNames.nextElement() %>
  <% } %>
<br>Done!
</body></html>

HttpDownloadBean

oracle.jsp.webutil.fileaccess.HttpDownloadBean JavaBeanには、ダウンロードに使用する情報を指定するためのsetterメソッドが多数あります。また対応するほとんどのgetterメソッドも含まれています。必須属性と適切な属性をすべて設定した後、listFiles()メソッドを使用して、ダウンロードするファイルのリストを表示します。実際のダウンロードでは、OC4Jが提供するDownloadServletを使用して一度に1つのファイルがダウンロードされます。「ダウンロード・サーブレット」を参照してください。


注意:

DownloadServletのURLをアプリケーション・コード内に構成する必要があります。


HttpDownloadBeanは、HttpUploadBeanと同様に、HttpFileAccessBeanを拡張します。ただし、これ自体は、公開使用を目的としていません。

関連情報は、「ファイル・アップロードの概要」を参照してください。

必須属性のサマリー

次のリストは、HttpDownloadBeanの必須属性のサマリーです。

さらに、ファイル・システムからのダウンロードでは、setBaseDir()メソッドをコールして、サーブレット・コンテキストとHTTPリクエスト・オブジェクトを指定する必要があります。その結果、Beanはベース・ディレクトリを指定するfileaccess.propertiesファイルを検出できます。

メソッド

次に、HttpDownloadBeanのパブリック・メソッドを説明します。


注意:

HttpDownloadBeanの属性とsetterメソッドの多くは、HttpUploadBeanの場合と同じです。



注意:

listFiles()メソッドは、ファイル名をメモリーおよびJSPページまたはサーブレットに書き込みます。後で、そのファイル名に再度アクセスする場合は、getFileNames()メソッドを使用して、ファイル名をメモリーから読み込みます。



注意:

通常、source値の少なくとも一部は、ユーザー入力に基づいています。



注意:

実際には、再帰的なダウンロードは、ファイル・システムのダウンロードにはあまり効果がありません。サーバーのサブディレクトリ構造に対応させてファイルをクライアントにダウンロードするには、そのサブディレクトリがすでに存在している必要があるためです。HttpDownloadBeanは、クライアントのサブディレクトリを自動的に作成できません。


次に、ファイル・システムからのダウンロードにHttpDownloadBeanを使用しているJSPページの例を示します。このページでは、ダウンロード・サーブレットのURLを構成する必要があります。


<%@ page language="java" import="java.util.*, oracle.jsp.webutil.fileaccess.*"
%>
<html><body>
<% String servletPath = "/servlet/download/";  // path to the download servlet
   String userDir = "fileaccess/";   // user part of  download directory
%>
<jsp:useBean id="dbean"
   class="oracle.jsp.webutil.access.HttpDownloadBean" >
   <jsp:setProperty name="dbean" property="source" value='<%=userDir %>' />
</jsp:useBean>
<%    dbean.setBaseDir(application, request);
          dbean.listFiles(request); %>
The following files were found:
<%   Enumeration fileNames = dbean.getFileNames();
         while (fileNames.hasMoreElements()) {
                String name = (String)fileNames.nextElement();  %>
               <br><a href="<%= servletPath + name %>" > <%= name %></a>
<%    } %>
<br>Done!
</body></html>

ダウンロード・サーブレット

HttpDownloadBeanタグまたはhttpDownloadタグを介してダウンロード機能を使用するには、Webサーバーで使用できるoracle.jsp.webutil.fileaccess.DownloadServletクラスが必要です。

Webサーバーでのクラスのマッピングは、サーブレット・パス設定にも反映する必要があります。httpDownloadタグを使用する場合は、servletPath属性を使用して反映し、httpDownloadを使用する場合は、アプリケーション・コード内に反映します。このクラスをWebサーバーに構成する方法の例は、OC4Jデモの/WEB-INF/web.xmlファイルを参照してください。

OC4Jのデモの例では、コンテキスト・パス/j2ee/servlet(Oracle HTTP ServerをApache JServプロトコルとともに使用する、OC4JのデフォルトWebアプリケーションのコンテキスト・ルート)でサーブレット名downloadにマッピングされたDownloadServletが検出されます。つまり、web.xmlを編集していないかぎり、次の相対パスでアクセスできる必要があります。


/j2ee/servlet/download

FileAccessExceptionクラス

oracle.jsp.webutil.fileaccess.FileAccessExceptionクラスは、OC4Jが提供する便利なクラスで、ファイル・アクセスに関する例外を処理します。このクラスは、標準のjava.sql.SQLExceptionクラスとjava.io.IOExceptionクラスの機能をラップします。また、SQLとI/Oの例外処理に加えて、ファイル・アクセスBeanからの例外も処理します。

ファイル・アップロードおよびダウンロード用タグの説明

OC4Jには、ファイル・アップロード用のhttpUploadタグがあります。このタグでは、HttpUploadBeanを使用します。httpUploadFormタグは、ユーザーがアップロードするファイルを指定するフォームのプログラミングで使用すると便利です。このフォームのコードは手動でも作成できます。

OC4Jには、ファイルのダウンロード用にカスタムhttpDownloadタグが用意されています。このタグでは、HttpDownloadBeanを使用します。このセクションでは、これらのタグとその属性について説明します。

ファイル・アップロードおよびダウンロード用タグを使用するには、ojsputil.jarファイルがインストール済で、クラスパスに存在していることを確認します。このファイルは、OC4Jに含まれています。

タグ・ライブラリ・ディスクリプタ・ファイルfileaccess.tldが、アプリケーションとともにデプロイされている必要があります。また、ライブラリを使用するJSPページには、適切なtaglibディレクティブが存在する必要があります。Oracle9iASのインストール時、TLDファイルは、予約済のタグ・ライブラリ・ディレクトリに置かれます。taglibディレクティブと予約済のタグ・ライブラリ・ディレクトリの詳細は、『Oracle9iAS Containers for J2EE JavaServer Pages開発者ガイド』を参照してください。


注意:

  • このタグ構文では、接頭辞「fileaccess:」が使用されます。これは、表記規則に従っていますが、必須ではありません。任意の接頭辞をtaglibディレクティブに指定できます。

  • このヘルプのタグ構文規則の詳細は、「タグ構文の表記と意味」を参照してください。


httpUploadFormタグ

httpUploadFormタグを使用すると、複数の部分に分割されてエンコードされたフォーム・データを使用して、アプリケーションにフォームを簡単に作成できます。このフォームによって、ユーザーはアップロードするファイルを指定できます。

構文


<fileaccess:httpUploadForm formsAction = "action"
                         [ maxFiles = "max_number" ]
                         [ fileNameSize = "file_input_box_num_chars" ]
                         [ maxFileNameSize = "max_file_name_num_chars" ]
                         [ includeNumbers = "true" | "false" ]
                         [ submitButtonText = "button_label_text" ] />


注意:

httpUploadFormタグは、必要に応じてボディを使用できます。たとえば、ボディがユーザー・プロンプトで構成されている場合があります。


属性

httpUploadタグ

このタグは、HttpUploadBean JavaBeanの機能をラップし、その属性を対応させます。関連情報は、「ファイル・アップロードの概要」および「HttpUploadBean」を参照してください。

構文


<fileaccess:httpUpload destination = "dir_path_or_prefix"
                 [ destinationType = "filesystem" | "database" ]
                 [ connId = "id" ]
                 [ scope = "request" | "page" | "session" | "applicaton" ]
                 [ overwrite = "true" | "false" ]
                 [ fileType = "character" | "binary" ]
                 [ table = "table_name" ]
                 [ prefixColumn = "column_name" ]
                 [ fileNameColumn = "column_name" ]
                 [ dataColumn = "column_name" ] />


注意:

ファイル・システムへのアップロードでは、ベース・ディレクトリは、タグ・ハンドラによってJSPページ・コンテキストから自動的に取得できます。


属性


注意:

通常、destination値の少なくとも一部は、ユーザー入力に基づいています。


次に、httpUploadFormタグを使用して、アップロードするファイルを指定するHTMLフォームを作成するページの例を示します。httpUploadFormタグは、そのフォーム操作として、httpUploadExample.jspを指定します。httpUploadExample.jspページでは、httpUploadタグを使用して、データベース内のデフォルトのfileaccess表にアップロードします。

次に、HTMLフォームのページを示します。


<%@ page language="java" import="java.io.*"  %>
<%@ taglib uri="/WEB-INF/fileaccess.tld" prefix="upload" %>
<html> <body>
<fileaccess:httpUploadForm
      formsAction="httpUploadExample.jsp"
      maxFiles='<%= request.getParameter("MaxFiles") %>'
      includeNumbers="true"  fileNameSize="50"  maxFileNameSize="120" >
          <br> File:
</fileaccess:httpUploadForm>
</body> </html>

次は、httpUploadExample.jspページです。httpUploadタグは、dbOpenタグ内に存在することによって、データベース接続を取得している点に注意してください。必要な場合は、接続の取得にsetconn.jspが使用されている点にも注意してください。「setconn.jsp」を参照してください。


<%@ page language="java" %>
<%@ taglib uri="/WEB-INF/fileaccess.tld" prefix="upload" %>
<%@ taglib uri="/WEB-INF/sqltaglib.tld" prefix="sql" %>
<% String connStr=request.getParameter("connStr"); // get the connection string
       if (connStr==null) {  connStr=(String)session.getValue("connStr"); }
       else {  session.putValue("connStr",connStr); }
       if (connStr==null) { %>
           <jsp:forward page="setconn.jsp" />
<% } %>
<html><body>
<sql:dbOpen URL="<%= connStr %>" user="scott" password="tiger" >
   <fileaccess:httpUpload  destinationType = "database"
                           destination="tagexample" />
</sql:dbOpen>
Done! </body></html>

httpDownloadタグ

このタグは、HttpDownloadBean JavaBeanの機能をラップし、その属性を対応させます。関連情報は、「ファイル・ダウンロードの概要」および「HttpDownloadBean」を参照してください。

構文


<fileaccess:httpDownload servletPath = "path"
                   source = "dir_path_or_prefix"
                 [ sourceType = "filesystem" | "database" ]
                 [ connId = "id" ]
                 [ scope = "request" | "page" | "session" | "applicaton" ]
                 [ recurse = "true" | "false" ]
                 [ fileType = "character" | "binary" ]
                 [ table = "table_name" ]
                 [ prefixColumn = "column_name" ]
                 [ fileNameColumn = "column_name" ]
                 [ dataColumn = "column_name" ] />


注意:

  • httpDownloadタグは、必要に応じてボディを使用できます。たとえば、ボディがユーザー・プロンプトで構成されている場合があります。

  • ファイル・システムからのダウンロードでは、ベース・ディレクトリは、タグ・ハンドラによってJSPページ・コンテキストから自動的に取得できます。


属性


注意:

通常、source値の少なくとも一部は、ユーザー入力に基づいています。


次に、httpDownloadタグを使用してデータベースのデフォルトのfileaccess表からダウンロードするJSPページの例を示します。タグ・ボディのコンテンツ(「<br>:」)は、ダウンロードするファイルのリストにある各ファイル名の前に出力されます。DownloadServletサーブレットのパスをhttpDownloadタグに指定する必要があることに注意してください。タグ・ハンドラは、このパスを使用して、ダウンロードを実際に実行するDownloadServletへのURLを構成します。


<%@ page language="java" %>
<%@ taglib uri="/WEB-INF/fileaccess.tld" prefix="download" %>
<%@ taglib uri="/WEB-INF/sqltaglib.tld" prefix="sql" %>
<% String connStr=request.getParameter("connStr");
       if (connStr==null) { connStr=(String)session.getValue("connStr");}
       else { session.putValue("connStr",connStr);}
       if (connStr==null) { %>
          <jsp:forward page="setconn.jsp" />
<% } %>
<html> <body>
<% String servletPath = "/servlet/download/"; %>
<sql:dbOpen URL="<%= connStr %>" user="scott" password="tiger" >
<fileaccess:httpDownload sourceType = "database"
            source="tagexample" servletPath = `<%= servletPath %>' >
   <br>:
</fileaccess:httpDownload>
</sql:dbOpen>
<br>Done!
</body> </html>

EJBタグ

OC4Jには、JSPページでのEnterprise JavaBeansの使用を簡素化するカスタム・タグ・ライブラリが用意されています。

OC4J EJBタグの機能は、J2EE仕様に従っています。このタグを使用すると、web.xmlファイルの構成情報を使用して、EJBを名前でインスタンス化できます。タグの中には、通常のJavaBeanの起動に使用する標準のjsp:useBeanタグの機能に似た機能を持つ、useBeanタグがあります。

このセクションは、次の内容で構成されています。

EJBタグの構成

使用する各EJBについて、アプリケーションのweb.xmlファイルにある<ejb-ref>要素を、次の例のように使用します。


<ejb-ref>
   <ejb-ref-name>ejb/DemoSession</ejb-ref-name>
   <ejb-ref-type>Session</ejb-ref-type>
   <home>ejbdemo.DemoSessionHome</home>
   <remote>ejbdemo.DemoSession</remote>
</ejb-ref>

<ejb-ref>要素とそのサブ要素は、Sun社のServlet仕様、バージョン2.2以上に準拠して使用されます。概要は、次のとおりです。

これらの値は、EJBタグの属性値に反映されます。

EJBタグの説明

このセクションでは、OC4J EJBタグの構文と属性を説明します。

EJBタグを使用するには、ojsputil.jarファイルがインストール済で、クラスパスに存在していることを確認します。このファイルは、OC4Jに含まれています。

タグ・ライブラリ・ディスクリプタ・ファイルejbtaglib.tldが、アプリケーションとともにデプロイされている必要があります。また、ライブラリを使用するJSPページには、適切なtaglibディレクティブが存在する必要があります。Oracle9iASのインストール時、TLDファイルは、予約済のタグ・ライブラリ・ディレクトリに置かれます。taglibディレクティブと予約済のタグ・ライブラリ・ディレクトリの詳細は、『Oracle9iAS Containers for J2EE JavaServer Pages開発者ガイド』を参照してください。


注意:

  • このタグ構文では、接頭辞「ejb:」が使用されます。これは、表記規則に従っていますが、必須ではありません。任意の接頭辞をtaglibディレクティブに指定できます。

  • このヘルプのタグ構文規則の詳細は、「タグ構文の表記と意味」を参照してください。


次のタグが使用可能です。

EJBインスタンスを最初に作成するときは、useHomeタグを使用してホーム・インタフェース・インスタンスを作成する必要があります。その後、適宜、次のインスタンスを作成します。

作成されたEJBインスタンスは、適切なスコープ・オブジェクトに配置されます。引き続きそのインスタンスにアクセスする場合は、useBeanタグのみが必要となります。

EJB useHomeタグ

useHomeタグは、EJBのホーム・インタフェースをルックアップして、そのインスタンスを作成します。

構文


<ejb:useHome id = "home_instance_name"
             type = "home_interface_type"
             location = "home_lookup_name"
               [ local = "true" | "false" ]/>

このタグは、ボディを使用しません。

属性


<ejb:useHome id="aomHome" type="com.acme.atm.ejb.AccountOwnerManagerHome"
             location="java:comp/env/ejb/accountOwnerManager" />

EJB useBeanタグ

EJB useBeanタグは、EJBをインスタンス化して使用するためのタグです。idtypeおよびscopeの各属性は、通常のJavaBeanをインスタンス化する標準のjsp:useBeanタグの場合と同じように使用します。

EJBを最初にインスタンス化する場合は、次の2つの機能のいずれかを使用できます。

または

createBeanタグを使用している場合、EJBインスタンスは、親useBeanタグのvalue属性に暗黙的に戻されます。一度EJBがインスタンス化されると、value属性とネストしたcreateBeanタグは、同じEJBインスタンスを使用する後続のuseBeanタグには不要になります。


注意:

EJBインスタンスのコレクションの使用方法については、「EJB iterateタグ」を参照してください。


構文


<ejb:useBean id = "EJB_instance_name"
             type = "EJB_class_name"
           [ value = "<%=Object%>" ]
           [ scope = "page" | "request" | "session" | "application" ]  >
             [ local = "true" | "false" ] >

... nested createBean tag for first instantiation (if no value attribute) ...

</ejb:useBean>

属性

次に、すでにインスタンス化されているEJBの使用例を示します。


<ejb:useBean id="bean" type="com.acme.MyBean" scope="session" />

次に、ローカル・インタフェースが指定されているEJBの使用例を示します。


<EJB:useHome id="home" location="java:comp/env/ejb/Demo"
type="mypackage1.DemoLocalHome" local="true"/>
<EJB:useBean id="demo"  type="mypackage1.DemoLocal" local="true">
  <EJB:createBean instance="<%=home.create()%>" />
</EJB:useBean>
My name is "<%=demo.foo()%>" 

EJB createBeanタグ

EJBを最初にインスタンス化するときに、EJBのuseBeanタグのvalue属性を使用しない場合は、EJB createBeanタグをuseBeanタグ内にネストし、EJBインスタンスの作成作業を実行する必要があります。これが、EJBObjectインスタンスになります。このインスタンスは、親useBeanタグのvalue属性に暗黙的に戻されます。

構文


<ejb:createBean instance = "<%=Object%>" />

このタグは、ボディを使用しません。

属性

このcreateBeanタグ内で、EJBホーム・インタフェース・インスタンスのcreate()メソッドが、EJBのインスタンスを作成します。


<ejb:useBean id="bean" type="com.acme.MyBean" scope="session">
     <ejb:createBean instance="<%=home.create()%>" />
</ejb:useBean>

EJB iterateタグ

このタグを使用してEJBインスタンスのコレクション間を反復します。このタグは主としてEntity Beanに使用されます。これは、Entity Beanの標準のfinderメソッドがコレクションを戻すためです。

開始タグでは、finderメソッドの結果を介してコレクションがホーム・インタフェースから取得されます。タグ・ボディでは、必要に応じてコレクションが反復されます。


注意:

  • このタグには、一般的なiterateユーティリティ・タグと同じセマンティクスがあります。詳細は、「iterateユーティリティ・タグ」で説明します。このタグは便宜上、EJBタグ・ライブラリにコピーされます。

  • 単一EJBインスタンスの使用方法については、「EJBuseBeanタグ」を参照してください。


構文


<ejb:iterate id = "EJB_instance_name"
             type = "EJB_class_name"
             collection = "<%=Collection%>"
           [ max = "<%=Integer%>" ] >

... body ...

</ejb:iterate>

ボディは、コレクション内の各EJBについて一度評価されます。

属性


<ejb:iterate id="account" type="com.acme.atm.ejb.Account"
             collection="<%=accountManager.getOwnerAccounts()%>"
             max="100">
     <jsp:getProperty name="account" property="id" />
</ejb:iterate>

EJBタグの例

このセクションでは、EJBタグの使用例を示します。1つはSession Beanの使用例、もう1つはEntity Beanの使用例です。

EJBタグのSession Beanの例

この例は、アプリケーションのweb.xml ファイルの次の構成に依存します。


<ejb-ref>
   <ejb-ref-name>ejb/DemoSession</ejb-ref-name>
   <ejb-ref-type>Session</ejb-ref-type>
   <home>ejbdemo.DemoSessionHome</home>
   <remote>ejbdemo.DemoSession</remote>
</ejb-ref>

サンプル・コードは、次のとおりです。


<%@ page import="ejbdemo.*" %>
<%@ taglib uri="/WEB-INF/ejbtaglib.tld" prefix="ejb" %>
<html>
<head> <title>Use EJB from JSP</title> </head>
<body>

<ejb:useHome id="home" type="ejbdemo.DemoSessionHome"
             location="java:comp/env/ejb/DemoSession" />
<ejb:useBean id="demo" type="ejbdemo.DemoSession" scope="session" >
    <ejb:createBean instance="<%=home.create()%>" />
</ejb:useBean>
<heading2>      Enterprise Java Bean:  </heading2>
 <p><b> My name is "<%=demo.getName()%>". </b></p>
</body>
</html>

このサンプル・コードによって、次の内容が実行されます。

EJBタグのEntity Beanの例

この例は、アプリケーションのweb.xml ファイルの次の構成に依存します。


<ejb-ref>
   <ejb-ref-name>ejb/DemoEntity</ejb-ref-name>
   <ejb-ref-type>Entity</ejb-ref-type>
   <home>ejbdemo.DemoEntityHome</home>
   <remote>ejbdemo.DemoEntity</remote>
</ejb-ref>

サンプル・コードは、次のとおりです。


<%@ page import="ejbdemo.*" %>
<%@ taglib uri="/WEB-INF/ejbtaglib.tld" prefix="ejb" %>
<html>
<head> <title>Iterate over EJBs from JSP</title> </head>
<body>

<ejb:useHome id="home" type="ejbdemo.DemoEntityHome"
             location="java:comp/env/ejb/DemoEntity" />
<% int i=0; %>
<ejb:iterate id="demo" type="ejbdemo.DemoEntity"
             collection="<%=home.findAll()%>" max="3" >
<li> <heading2> Bean #<%=++i%>:  </heading2>
 <b> My name is "<%=demo.getName()+"_"+ demo.getId()%>". </b> </li>
</ejb:iterate>
</body>
</html>

このサンプル・コードによって、次の内容が実行されます。

一般的なユーティリティ・タグ

OC4Jには、多様な操作を実行するユーティリティ・タグが多数あります。このセクションでは、これらのタグについて説明します。構成は次のとおりです。

ユーティリティ・タグを使用するには、ojsputil.jarファイルがインストール済で、クラスパスに存在していることを確認します。このファイルは、OC4Jに含まれています。

タグ・ライブラリ・ディスクリプタ・ファイルutiltaglib.tldが、アプリケーションとともにデプロイされている必要があります。また、ライブラリを使用するJSPページには、適切なtaglibディレクティブが存在する必要があります。Oracle9iASのインストール時、TLDファイルは、予約済のタグ・ライブラリ・ディレクトリに置かれます。taglibディレクティブと予約済のタグ・ライブラリ・ディレクトリの詳細は、『Oracle9iAS Containers for J2EE JavaServer Pages開発者ガイド』を参照してください。


注意:

  • このタグ構文では、接頭辞「util:」が使用されます。これは、表記規則に従っていますが、必須ではありません。任意の接頭辞をtaglibディレクティブに指定できます。

  • このヘルプのタグ構文規則の詳細は、「タグ構文の表記と意味」を参照してください。


Displayタグ

このセクションでは、次のタグについて説明します。

displayCurrencyユーティリティ・タグ

指定した金額を、ロケールに適切な通貨として書式化して表示します。ロケールを指定しないと、requestオブジェクトがロケールのかわりに検索されます。オブジェクトが検出されない場合は、システムのデフォルトのロケールが使用されます。

構文


<util:displayCurrency amount = "<%=Double%>"
                    [ locale = "<%=Locale%>" ] />

このタグは、ボディを使用しません。

属性


<util:displayCurrency amount="<%=account.getBalance()%>"
                      locale="<%=account.getLocale()%>" />

displayDateユーティリティ・タグ

指定した日付をロケールに適した書式で表示します。ロケールを指定しない場合は、システムのデフォルトのロケールが使用されます。

構文


<util:displayDate date = "<%=Date%>"
                [ locale = "<%=Locale%>" ] />

このタグは、ボディを使用しません。

属性


<util:displayDate date="<%=account.getDate()%>"
                  locale="<%=account.getLocale()%>" />

displayNumberユーティリティ・タグ

指定した数値をロケールの書式および必要に応じて指定した書式で表示します。ロケールを指定しない場合は、システムのデフォルトのロケールが使用されます。

構文


<util:displayNumber number = "<%=Double%>"
                  [ locale = "<%=Locale%>" ]
                  [ format = "<%=Format%>" ] />

このタグは、ボディを使用しません。

属性


<util:displayNumber number="<%=shoe.getSize()%>" />

その他のユーティリティ・タグ

このセクションでは、次のタグについて説明します。

iterateユーティリティ・タグ

このタグを使用してコレクション間を反復します。開始タグでコレクションを取得し、ボディでそれを反復します。

構文


<util:iterate id = "instance_name"
              type = "class_name"
              collection = "<%=Collection%>"
            [ max = "<%=Integer%>" ] >

... body ...

</util:iterate>

ボディは、コレクション内の各要素について一度評価されます。

属性


<util:iterate id="contact" type="com.acme.connections.Contact"
              collection="<%=company.getContacts()%>" >
     <jsp:getProperty name="contact" property="name"/>
</util:iterate>

ifInRoleユーティリティ・タグ

指定したアプリケーションのロールにユーザーが存在するかどうかに基づいて、タグ・ボディを評価し、JSPページのボディにインクルードします。タグ・ハンドラは、requestオブジェクトのisUserInRole()メソッドを実行します。

ロールの概念は、Sun社のJava Servlet仕様、バージョン2.2以上に基づいています。ロールは、アプリケーションのweb.xmlファイルの<role> 要素に定義します。

構文


<util:ifInRole role = "<%=String%>"
             [ include = "true" | "false" ] >

   ... body to include ...

</util:ifInRole>

属性


<util:ifInRole role="users" include="true">
     Logged in as <%=request.getRemoteUser()%><br>
     <form action="logout.jsp">
     <input type="submit" value="Log out"><br>
     </form>
</util:ifInRole>
<util:ifInRole role="users" include="false">
     <form method="POST">
     Username: <input name="j_username" type="text"><br>
     Password: <input name="j_password" type="password"><br>
     <input type="submit" value="Log in">
     </form>
</util:ifInRole>

lastModifiedユーティリティ・タグ

現行のファイルの最終変更日付を、ロケールに適切な書式で表示します。ロケールを指定しないと、requestオブジェクトがロケールのかわりに検索されます。オブジェクトが検出されない場合は、システムのデフォルトのロケールが使用されます。

構文


<util:lastModified
             [ locale = "<%=Locale%>" ] />

このタグは、ボディを使用しません。

属性


<util:lastModified />