Oracle9iAS Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス リリース9.0.3 部品番号 J06903-01 |
|
このトピックでは、JSPページで使用できるOC4Jの一般的なユーティリティ機能について説明します。次の機能が含まれます。
多くの場合、Webサイトの状態またはユーザー操作に基づいて、電子メール・メッセージをWebアプリケーションから送信できると便利です。Sun社では、このために、プラットフォームやプロトコルに依存しないフレームワークの仕様を定めました。これは、JavaMail APIと呼ばれ、javax.mail
パッケージとサブパッケージを使用します。
利便性向上のために、Oracleには、サーブレットやJSPページを介して電子メール機能を使用できるように、このJavaMail APIに基づいたJavaBeanとJSPカスタム・タグが用意されています。 Beanとタグは、OC4Jが提供する他のJavaBeansやカスタム・タグと同様、JSP標準とサーブレット標準に基づいて実装されます。
このセクションは、次の内容で構成され、メールJavaBeanとメール・タグについて説明します。
JavaMail APIの詳細は、次のSun社のWebサイトを参照してください。
http://java.sun.com/products/javamail/1.2/docs/javadocs/index.html
メールJavaBean(SendMailBean
)またはメール・タグ(sendMail
)を使用するときは、次の点に注意してください。
mail.jar
ファイル(JavaMailパッケージを含む)とJavaBeans Activation Framework(JAF)のjaf.jar
ファイルが、クラスパスに存在している必要があります。これらのファイルは、OC4Jに含まれています。
sendmail.properties
が、アプリケーションの/WEB-INF
ディレクトリに存在する必要があります。(OC4Jデモ・インスタンスでは、このファイルはデフォルトでこのディレクトリに存在していますが、添付は無効化されています。)「添付の有効化」を参照してください。
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
複数設定するとエラーになります。
メール・タグでサーバー・サイド添付が有効化されている場合、1つ以上のサーバー・サイド・ファイルをメッセージに添付するには、serverAttachment
タグ属性を使用します。クライアント・サイド添付が有効化されている場合、クライアント・サイド・ファイル(最大1ファイル)をメッセージに添付するには、clientAttachment
タグ属性を使用します。「sendMailタグの説明」を参照してください。1つのアプリケーションでサポートできるのは、2つの添付モードのいずれか1つです。両方はサポートできません。
サーバー添付モードとクライアント添付モードの両方のメールBeanには、添付ファイルの名前を指定または取得するメソッドが含まれています。setServerAttachment()
、getServerAttachment()
、setClientAttachment()
およびgetClientAttachment()
の詳細は、「SendMailBeanメソッドの説明」を参照してください。
メール・タグまたはメールBeanでは、サーバー・サイド・ファイルのリストは、カンマ区切りまたはセミコロン区切りで指定できます。ただし、スペース区切りは、ファイル名にスペースが許可されているオペレーティング・システムの場合でも使用できません。
メール添付に関する次の使用方法は、メール・タグとメールBeanの両方に適用されます。
httpUpload
タグはバックグラウンドで使用されます。つまり、ファイルはOC4Jサーバー・マシン上の一時的な場所にアップロードされた後、メッセージが送信されると削除されます。httpUpload
タグのすべての制限がクライアント・サイドのメール添付にも適用されます。「ファイル・アクセスJavaBeansとファイル・アクセス・タグ」を参照してください。
OC4Jが提供するoracle.jsp.webutil.email.SendMailBean
JavaBeanは、サーブレットからJSPアプリケーションまでの電子メール機能をサポートします。これをJSPページで使用するには、標準のjsp:useBean
タグを使用してインスタンス化できます。(ただし、JSPアプリケーションの場合は、通常SendMailBean
ではなくsendMail
タグを使用します。「sendMailタグの説明」を参照してください。)
SendMailBean
を使用するには、ojsputil.jar
、mail.jar
およびactivation.jar
の各ファイルがインストール済で、クラスパスに存在していることを確認します。これらのファイルは、OC4Jによって提供されます。
SendMailBean
をコードで使用する場合は、次の内容を指定する必要があります。
送信者の指定には、setSender()
メソッドを使用します。
プライマリ受信者(複数可)の指定には、setRecipient()
メソッドを使用します。
javax.mail.Session
)
JavaMailセッションは、次の3つの方法で設定されます。
setHost()
メソッドを使用してホスト・システムを指定します。この場合、JavaMailセッション・オブジェクトは自動的に作成されます。
setMailSession()
メソッドを使用して、JavaMailセッション・オブジェクトを直接指定します。
setSession()
メソッドを使用して、JSPページ・コンテキストにある「セッション文字列javax.mail.Session
オブジェクト」のペアでアクセスできる既存のJavaMailセッション・オブジェクトの名前を指定します。この場合は、sendMessage()
メソッドをコールして電子メール・メッセージを送信するときに、ページ・コンテキスト・インスタンスを入力パラメータとして指定する必要があります。
その他のSendMailBean
の属性は、すべてオプションです。
このセクションでは、メール・メッセージの送信、メール・セッションのクローズおよびBean属性の設定と取得に使用するSendMailBean
メソッドのリストを示し、内容を説明します。
次に、パブリックSendMailBean
メソッドを示します。
void sendMessage()
void sendMessage(javax.servlet.jsp.PageContext)
電子メール・メッセージの送信には、sendMessage()
メソッドを使用します。
setSession()
メソッドを使用してJavaMailセッションを設定する場合は、sendMessage(PageContext)
シグネチャを使用して、指定のメール・セッション・インスタンスを保持しているページ・コンテキスト・インスタンスを指定する必要があります。
setMailSession()
メソッドまたはsetHost()
メソッドを使用してJavaMailセッションを設定する場合は、sendMessage()
メソッドの使用時にページ・コンテキストを指定する必要はありません。
ただし、ページ・コンテキスト・インスタンスの指定は、「text」コンテンツ・タイプの電子メール・メッセージのキャラクタ・セットを決定する場合に必要となることに注意してください。sendMessage()
メソッドの起動時にページ・コンテキストを指定しない場合、デフォルトのキャラクタ・セットは、ISO-8859-1
になります。ページ・コンテキストを指定した場合、デフォルトのキャラクタ・セットは、ページ・コンテキストのresponse
オブジェクトのキャラクタ・セットになります。コンテンツ・タイプとキャラクタ・セットは、setContentType()
メソッドを使用して直接指定することもできます。
void close()
JavaMailセッション・インスタンスをSendMailBean
インスタンスから解放する場合は、このメソッドを使用します。このメソッドによって、実際にセッションがクローズされることはありません。
void setBcc(String s)
メッセージのブラインド・コピーを受信するには、ID(電子メール・アドレスまたは別名)のスペースまたはカンマ区切りのリストを指定します。これらのIDは、メッセージの「Cc」フィールドには表示されません。
String getBcc()
メッセージのブラインド・コピーを受信するには、IDリストを取得します。
void setCc(String s)
メッセージのコピーを受信するには、ID(電子メール・アドレスまたは別名)のスペースまたはカンマ区切りのリストを指定します。これらのIDは、メッセージの「Cc」フィールドに表示されます。
String getCc()
メッセージのコピーを受信するには、IDリストを取得します。
void setContent(String s)
電子メール・メッセージのコンテンツを指定します。
String getContent()
電子メール・メッセージのコンテンツを取得します。
void setContentEncoding(String s)
電子メール・メッセージのコンテンツ・エンコーディングを指定します。Base64エンコーディングには「base64
」または「B
」を、quoted-printableエンコーディングには「quoted-printable
」または「Q
」を、7ビット・エンコーディングには「7bit
」を、8ビット・エンコーディングには「8bit
」をそれぞれ指定します。これらのコンテンツ・エンコーディングは、JavaMail標準とRFC 2047標準に含まれています。エントリには、大/小文字区別がありません。
デフォルトのコンテンツ・エンコーディングの設定は、「null
」です。この場合、メッセージとヘッダーのエンコーディングは、コンテンツによって決まります。エンコードされる文字の大部分がASCIIの場合は、quoted-printableエンコーディングが使用されます。それ以外の場合は、base64
エンコーディングが使用されます。
String getContentEncoding()
メッセージのコンテンツ・エンコーディングを取得します。
void setContentType(String s)
MIMEタイプおよび必要に応じてメッセージのキャラクタ・セットを、次の例のように指定します。
setContentType("text/html"); setContentType("text/html; charset=US-ASCII");
デフォルトのMIMEタイプの設定は、「text/plain
」です。ただし、このMIMEタイプまたは他の「text/
xxxx
」MIMEタイプの設定を明示的に指定しない場合、キャラクタ・セットを指定できません。
デフォルトのキャラクタ・セットは、sendMessage()
メソッドをコールし電子メール・メッセージを送信するときに、JSPページ・コンテキスト・インスタンスを指定するかどうかによって決まります。ページ・コンテキストを指定しない場合、デフォルトのキャラクタ・セットは、ISO-8859-1
になります。ページ・コンテキストを指定した場合、デフォルトのキャラクタ・セットは、ページ・コンテキストのresponse
オブジェクトのキャラクタ・セットになります。
String getContentType()
メッセージのMIMEタイプ、および適用可能な場合は、文字コードを取得します。
void setHost(String s)
JavaMailセッションの設定方法の1つは、メール・サーバー・ホスト名を指定する方法です。この指定で、SendMailBean
はセッションを自動的に取得します。このためには、setHost()
メソッドを使用して、「gmail.oraclecorp.com
」などのメール・ホスト名を指定します。
JavaMailセッションの設定の概要は、「SendMailBeanの要件」を参照してください。
String getHost()
指定したメール・サーバーのホスト名を取得します。
void setMailSession(javax.mail.Session sessobj)
JavaMailセッションの設定方法の1つは、セッション・オブジェクトを直接指定することです。このためには、setMailSession()
メソッドを使用して、javax.mail.Session
インスタンスを指定します。
JavaMailセッションの設定の概要は、「SendMailBeanの要件」を参照してください。
javax.mail.Session getMailSession()
このメソッドは、以前に設定したJavaMailセッションを戻します。
void setRecipient(String s)
メッセージのプライマリ受信者のID(電子メール・アドレスまたは別名)のスペースまたはカンマ区切りのリストを指定します。これらのIDは、メッセージの「To」フィールドに表示されます。最低1名の受信者を指定する必要があります。
String getRecipient()
メッセージのプライマリ受信者のIDリストを取得します。
void setSender(String s)
メッセージ送信者のID(電子メール・アドレスまたは別名)を指定します。このIDは、メッセージの「From」フィールドに表示されます。送信者は必ず指定する必要があります。
String getSender()
メッセージ送信者のIDを取得します。
void setSession(String s)
JavaMailセッションの設定方法の1つは、JSPページ・コンテキスト・オブジェクトにすでに存在しているjavax.mail.Session
インスタンスの名前を指定する方法です。このためには、setSession()
メソッドを使用して、そのセッション・インスタンの名前を指定します。
この場合は、sendMessage()
メソッドを使用して電子メール・メッセージを送信するとき、javax.servlet.jsp.PageContext
インスタンスを入力として指定する必要があります。
JavaMailセッションの設定の概要は、「SendMailBeanの要件」を参照してください。
String getSession()
セッション・インスタンスの名前を取得します。
void setSubject(String s)
メッセージ件名の行を指定します。
String getSubject()
メッセージ件名の行を取得します。
void setServerAttachment(String s)
電子メール・メッセージに添付するサーバー・サイド・ファイルに関するカンマまたはセミコロン区切りのファイル名(パスを含む)リストを指定します。ファイルは、OC4Jサーバー・マシン上にある必要があります。サーバー・サイド添付は、sendmail.properties
ファイルで有効化する必要があります。
String getServerAttachment()
メッセージに添付するサーバー・サイド・ファイルのファイル名リストを取得します。このリストは、ユーザー確認ページなどを表示する場合に便利です。
void setClientAttachment(String s)
電子メール・メッセージに添付するクライアント・サイド・ファイル(最大1ファイル)のパスとファイル名を指定します。ファイルは、ユーザーのクライアント・マシン上にある必要があります。クライアント・サイド添付は、sendmail.properties
ファイルで有効化する必要があります。
String getClientAttachment()
メッセージに添付するクライアント・サイド・ファイルの名前を取得します。この名前は、ユーザー確認ページなどを表示する場合に便利です。
注意: メール添付の関連情報は、「メール添付」を参照してください。 |
JSP開発者が便利なように、OC4Jには、JSPページに電子メール機能を設定するsendMail
タグが用意されています。このセクションでは、このタグについて説明します。次の項目が含まれます。
SendMailBean
タグを使用するには、ojsputil.jar
、mail.jar
およびactivation.jar
の各ファイルがインストール済で、クラスパスに存在していることを確認します。これらのファイルは、OC4Jによって提供されます。
現在の実装では、sendMail
タグには独自のTLDファイル、email.tld
が含まれています。このファイルは、アプリケーションとともにデプロイされている必要があります。また、タグを使用するJSPページには、適切なtaglib
ディレクティブが存在する必要があります。Oracle9iASのインストール時、TLDファイルは、予約済のタグ・ライブラリ・ディレクトリに置かれます。taglib
ディレクティブと予約済のタグ・ライブラリ・ディレクトリの詳細は、『Oracle9iAS Containers for J2EE JavaServer Pages開発者ガイド』を参照してください。
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
タグを使用する場合は、次の点に注意してください。
sender
属性とrecipient
属性は必須です。また、host
属性またはsession
属性のいずれかが必須です。
serverAttachment
を使用するには、サーバー・サイド添付がsendmail.properties
ファイルで有効化されていることが前提です。同様に、clientAttachment
を使用するには、クライアント・サイド添付がsendmail.properties
ファイルで有効化されていることが前提です。1つのアプリケーションで有効化できるモードは1つのみです。「添付の有効化」を参照してください。
serverAttachment
設定のファイル名は、カンマまたはセミコロンで区切ります。スペースで区切ることはできません。
taglib
ディレクティブに指定できます。
sendMail
タグは、次の属性をサポートします。
host
(session
が指定されていない場合は必須): 「gmail.oraclecorp.com
」などの適切なメール・ホスト名です。メール・メッセージに対するJavaMailセッション・オブジェクトの作成時に使用されます。JavaMailセッションは、session
属性を使用して決定することもできます。
session
(host
が指定されていない場合は必須): JSPページ・コンテキストから取得できる既存のJavaMailセッション・オブジェクトの名前です。JavaMailセッションは、host
属性を使用して決定することもできます。
sender
(必須): メッセージ送信者のID(電子メール・アドレスまたは別名)です。このIDは、メッセージの「From」フィールドに表示されます。
recipient
(必須): メッセージのプライマリ受信者のIDのスペースまたはカンマ区切りのリストです。これらのIDは、メッセージの「To」フィールドに表示されます。
cc
: メッセージのコピーを受信するIDのスペースまたはカンマ区切りのリストです。これらのIDは、メッセージの「Cc」フィールドに表示されます。
bcc
: メッセージのブラインド・コピーを受信するIDのスペースまたはカンマ区切りのリストです。これらのIDは、メッセージの「Cc」フィールドには表示されません。
subject
: メッセージ件名の行です。
contentType
: メッセージのMIMEタイプです。キャラクタ・セットも必要に応じて指定できます。次に例を示します。
contentType="text/html" contentType="text/html; charset=US-ASCII"
デフォルトのMIMEタイプの設定は、「text/plain
」です。ただし、このMIMEタイプまたは他のtext/
xxxx
MIMEタイプを明示的に指定しない場合、キャラクタ・セットを指定できません。
デフォルトのキャラクタ・セットは、JSPページ・コンテキストのresponse
オブジェクトのキャラクタ・セットです。
contentEncoding
: Base64エンコーディングには「B
」または「base64
」を、quoted-printable エンコーディングには「Q
」または「quoted-printable
」を、7ビット・エンコーディングには「7bit
」を、8ビット・エンコーディングには「8bit
」をそれぞれ指定します。これらは、標準のJavaMailエンコーディングおよびRFC 2047エンコーディングです。エントリには、大/小文字区別がありません。
デフォルトのコンテンツ・エンコーディング設定は、「null
」です。この場合、メッセージとヘッダーのエンコーディングは、コンテンツによって決まります。エンコードされる文字の大部分がASCIIの場合は、quoted-printableエンコーディングが使用されます。それ以外の場合は、base64
エンコーディングが使用されます。
serverAttachment
: 電子メールに添付するサーバー・サイド・ファイルのカンマまたはセミコロン区切りのリストです。サーバー・サイド添付は、sendmail.properties
ファイルで有効化する必要があります。(サーバー・サイド添付またはクライアント・サイド添付のいずれかを有効化できますが、両方とも有効化することはできません。)
次に例を示します。
serverAttachment="/tmp/confirm.pdf,/home/schedule.doc"
clientAttachment
: 電子メール・メッセージに添付するクライアント・サイド・ファイル(最大1ファイル)の名前です。クライアント・サイド添付は、sendmail.properties
ファイルで有効化する必要があります。(サーバー・サイド添付またはクライアント・サイド添付のいずれかを有効化できますが、両方とも有効化することはできません。)
次に例を示します。
clientAttachment="c:\finance\budget02.xls"
注意: 電子メール添付の関連情報は、「メール添付」を参照してください。 |
次に、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>
このアプリケーションを実行すると、最初に次のデフォルトの画面が表示されます。
次は、ホストgmail.oraclecorp.com
を介してbrian.wright@oracle.com
からblodney.treehut@oracle.com
に送信されるメッセージのユーザー入力のサンプルです。
OC4Jには、JSPページとサーブレットに便利なファイルのアップロード機能とダウンロード機能を追加する、標準準拠のタグ・ライブラリとJavaBeansが用意されています。ファイルは、ファイル・システムやデータベースとの間でアップロードしたりダウンロードすることができます。
このセクションでは、これらの機能を説明します。構成は次のとおりです。
開発者は、カスタム・タグまたはJavaBeansのいずれかを必要に応じて使用し、ユーザーによるファイルのアップロードまたはダウンロードを可能にするアプリケーションをプログラミングできます。いずれの場合も、アプリケーションは、アップロード元のクライアント・システム上のブラウザまたはダウンロード先のクライアント・システム上のブラウザを介して、ユーザーがファイルを指定するようにプログラミングされます。アップロード用のJSPページについて、OC4Jには、このためのフォームを作成する便利なタグhttpUploadForm
が用意されています。
接続先のファイル・システムまたはデータベースの場所の指定を含め、アップロードの処理には、HttpUploadBean
JavaBeanまたはhttpUpload
タグを使用します。ソース・ファイル・システムまたはデータベースの場所の指定を含め、ダウンロードの処理には、HttpDownloadBean
またはhttpDownload
タグを使用します。Beanは、HttpFileAccessBean
を拡張します。ただし、これは、公開使用を目的としていません。すべてのBeanは、oracle.jsp.webutil.fileaccess
パッケージにあります。
ユーザーがアップロードするファイルの場所をJSPページに指定するためのフォームは、httpUploadForm
タグを使用して作成できます。このタグによって、ユーザーはアップロードするファイルを選択し、必要な複数の部分に分割されたHTTPリクエストを作成できます。標準のHTMLフォームを使用しても、リクエストを作成できます。
HttpUploadBean
JavaBeanまたはhttpUpload
タグを使用して、複数の部分に分割されたフォームでエンコードされたデータ・ストリームを受信および処理し、ファイル・システムまたはデータベースのいずれかの適切な場所にそのファイルを書き込みます。ターゲット・ファイルまたはデータベース行がすでに存在する場合、前のデータを上書きするかどうかを決定できる機能があります。
接続先がファイル・システム内の場合は、ベース・ディレクトリを指定するプロパティ・ファイルを用意する必要があります。プロパティ・ファイルは、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)では、 |
さらに、アップロードBeanまたはアップロード・タグの属性を使用して接続先を指定する必要があります。接続先は、データベース表の接頭辞列に配置されるJava文字列の値です。接頭辞は、ファイル・システム・パスと同じです。
ファイル・データは、BLOBまたはCLOB(アップロードBeanまたはアップロード・タグの属性によって指定)としてデータベースに書き込まれます。
デフォルトのfileaccess
表を使用しない場合は、アップロードBeanまたはアップロード・タグの属性を使用して、データベース表の名前およびファイル・データ、ファイル接頭辞およびファイル名を格納する列の名前を指定する必要があります。それ以外の表を使用する場合は、次のように、fileaccess
のパターンに準拠する必要があります。
注意:
|
データベースへのアップロードの場合、データベース表には、指定のファイルに対する特定の認可ユーザーを示す列がありません。したがって、すべてのユーザーは、ファイルの接頭辞を知らなくても、他のユーザーがアップロードしたファイルを警告なしに参照できます。これを防止するために、各接頭辞に適切なユーザー名を付加できます。
HttpDownloadBean
JavaBeanまたはhttpDownload
タグは、次のように使用します。
次の点に注意してください。
使用可能なファイルのリストが表示された後、ユーザーはそのリストから一度に1つのファイルをダウンロードできます。
再帰的なダウンロードを行うかどうかを指定する機能もあります。このダウンロードでは、サブディレクトリ内のファイルまたはデータベース接頭辞の追加情報を含むファイルも、ダウンロード可能になります。データベースのダウンロードの場合の接頭辞はファイル・システム・パスと同じで、ファイルを階層にグループ化するために使用できます。データベースからの再帰的なダウンロードの例として、接頭辞に/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データをフェッチします。(詳細は、「ダウンロード・サーブレット」を参照してください。)
ダウンロードの場合は、ユーザーがソース(サーバー・サイド)・ファイル・システムまたはデータベースの内容を参照できる機能に制限を設けることを検討してください。警告がない場合は、次のような例が発生する可能性があります。
*
」(ユーザー入力で指定される可能性がある)によって、ベース・ディレクトリの下にあるすべてのディレクトリがダウンロードの対象になり、ユーザーが選択できるように、すべてのファイルの名前が表示されます。
source
文字列(ユーザー入力で指定される可能性がある)で始まる接頭辞を持つすべてのファイルがダウンロードの対象となり、ファイル名がすべて表示されます。「*
」のソースは、すべての接頭辞に一致します。
これが心配な場合は、次のような保護手段が考えられます。
source
値「*
」を受け入れない方法。
source
値を自動的に付加して、ユーザーがアクセスできる領域を制限する方法。
このセクションでは、OC4Jが提供するファイル・アップロードおよびダウンロード用JavaBeans(HttpUploadBean
とHttpDownloadBean
)の属性とメソッドについて説明します。
OC4Jが提供する、ファイルのダウンロードを実際に実行するDownloadServlet
、およびファイルのアップロードとダウンロードに関連する例外でファイル・アクセスJavaBeansが使用するFileAccessException
クラスについても簡単に説明します。
JavaBeanの仕様に準拠して、ファイル・アップロードおよびダウンロード用JavaBeansには、引数なしのコンストラクタがあります。
注意: ファイル・アップロードおよびダウンロード用JavaBeansを使用するには、 |
oracle.jsp.webutil.fileaccess.HttpUploadBean
JavaBeanには、アップロードに使用する情報を指定するためのsetterメソッドが多数あります。また対応するほとんどのgetterメソッドも含まれています。必須属性と適切な属性をすべて設定した後、upload()
メソッドを使用してアップロードを実行します。アップロードされたファイルの名前を表示するメソッドもあります。そのため通常は、情報を含むメッセージをブラウザに提供できます。
HttpUploadBean
は、HttpDownloadBean
と同様に、HttpFileAccessBean
を拡張します。ただし、これ自体は、公開使用を目的としていません。
関連情報は、「ファイル・アップロードの概要」を参照してください。
次のリストは、HttpUploadBean
の必須属性のサマリーです。
destination
destinationType
、connection
fileaccess
表以外のデータベース表へのアップロードに必須: table
、prefixColumn
、fileNameColumn
、dataColumn
fileType
さらに、ファイル・システムへのアップロードでは、setBaseDir()
メソッドをコールして、サーブレット・コンテキストとHTTPリクエスト・オブジェクトを指定する必要があります。その結果、Beanはベース・ディレクトリを指定するfileaccess.properties
ファイルを検出できます。
次に、HttpUploadBean
のパブリック・メソッドを説明します。
void upload(javax.servlet.http.HttpServletRequest req)
throws FileAccessException
必須のBean属性と適切なBean属性をすべて設定した後、このメソッドを使用してアップロードします。req
パラメータは、複数の部分に分割されたフォームでエンコードされたファイルを含むHTTPリクエスト・インスタンスです。JSPページの場合は、暗黙的なrequest
オブジェクトを使用します。
void setBaseDir(javax.servlet.ServletContext sc,
javax.servlet.http.HttpServletRequest req)
throws FileAccessException
ファイル・システムへのアップロードでは、このメソッドを使用してベース・ディレクトリとして何を使用するかを決定します。この情報は、アプリケーションの/WEB-INF
ディレクトリにあるfileaccess.properties
ファイルから取得されます。このファイルは、サーブレット・コンテキストの入力パラメータを使用して検出されます。baseDir
設定とdestination
設定の組合せによって、アップロード・ディレクトリへの絶対パスが指定されます。
req
パラメータは、ベース・ディレクトリ情報のリクエストに使用するサーブレット・リクエスト・インスタンスです。JSPページの場合は、暗黙的なrequest
オブジェクトを使用します。
このメソッドは、データベースのアップロードには関係ありません。
void setDestination(String destination)
このメソッドは常に必須です。
ファイル・システムへのアップロードでは、destination
とベース・ディレクトリの組合せで、アップロード・ディレクトリへの絶対パスが指定されます。
データベースへのアップロードでは、destination
がファイル接頭辞として使用されます。(ベース・ディレクトリはありません。)この接頭辞はファイル・システム・パスと同じで、ファイルを階層にグループ化するために使用できます。接続先文字列には、「.
」や「/
」などのセパレータ文字を含めることができます。
void setDestinationType(String destinationType)
throws FileAccessException
void setDestinationType(int destinationType)
throws FileAccessException
オーバーロードされたsetDestinationType()
メソッドを使用して、アップロードの対象がファイル・システムであるかデータベースであるかを指定します。
データベースへのアップロードでは、destinationType
を次のいずれかに設定します。文字列「database
」、定義されているString
定数FileAccessUtil.DATABASE
、int
型の値の1、または定義されているint
型の定数FileAccessUtil.LOCATION_TYPE_DATABASE
。
ファイル・システムへのアップロードはデフォルトです。ただし、これを明示的に指定する場合は、destinationType
を次のいずれかに設定します。文字列「filesystem
」、定義されているString
定数FileAccessUtil.FILESYSTEM
、int
型の値の0、または定義されているint
型の定数FileAccessUtil.LOCATION_TYPE_FILESYSTEM
。
FileAccessUtil
は、oracle.jsp.webutil.fileaccess
パッケージ内にあります。
String getDestinationType()
接続先情報を取得します。文字列を返すgetterメソッドのみ提供されています。
void setOverwrite(String overwrite)
throws FileAccessException
void setOverwrite(boolean overwrite)
オーバーロードされたsetOverwrite()
メソッドを使用して、既存ファイルの上書きまたは同じファイル名と接頭辞を持つ行の更新を行います。このメソッドは、ファイル・システムとデータベースのアップロード両方に関係しています。
上書きはデフォルトで有効化されていますが、文字列「true
」またはブール値true
のoverwrite
設定で、明示的に有効化できます。上書きの無効化は、文字列「false
」またはブール値false
の設定で行います。文字列の設定には、大/小文字区別がありません。ここで示した以外の設定は、受け入れられません。
void setFileType(String fileType)
throws FileAccessException
void setFileType(int fileType) throws FileAccessException
データベースへのアップロードでは、オーバーロードされたsetFileType()
メソッドを使用して、データの格納を、バイナリ・データ用のBLOB(デフォルト)で行うか、文字データ用のCLOBで行うかを指定します。CLOBの場合は、fileType
を次のいずれかに設定します。文字列「character
」、定義されているString
定数FileAccessUtil.CHARACTER_FILE
、またはint
型の値の1。BLOBを明示的に指定するには、fileType
を次のいずれかに設定します。文字列「binary
」、定義されているString
定数FileAccessUtil.BINARY_FILE
、またはint型の値の0。文字列の設定には、大/小文字区別がありません。ここで示した以外の設定は、受け入れられません。
FileAccessUtil
は、oracle.jsp.webutil.fileaccess
パッケージ内にあります。
String getFileType()
ファイル・タイプ情報を取得します。文字列を返すgetterメソッドのみ提供されています。
void setTable(String tableName)
デフォルトのfileaccess
表以外のデータベース表へのアップロードでは、このメソッドを使用して表名を指定します。
String getTable()
表名を取得します。
void setPrefixColumn(String prefixColumnName)
デフォルトのfileaccess
表以外のデータベース表へのアップロードでは、このメソッドを使用してファイル接頭辞を格納する列の名前を指定します。(fileaccess
では、この列名は、fileprefix
です。)destination
値がこの列に書き込まれます。
String getPrefixColumn()
ファイル接頭辞を格納する列名を取得します。
void setFileNameColumn(String fileNameColumnName)
デフォルトのfileaccess
表以外のデータベース表へのアップロードでは、このメソッドを使用してファイル名を格納する列の名前を指定します。(fileaccess
では、この列名は、filename
です。)ファイル名には、ファイル名の拡張子が含まれます。
String getFileNameColumn()
ファイル名を格納する列名を取得します。
void setDataColumn(String dataColumnName)
デフォルトのfileaccess
表以外のデータベース表へのアップロードでは、このメソッドを使用してファイル・コンテンツを格納するBLOB列またはCLOB列の名前を指定します。(fileaccess
では、この列名は、data
です。)
String getDataColumn()
ファイル・コンテンツを格納する列名を取得します。
void setConnection(ConnBean conn)
void setConnection(java.sql.Connection conn)
データベース表(デフォルトの表またはそれ以外の表)へのアップロードでは、このオーバーロードされたメソッドを使用してデータベース接続を指定します。oracle.jsp.dbutil.ConnBean
または標準のjava.sql.Connection
型のいずれかのインスタンスを指定できます。ConnBean
JavaBeanの詳細は、「データベース接続用ConnBean」を参照してください。
Connection
インスタンスを使用する場合は、明示的なオープンとクローズが必要です。ConnBean
インスタンスの場合は、自動的に処理されます。
java.util.Enumeration getFileNames()
このメソッドは、アップロードされたファイルの名前を格納するEnumeration
インスタンスを戻します。(この機能は、httpUpload
タグでは使用できません。)
この例では、単純な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>
oracle.jsp.webutil.fileaccess.HttpDownloadBean
JavaBeanには、ダウンロードに使用する情報を指定するためのsetterメソッドが多数あります。また対応するほとんどのgetterメソッドも含まれています。必須属性と適切な属性をすべて設定した後、listFiles()
メソッドを使用して、ダウンロードするファイルのリストを表示します。実際のダウンロードでは、OC4Jが提供するDownloadServlet
を使用して一度に1つのファイルがダウンロードされます。「ダウンロード・サーブレット」を参照してください。
HttpDownloadBean
は、HttpUploadBean
と同様に、HttpFileAccessBean
を拡張します。ただし、これ自体は、公開使用を目的としていません。
関連情報は、「ファイル・アップロードの概要」を参照してください。
次のリストは、HttpDownloadBean
の必須属性のサマリーです。
source
sourceType
、connection
fileaccess
表以外のデータベース表からのアップロードに必須: table
、prefixColumn
、fileNameColumn
、dataColumn
fileType
さらに、ファイル・システムからのダウンロードでは、setBaseDir()
メソッドをコールして、サーブレット・コンテキストとHTTPリクエスト・オブジェクトを指定する必要があります。その結果、Beanはベース・ディレクトリを指定するfileaccess.properties
ファイルを検出できます。
次に、HttpDownloadBean
のパブリック・メソッドを説明します。
void listFiles(javax.servlet.http.HttpServletRequest req)
throws FileAccessException
必須のBean属性と適切なBean属性をすべて設定した後、このメソッドを使用してダウンロードするファイルのリストを表示します。これらのファイルは、ソース・ディレクトリにあるファイルか、ソース・データベース接頭辞に一致するファイルです。req
パラメータは、HTTPレスポンス・インスタンスです。JSPページの場合は、暗黙的なrequest
オブジェクトを使用します。
ファイル・リストから選択する場合は、DownloadServlet
へのHREF
リンクを作成し、そのリンクを各ファイルとファイル接頭辞に渡します。これにより、ユーザーは、ダウンロードする各ファイルのリンクを選択できます。
注意: |
java.util.Enumeration getFileNames()
このメソッドは、ダウンロードするファイルの名前を格納するEnumeration
インスタンスを戻します。このためには、listFiles()
メソッドがすでにコールされている必要があります。つまり、listFiles()
によって、ファイル名がメモリーおよびJSPページまたはサーブレットに書き込まれ、getFileNames()
によって、これらのファイル名がメモリーから読み込まれます。
void setBaseDir(javax.servlet.ServletContext sc,
javax.servlet.http.HttpServletRequest req)
throws FileAccessException
ファイル・システムからのダウンロードでは、このメソッドを使用してベース・ディレクトリとして何を使用するかを決定します。この情報は、アプリケーションの/WEB-INF
ディレクトリにあるfileaccess.properties
ファイルから取得されます。このファイルは、サーブレット・コンテキストの入力パラメータを使用して検出されます。baseDir
設定とsource
設定の組合せによって、ファイルのダウンロード元のディレクトリへの絶対パスが指定されます。
sc
パラメータは、アプリケーションのサーブレット・コンテキスト・インスタンスです。JSPページの場合は、暗黙的なapplication
オブジェクトを使用します。
req
パラメータは、ベース・ディレクトリ情報のリクエストに使用するHTTPリクエスト・インスタンス用です。JSPページの場合は、暗黙的なrequest
オブジェクトを使用します。
ベース・ディレクトリは、データベースからのダウンロードには関係ありません。
void setSource(String source)
このメソッドは常に必須です。
ファイル・システムからのダウンロードでは、source
とベース・ディレクトリの組合せによって、ファイルのダウンロード元のディレクトリへの絶対パスが指定されます。source
が「*
」に設定されている場合、ベース・ディレクトリの下にあるすべてのディレクトリがダウンロードの対象となります。
データベースからのダウンロードでは、source
がファイル接頭辞として使用されます(ベース・ディレクトリは関係ありません)。この接頭辞はファイル・システム・パスと同じで、ファイルを階層にグループ化するために使用できます。recurse
が有効な場合は、「%
」がsource
値に付加され、問合せのWHERE
句に適切なLIKE
句が含まれます。したがって、source
値と部分的に一致する接頭辞を持つすべてのファイルがダウンロードの対象となります。データベース表のすべての行が一致する必要がある場合は、source
を「*
」に設定します。
void setSourceType(String sourceType)
throws FileAccessException
void setSourceType(int sourceType)
throws FileAccessException
オーバーロードされたsetSourceType()
メソッドを使用して、ダウンロード元がファイル・システムであるかデータベースであるかを指定します。
データベースからのダウンロードでは、sourceType
を次のいずれかに設定します。文字列「database
」、定義されているString
定数FileAccessUtil.DATABASE
、int
型の値の1、または定義されているint
型の定数FileAccessUtil.LOCATION_TYPE_DATABASE
。
ファイル・システムからのダウンロードはデフォルトです。ただし、これを明示的に指定する場合は、sourceType
を次のいずれかに設定します。文字列「filesystem
」、定義されているString
定数FileAccessUtil.FILESYSTEM
、int
型の値の0、または定義されているint
型の定数FileAccessUtil.LOCATION_TYPE_FILESYSTEM
。
FileAccessUtil
は、oracle.jsp.webutil.fileaccess
パッケージ内にあります。
String getSourceType()
ソース・タイプ情報を取得します。文字列を返すgetterメソッドのみ提供されています。
void setRecurse(String recurse) throws FileAccessException
void setRecurse(boolean recurse)
オーバーロードされたsetRecurse()
メソッドを使用して、再帰的なダウンロードを有効または無効にします。この場合、ファイル・システムのサブディレクトリ内のファイルやデータベース接頭辞の追加情報を含むファイルも、ダウンロードの対象となります。データベースからの再帰的なダウンロードの例として、source
が「/user
」に設定されていると仮定します。再帰的なダウンロードでは、「/user/bill
」や「/user/mary
」、および「/user1
」、「/user2
」、「/user1/tom
」、「/user2/susan
」などの接頭辞を持つファイルに対しても一致を検出します。
再帰的なダウンロードはデフォルトで有効化されていますが、文字列「true
」またはブール値true
のrecurse
設定で、明示的に有効化できます。再帰的なダウンロードの無効化は、文字列「false
」またはブール値false
の設定で行います。文字列の設定には、大/小文字区別がありません。ここで示した以外の設定は、受け入れられません。
注意: 実際には、再帰的なダウンロードは、ファイル・システムのダウンロードにはあまり効果がありません。サーバーのサブディレクトリ構造に対応させてファイルをクライアントにダウンロードするには、そのサブディレクトリがすでに存在している必要があるためです。 |
void setFileType(String fileType)
throws FileAccessException
void setFileType(int fileType) throws FileAccessException
データベースからのダウンロードでは、オーバーロードされたsetFileType()
メソッドを使用して、データの格納を、バイナリ・データ用のBLOB(デフォルト)で行うか、文字データ用のCLOBで行うかを指定します。CLOBの場合は、fileType
を次のいずれかに設定します。文字列「character
」、定義されているString
定数FileAccessUtil.CHARACTER_FILE
、またはint
型の値の1。BLOBを明示的に指定するには、fileType
を次のいずれかに設定します。文字列「binary
」、定義されているString
定数FileAccessUtil.BINARY_FILE
、またはint型の値の0。文字列の設定には、大/小文字区別がありません。ここで示した以外の設定は、受け入れられません。
FileAccessUtil
は、oracle.jsp.webutil.fileaccess
パッケージ内にあります。
String getFileType()
ファイル・タイプ情報を取得します。文字列を返すgetterメソッドのみ提供されています。
void setTable(String tableName)
デフォルトのfileaccess
表以外のデータベース表からのダウンロードでは、このメソッドを使用して表名を指定します。
String getTable()
表名を取得します。
void setPrefixColumn(String prefixColumnName)
デフォルトのfileaccess
表以外のデータベース表からのダウンロードでは、このメソッドを使用してファイル接頭辞を格納する列の名前を指定します。(fileaccess
では、この列名は、fileprefix
です。)
String getPrefixColumn()
ファイル接頭辞を格納する列名を取得します。
void setFileNameColumn(String fileNameColumnName)
デフォルトのfileaccess
表以外のデータベース表からのダウンロードでは、このメソッドを使用してファイル名を格納する列の名前を指定します。(fileaccess
では、この列名は、filename
です。)ファイル名には、ファイル名の拡張子が含まれます。
String getFileNameColumn()
ファイル名を格納する列名を取得します。
void setDataColumn(String dataColumnName)
デフォルトのfileaccess
表以外のデータベース表からのダウンロードでは、このメソッドを使用してファイル・コンテンツを保持するBLOB列またはCLOB列の名前を指定します。(fileaccess
では、この列名は、data
です。)
String getDataColumn()
ファイル・コンテンツを格納する列名を取得します。
void setConnection(ConnBean conn)
void setConnection(java.sql.Connection conn)
データベース表(デフォルトの表やそれ以外を含む)からのダウンロードでは、このメソッドを使用してデータベース接続を指定します。oracle.jsp.dbutil.ConnBean
または標準のjava.sql.Connection
型のいずれかのインスタンスを指定できます。ConnBean
JavaBeanの詳細は、「データベース接続用ConnBean」を参照してください。
Connection
インスタンスを使用する場合は、明示的なオープンとクローズが必要です。ConnBean
インスタンスの場合は、自動的に処理されます。
次に、ファイル・システムからのダウンロードに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
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開発者ガイド』を参照してください。
注意:
|
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" ] />
formsAction
(必須): フォームの発行後に実行される操作を示します。たとえば、formsAction
を、HttpUploadBean
またはhttpUpload
タグを使用するJSPページの名前にすることもできます。
maxFiles
: フォームに表示する入力行の数を指定します。デフォルトは1です。
fileNameSize
: ファイル名の入力ボックス(複数可)の文字幅を指定します。デフォルトは20文字です。
maxFileNameSize
: ファイル名の最大許容文字数を指定します。デフォルトは80文字です。
includeNumbers
: ファイル名の入力ボックスに番号を付ける場合は、「true
」に設定します。デフォルト設定は「false
」です。
submitButtonText
: フォームの「発行」ボタン上に表示するテキストを指定します。デフォルトは「Send
」です。
このタグは、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" ] />
destination
(必須): ファイル・システムへのアップロードでは、ファイルのアップロード先のディレクトリ・パスを示します。このパスは/WEB-INF/fileaccess.properties
ファイルに指定されているベース・ディレクトリの下にあります。データベースへのアップロードでは、destination
がファイル接頭辞を示します。これは、概念上、ファイル・システム・パスと同じです。
destinationType
: データベースへのアップロードでは、「database
」に設定します。デフォルトは、ファイル・システムへのアップロードですが、明示的に「filesystem
」に設定することもできます。この値には、大/小文字区別がありません。
connId
: データベースへのアップロードでは、使用するデータベース接続のConnBean
接続IDを指定します。または、httpUpload
タグをdbOpen
タグ内で使用して、dbOpen
接続を暗黙的に使用します。OC4Jが提供するConnBean
JavaBeanとdbOpen
タグの詳細は、「データ・アクセスJavaBeansとデータ・アクセス・タグ」を参照してください。
scope
: データベースへのアップロードでは、接続に使用するConnBean
インスタンスのスコープを指定します。ここで指定するスコープ設定は、dbOpen
タグの場合と同様に、ConnBean
インスタンスの作成時のスコープ設定と一致している必要があります。httpUpload
タグがdbOpen
タグ内にネストされている場合は、connId
またはscope
の指定は不要です。情報は、dbOpen
タグから取得されます。それ以外の場合、デフォルトのスコープ設定は、「page
」です。
overwrite
: アップロードするファイルと同じパスと名前を持つ既存ファイルを上書きしない場合、またはデータベースのアップロードで、同じファイル名と接頭辞を持つ行を更新しない場合は、「false
」に設定します。この場合、ファイルがすでに存在していると、エラーが生成されます。デフォルトでは、overwrite
は「true
」に設定され、httpUpload
はファイルを上書きします。
fileType
: データベースへのアップロードでは、文字データの場合は「character
」に設定します。この文字データはCLOBに書き込まれます。デフォルトの設定はバイナリ・データの「binary
」です。このバイナリ・データはBLOBに書き込まれます。
table
: デフォルトのfileaccess
表以外のデータベース表へのアップロードでは、この属性を使用して表名を指定します。
prefixColumn
: デフォルトのfileaccess
表以外のデータベース表へのアップロードでは、この属性を使用してファイル接頭辞を格納する列の名前を指定します。この列には、destination
値が書き込まれます。
fileNameColumn
: デフォルトのfileaccess
表以外のデータベース表へのアップロードでは、この属性を使用してファイル名を格納する列の名前を指定します。
dataColumn
: デフォルトのfileaccess
表以外のデータベース表へのアップロードでは、この属性を使用してファイル・コンテンツを格納する列の名前を指定します。
次に、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>
このタグは、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" ] />
注意:
|
servletPath
(必須): Oracle DownloadServlet
へのパス。各ファイルのダウンロードを実際に実行します。たとえば、DownloadServlet
がすでにアプリケーションapp
にインストールされ、その名前download
にマップされている場合は、「/app/download/
」を先頭のスラッシュと末尾のスラッシュ付きで、servletPath
設定として使用します。httpDownload
タグ・ハンドラは、このパスをDownloadServlet
へのURLの構成に使用します。
このサーブレットの詳細は、「ダウンロード・サーブレット」を参照してください。
source
(必須): ファイル・システムからのダウンロードでは、ファイルの取得元のディレクトリ・パスを示します。このパスは/WEB-INF/fileaccess.properties
ファイルに指定されているベース・ディレクトリの下にあります。値「*
」を指定すると、ベース・ディレクトリの下の全ディレクトリが使用可能になります。
データベースからのダウンロードでは、この属性は、ファイル接頭辞を示します。これは、概念上、ファイル・システム・パスと同じです。recurse
が有効な場合は、「%
」がsource
値に付加され、問合せのWHERE
句に適切なLIKE
句が含まれます。したがって、source値と部分的に一致する接頭辞を持つすべてのファイルがダウンロードの対象となります。データベース表のすべての行が一致する必要がある場合は、source
を「*
」に設定します。
sourceType
: データベースからのダウンロードでは、「database
」に設定します。デフォルトは、ファイル・システムからのダウンロードですが、明示的に「filesystem
」に設定することもできます。
connId
: データベースからのダウンロードでは、使用するデータベース接続のConnBean
接続IDを指定します。または、httpDownload
タグをdbOpen
タグ内で使用して、dbOpen
接続を暗黙的に使用します。OC4Jが提供するConnBean
JavaBeanとdbOpen
タグの詳細は、「データ・アクセスJavaBeansとデータ・アクセス・タグ」を参照してください。
scope
: データベースからのダウンロードでは、接続に使用するConnBean
インスタンスのスコープを指定します。ここで指定するスコープ設定は、dbOpen
タグの場合と同様に、ConnBean
インスタンスの作成時のスコープ設定と一致している必要があります。httpDownload
タグがdbOpen
タグ内にネストされている場合は、connId
またはscope
の指定は不要です。情報は、dbOpen
タグから取得されます。それ以外の場合、デフォルトのスコープ設定は、「page
」です。
recurse
: 再帰的なダウンロードを行わない場合は、「false
」に設定します。再帰的なダウンロードでは、ファイル・システムのサブディレクトリ内のファイルまたはデータベース接頭辞の追加情報を含むファイルも、ダウンロード可能になります。データベースからの再帰的なダウンロードの例として、source
が「/user
」に設定されていると仮定します。再帰的なダウンロードでは、「/user/bill
」や「/user/mary
」、および「/user1
」、「/user2
」、「/user1/tom
」、「/user2/susan
」などの接頭辞を持つファイルに対しても一致を検出します。デフォルトは再帰的なダウンロードですが、「true
」に設定すると、明示的に有効化できます。
fileType
: データベースからのダウンロードでは、文字データの場合は「character
」を設定します。この文字データはCLOBから取得されます。デフォルトの設定はバイナリ・データの「binary
」です。このバイナリ・データはBLOBから取得されます。
table
: デフォルトのfileaccess
表以外のデータベース表からのダウンロードでは、この属性を使用して表名を指定します。
prefixColumn
: デフォルトのfileaccess
表以外のデータベース表からのダウンロードでは、この属性を使用してファイル接頭辞を格納する列の名前を指定します。これは、source
値が格納される場所です。
fileNameColumn
: デフォルトのfileaccess
表以外のデータベース表からのダウンロードでは、この属性を使用してファイル名を格納する列の名前を指定します。ファイル名には、ファイル名の拡張子が含まれます。
dataColumn
: デフォルトのfileaccess
表以外のデータベース表からのダウンロードでは、この属性を使用してファイル・コンテンツを格納する列の名前を指定します。
次に、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>
OC4Jには、JSPページでのEnterprise JavaBeansの使用を簡素化するカスタム・タグ・ライブラリが用意されています。
OC4J EJBタグの機能は、J2EE仕様に従っています。このタグを使用すると、web.xml
ファイルの構成情報を使用して、EJBを名前でインスタンス化できます。タグの中には、通常のJavaBeanの起動に使用する標準のjsp:useBean
タグの機能に似た機能を持つ、useBean
タグがあります。
このセクションは、次の内容で構成されています。
使用する各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-ref-name>
サブ要素は、J2EEアプリケーションの他のコンポーネントがこのコンポーネントへのアクセスに使用できる参照名を指定します。たとえば、この名前を場所を示す値で使用できます。
<ejb-ref-type>
サブ要素は、EJBのカテゴリを指定します。
<home>
サブ要素は、EJBホーム・インタフェースのパッケージと型を指定します。
<remote>
サブ要素は、EJBリモート・インタフェースのパッケージと型を指定します。
これらの値は、EJBタグの属性値に反映されます。
このセクションでは、OC4J EJBタグの構文と属性を説明します。
EJBタグを使用するには、ojsputil.jar
ファイルがインストール済で、クラスパスに存在していることを確認します。このファイルは、OC4Jに含まれています。
タグ・ライブラリ・ディスクリプタ・ファイルejbtaglib.tld
が、アプリケーションとともにデプロイされている必要があります。また、ライブラリを使用するJSPページには、適切なtaglib
ディレクティブが存在する必要があります。Oracle9iASのインストール時、TLDファイルは、予約済のタグ・ライブラリ・ディレクトリに置かれます。taglib
ディレクティブと予約済のタグ・ライブラリ・ディレクトリの詳細は、『Oracle9iAS Containers for J2EE JavaServer Pages開発者ガイド』を参照してください。
注意:
|
次のタグが使用可能です。
EJBインスタンスを最初に作成するときは、useHome
タグを使用してホーム・インタフェース・インスタンスを作成する必要があります。その後、適宜、次のインスタンスを作成します。
useBean
タグ、およびuseBean
タグのvalue
属性またはネストしたcreateBean
タグのような単一EJBインスタンスを作成します。
iterate
タグがその1例です。
作成されたEJBインスタンスは、適切なスコープ・オブジェクトに配置されます。引き続きそのインスタンスにアクセスする場合は、useBean
タグのみが必要となります。
useHome
タグは、EJBのホーム・インタフェースをルックアップして、そのインスタンスを作成します。
<ejb:useHome id = "home_instance_name" type = "home_interface_type" location = "home_lookup_name" [ local = "true" | "false" ]/>
このタグは、ボディを使用しません。
id
(必須): ホーム・インタフェース・インスタンスの名前を指定します。このインスタンスには、開始タグからページの終わりまでアクセスできます。
type
(必須): ホーム・インタフェースの名前(Javaの型)です。
location
(必須): アプリケーション内の任意のEJBのホーム・インタフェースをルックアップするために使用するJNDIの名前です。
local
: ローカル・インタフェースを使用するかどうかを決定します。ローカル・インタフェースを使用する場合は、true
に設定します。
<ejb:useHome id="aomHome" type="com.acme.atm.ejb.AccountOwnerManagerHome" location="java:comp/env/ejb/accountOwnerManager" />
EJB useBean
タグは、EJBをインスタンス化して使用するためのタグです。id
、type
および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>
id
(必須): EJBのインスタンス名を指定します。
type
(必須): EJBのクラス名です。
value
: EJBを最初にインスタンス化するときに、ネストしたcreateBean
タグを使用しない場合は、value
属性を使用してEJBObject
インスタンスを戻し、ナローイングを行います。これは、EJBをインスタンス化する機能です。
scope
: EJBインスタンスのスコープを指定します。デフォルトのスコープ設定は「page
」です。
local
: ローカル・インタフェースを使用するかどうかを決定します。ローカル・インタフェースを使用する場合は、true
に設定します。
次に、すでにインスタンス化されている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を最初にインスタンス化するときに、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インスタンスのコレクション間を反復します。このタグは主としてEntity Beanに使用されます。これは、Entity Beanの標準のfinderメソッドがコレクションを戻すためです。
開始タグでは、finderメソッドの結果を介してコレクションがホーム・インタフェースから取得されます。タグ・ボディでは、必要に応じてコレクションが反復されます。
注意:
|
<ejb:iterate id = "EJB_instance_name" type = "EJB_class_name" collection = "<%=Collection%>" [ max = "<%=Integer%>" ] > ... body ... </ejb:iterate>
ボディは、コレクション内の各EJBについて一度評価されます。
id
(必須): イテレータ変数、つまり各反復のEJBインスタンス名です。
type
(必須): EJBのクラス名です。
collection
(必須): EJBコレクションを戻します。
max
: 反復するBeanの最大数を必要に応じて指定します。
<ejb:iterate id="account" type="com.acme.atm.ejb.Account" collection="<%=accountManager.getOwnerAccounts()%>" max="100"> <jsp:getProperty name="account" property="id" /> </ejb:iterate>
このセクションでは、EJBタグの使用例を示します。1つはSession Beanの使用例、もう1つはEntity 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>
このサンプル・コードによって、次の内容が実行されます。
home
インスタンスを作成します。useHome
タグのtype
値は、web.xml
ファイルにある<ejb-ref>
要素の<home>
値と一致しています。また、useHome
のlocation
値には、<ejb-ref>
要素の<ejb-ref-name>
値が反映されています。
home.create()
メソッドを使用して、EJBのdemo
インスタンスを作成します。useBean
タグのtype
値は、web.xml
ファイルにある<ejb-ref>
要素の<remote>
値と一致しています。
demo.getName()
メソッドを使用してユーザー名を出力します。
この例は、アプリケーションの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>
このサンプル・コードによって、次の内容が実行されます。
home
インスタンスを作成します。useHome
タグのtype
値は、web.xml
ファイルにある<ejb-ref>
要素の<home>
値と一致しています。また、useHome
のlocation
値には、<ejb-ref>
要素の<ejb-ref-name>
値が反映されています。
home.findAll()
メソッドを使用してEJBのコレクションを戻します。iterate
タグのtype
値は、web.xml
ファイルにある<ejb-ref>
要素の<remote>
値と一致しています。
demo
を必ず使用します。また、demo.getName()
メソッドとdemo.getId()
メソッドを使用して各EJBの情報を出力します。
OC4Jには、多様な操作を実行するユーティリティ・タグが多数あります。このセクションでは、これらのタグについて説明します。構成は次のとおりです。
ユーティリティ・タグを使用するには、ojsputil.jar
ファイルがインストール済で、クラスパスに存在していることを確認します。このファイルは、OC4Jに含まれています。
タグ・ライブラリ・ディスクリプタ・ファイルutiltaglib.tld
が、アプリケーションとともにデプロイされている必要があります。また、ライブラリを使用するJSPページには、適切なtaglib
ディレクティブが存在する必要があります。Oracle9iASのインストール時、TLDファイルは、予約済のタグ・ライブラリ・ディレクトリに置かれます。taglib
ディレクティブと予約済のタグ・ライブラリ・ディレクトリの詳細は、『Oracle9iAS Containers for J2EE JavaServer Pages開発者ガイド』を参照してください。
注意:
|
このセクションでは、次のタグについて説明します。
指定した金額を、ロケールに適切な通貨として書式化して表示します。ロケールを指定しないと、request
オブジェクトがロケールのかわりに検索されます。オブジェクトが検出されない場合は、システムのデフォルトのロケールが使用されます。
<util:displayCurrency amount = "<%=Double%>" [ locale = "<%=Locale%>" ] />
このタグは、ボディを使用しません。
<util:displayCurrency amount="<%=account.getBalance()%>" locale="<%=account.getLocale()%>" />
指定した日付をロケールに適した書式で表示します。ロケールを指定しない場合は、システムのデフォルトのロケールが使用されます。
<util:displayDate date = "<%=Date%>" [ locale = "<%=Locale%>" ] />
このタグは、ボディを使用しません。
<util:displayDate date="<%=account.getDate()%>" locale="<%=account.getLocale()%>" />
指定した数値をロケールの書式および必要に応じて指定した書式で表示します。ロケールを指定しない場合は、システムのデフォルトのロケールが使用されます。
<util:displayNumber number = "<%=Double%>" [ locale = "<%=Locale%>" ] [ format = "<%=Format%>" ] />
このタグは、ボディを使用しません。
number
(必須): 書式化する数値を指定します。
locale
: ロケール(java.util.Locale
インスタンス)を必要に応じて指定します。
format
: 書式(java.text.Format
インスタンス)を必要に応じて指定します。
<util:displayNumber number="<%=shoe.getSize()%>" />
このセクションでは、次のタグについて説明します。
このタグを使用してコレクション間を反復します。開始タグでコレクションを取得し、ボディでそれを反復します。
<util:iterate id = "instance_name" type = "class_name" collection = "<%=Collection%>" [ max = "<%=Integer%>" ] > ... body ... </util:iterate>
ボディは、コレクション内の各要素について一度評価されます。
id
(必須): イテレータ変数、つまり各反復のインスタンス名です。
type
(必須): クラス名です。つまり、コレクションはこの型の一連のインスタンスです。
collection
(必須): コレクション自体の属性です。
max
: 反復する要素の最大数を必要に応じて指定します。
<util:iterate id="contact" type="com.acme.connections.Contact" collection="<%=company.getContacts()%>" > <jsp:getProperty name="contact" property="name"/> </util:iterate>
指定したアプリケーションのロールにユーザーが存在するかどうかに基づいて、タグ・ボディを評価し、JSPページのボディにインクルードします。タグ・ハンドラは、request
オブジェクトのisUserInRole()
メソッドを実行します。
ロールの概念は、Sun社のJava Servlet仕様、バージョン2.2以上に基づいています。ロールは、アプリケーションのweb.xml
ファイルの<role>
要素に定義します。
<util:ifInRole role = "<%=String%>" [ include = "true" | "false" ] > ... body to include ... </util:ifInRole>
role
(必須): ユーザーが、この指定したロールに存在するかどうかをチェックします。
include
: 「true
」に設定(デフォルト)すると、ユーザーがロールに存在する場合にのみ、そのボディを含めます。「false
」に設定すると、ユーザーがロールに存在しない場合にのみ、そのボディを含めます。
<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>
現行のファイルの最終変更日付を、ロケールに適切な書式で表示します。ロケールを指定しないと、request
オブジェクトがロケールのかわりに検索されます。オブジェクトが検出されない場合は、システムのデフォルトのロケールが使用されます。
<util:lastModified [ locale = "<%=Locale%>" ] />
このタグは、ボディを使用しません。
<util:lastModified />