Oracle Application Server Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス
10g

部品番号: A97678-01
       

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

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

メールJavaBeanおよびタグ

通常、Webサイトのステータスやユーザー・アクションなどに基づいて、Webアプリケーションから電子メール・メッセージを送信できると便利です。Sun社はそのために、JavaMail APIと呼ばれるjavax.mailパッケージおよびサブパッケージを介して、プラットフォームにもプロトコルにも依存しないフレームワークを指定しています。

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

この項では、メールJavaBeanおよびタグについて説明します。この項の内容は、次のとおりです。


注意:

Oracle Application Serverでは、メール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インスタンスにあわせて更新する必要があります。

単一アプリケーションでサポートできるのはサーバー側添付またはクライアント側添付のみで、両方はサポートできません。

サーバー側添付を有効化するには、次のように設定をserverに変更します。

 sendmail.attachment=server
 
    

クライアント側添付を有効化するには、次のように設定をclientに変更します。

 sendmail.attachment=client
 
    

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


注意:

sendmail.propertiesファイルがない場合は、sendmail.propertiesnoneが設定されている場合と同様に扱われます。つまり、メール添付は無効化されます。


添付ファイルの送信

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

サーバー添付モードとクライアント添付モードのどちらの場合も、メールBeanには添付対象ファイルの名前を指定または取得するためのメソッドが組み込まれています。「SendMailBeanメソッドの説明」setServerAttachment()getServerAttachment()setClientAttachment()およびgetClientAttachment()に関する情報を参照してください。

メール・タグまたはメールBeanを使用すると、添付するサーバー側ファイルのリストにはデリミタとしてカンマまたはセミコロンを使用できますが、空白は使用できません(一部のオペレーティング・システムでファイル名に空白が許容される場合)。

添付の使用上の注意

メール・タグとメールBeanの両方に適用されるメール添付の使用上の注意事項は、次のとおりです。

SendMailBeanの説明

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

SendMailBeanの要件

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

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

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

SendMailBeanメソッドの説明

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


注意:

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


SendMailBeanのpublicメソッドは次のとおりです。

sendMailタグの説明

JSP開発者の利便性を考慮して、OC4JにはJSPページに電子メール機能を提供するためのsendMailタグが用意されています。この項では、このタグについて説明します。この項の内容は、次のとおりです。

sendMailタグを使用するには、ファイルojsputil.jarmail.jarおよびactivation.jarがインストール済でCLASSPATHに指定されていることを確認します。これらのファイルはOC4Jで提供されます。

現行の実装では、sendMailタグには固有のTLDファイルemail.tldがあります。このファイルをアプリケーションとともにデプロイし、タグを使用するJSPページに適切なtaglibディレクティブを使用する必要があります。Oracle Application Serverインストールの場合、TLDファイルは既知のタグ・ライブラリ・ディレクトリにあります。taglibディレクティブと既知のタグ・ライブラリ・ディレクトリについては、Oracle Application Server Containers for J2EE Support for JavaServer Pages開発者ガイド 10gを参照してください。

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>
 
    

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

smaildef.gifのテキスト説明は次にあります。

画像smaildef.gifのテキスト説明

また、この画面は、ホストgmail.oraclecorp.comを介したbrian.wright@oracle.comからblodney.treehut@oracle.comへのメッセージに関するユーザー入力のサンプルも示しています。

smailtst.gifのテキスト説明は次にあります。

画像smailtst.gifのテキスト説明

ファイル・アクセスJavaBeansおよびタグ

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

この項では、これらの機能について説明します。この項の内容は、次のとおりです。


注意:

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


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

開発者は、ユーザーがファイルをアップロードまたはダウンロードできるように、アプリケーションのプログラミングにカスタム・タグまたはJavaBeansを使用できます。いずれの場合も、アプリケーションはユーザーがクライアント・システム上のアップロード対象ファイルの位置またはダウンロード先をブラウザで指定できるようにプログラミングされます。OC4Jには、アップロードするJSPページ用に便利なタグ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ページ内で、またはhttpUploadタグをdbOpenタグ内でネストした結果として暗黙的に提供できます(ConnBean JavaBeanとdbOpenタグについては、「データ・アクセスJavaBeansおよびタグ」を参照してください)。


注意:

Oracle9iASリリース2(9.0.3)では、java.sql.Connectionのサポート対象はファイル・アクセスBeanのみで、タグは対象外です。


また、アップロードBeanまたはタグの属性を介して宛先を指定する必要もあります。宛先は、単にデータベース表のprefix列に入力されるJava文字列値です。接頭辞はファイル・システムのパスと等価です。

ファイル・データは、データベースにBLOBまたはCLOBとして書き込まれます(どちらを使用するかはアップロードBeanまたはタグの属性を介して指定します)。

デフォルトのfileaccess表を使用しない場合は、アップロードBeanまたはタグの属性を使用して、データベース表名と、ファイル・データ、ファイル接頭辞、ファイル名が書き込まれる各列の名前を指定してください。他に使用する表は、次のようにfileaccessのパターンに準拠する必要があります。


注意:

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

  • ConnBeanJspScopeListenerインタフェースを使用します。このインタフェースは必須です。


アップロード時のセキュリティ上の考慮事項

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

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

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で提供されるファイル・アップロードJavaBean(HttpUploadBean)およびファイル・ダウンロードJavaBean(HttpDownloadBean)の属性とメソッドについて説明します。

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

JavaBean仕様に準拠するために、ファイル・アップロードJavaBeanとファイル・ダウンロードJavaBeanには、引数なしのコンストラクタがあります。


注意:

ファイル・アップロードJavaBeanとファイル・ダウンロードJavaBeanを使用するには、ファイルojsputil.jarがインストール済でCLASSPATHに指定されていることを確認します。このファイルはOC4Jで提供されます。


HttpUploadBean

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

HttpUploadBeanは、HttpDownloadBeanの場合と同様に、それ自体は公開使用を意図していないHttpFileAccessBeanを拡張します。

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

必須属性の概要

HttpUploadBeanの必須属性は、次のとおりです。

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

メソッド

ここでは、HttpUploadBeanのpublicメソッドについて説明します。


注意:

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リクエスト・オブジェクトを指定する必要があります。これにより、ベース・ディレクトリを指定するfileaccess.propertiesファイルをBeanで検索できます。

メソッド

ここでは、HttpDownloadBeanのpublicメソッドについて説明します。


注意:

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

たとえば、OC4Jデモでは、コンテキスト・パス/j2ee/servlet(OC4JのデフォルトWebアプリケーションのコンテキスト・ルート、Oracle HTTP ServerとApache Jservプロトコルを使用)でサーブレット名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がインストール済でCLASSPATHに指定されていることを確認します。このファイルはOC4Jで提供されます。

タグ・ライブラリ・ディスクリプタ・ファイルfileaccess.tldをアプリケーションとともにデプロイし、このライブラリを使用するJSPページには適切なtaglibディレクティブを使用する必要があります。Oracle Application Serverインストールでは、TLDファイルは既知のタグ・ライブラリ・ディレクトリにあります。taglibディレクティブと既知のタグ・ライブラリ・ディレクトリについては、Oracle Application Server Containers for J2EE Support for JavaServer Pages開発者ガイド 10gを参照してください。


注意:

  • ここではタグ構文で接頭辞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を名前でインスタンス化できます。タグの1つはuseBeanタグで、標準JavaBeanの起動に使用する標準jsp: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 Specification, Version 2.2(以上)に従って使用されます。つまり、次のようにします。

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

EJBタグの説明

この項では、OC4JのEJBタグの構文と属性について説明します。

EJBタグを使用するには、ファイルojsputil.jarがインストール済でCLASSPATHに指定されていることを確認します。このファイルはOC4Jで提供されます。

タグ・ライブラリ・ディスクリプタ・ファイルejbtaglib.tldをアプリケーションとともにデプロイし、このライブラリを使用するJSPページには適切なtaglibディレクティブを使用する必要があります。Oracle Application Serverインストールでは、TLDファイルは既知のタグ・ライブラリ・ディレクトリにあります。taglibディレクティブと既知のタグ・ライブラリ・ディレクトリについては、Oracle Application Server Containers for J2EE Support for JavaServer Pages開発者ガイド 10gを参照してください。


注意:

  • ここではタグ構文で接頭辞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がインスタンス化された後、同じEJBインスタンスを使用する以降のuseBeanタグには、value属性およびネストしたcreateBeanタグは不要です。


注意:

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インスタンスのコレクションを反復します。エンティティBeanの標準ファインダ・メソッドはコレクションを戻すため、これはエンティティBeanの場合に標準的です。

開始タグ内で、ホーム・インタフェースからのファインダの結果を介してコレクションを取得します。タグ本体で、必要に応じてコレクションを反復します。


注意:

  • このタグのセマンティクスは、より汎用的なiterateユーティリティ・タグと同じです(「ユーティリティiterateタグ」を参照)。このタグは、利便性を考慮してEJBタグ・ライブラリにコピーされています。

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


構文

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

本体は、コレクション内のEJBごとに1度ずつ評価されます。

属性

 <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タグの使用例としてセッションBeanの使用例とエンティティBeanの使用例を1つずつ示します。

EJBタグのセッション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タグのエンティティ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がインストール済でCLASSPATHに指定されていることを確認します。このファイルはOC4Jで提供されます。

タグ・ライブラリ・ディスクリプタ・ファイルutiltaglib.tldをアプリケーションとともにデプロイし、このライブラリを使用するJSPページには適切なtaglibディレクティブを使用する必要があります。Oracle Application Serverインストールでは、TLDファイルは既知のタグ・ライブラリ・ディレクトリにあります。taglibディレクティブと既知のタグ・ライブラリ・ディレクトリについては、Oracle Application Server Containers for J2EE Support for JavaServer Pages開発者ガイド 10gを参照してください。


注意:

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

  • このマニュアルで使用しているタグ構文の表記規則の概要は、「タグ構文の記号と注意」を参照してください。


表示タグ

この項では、次のタグについて説明します。

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>
 
    

本体は、コレクション内の要素ごとに1度ずつ評価されます。

属性

 <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 Specification, Version 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 />