Webブラウザからの送信データの解析とXMLデータへのマッピングを行い、送信データをXMLデータとして抽出します。
■ クラスの概要
クラス名 | InputDataBuilder |
パッケージ名 | com.fujitsu.form |
文法 | public class InputDataBuilder |
継承関係 | java.lang.Object | +--- com.fujitsu.form.InputDataBuilder |
■ コンストラクタの概要
コンストラクタ名 | 説明 |
---|---|
public | 与えられたHTMLフォームデータストリームとコンテントタイプから、InputDataBuilderオブジェクトを生成します。 |
public | 与えられたHttpServletRequestオブジェクトから、InputDataBuilderオブジェクトを生成します。 |
public | 与えられたHTMLフォームデータストリームとコンテントタイプから、InputDataBuilderオブジェクトを生成します。また、HTMLフォームデータストリーム解析時のデータサイズの上限値およびメモリ使用量の上限値を指定します。 |
public | 与えられたHttpServerRequestオブジェクトから、InputDataBuilderオブジェクトを生成します。また、HTMLフォームデータストリーム解析時のデータサイズの上限値およびメモリ使用量の上限値を指定します。 |
public | 与えられたHTMLフォームデータストリームとコンテントタイプから、InputDataBuilderオブジェクトを生成します。このコンストラクタは別ウィンドウ連携でデータ入力する場合に使用します。 |
public | 与えられたHttpServletRequestオブジェクトから、InputDataBuilderオブジェクトを生成します。このコンストラクタは別ウィンドウ連携でデータ入力する場合に使用します。 |
public | 与えられたHTMLフォームデータストリームとコンテントタイプから、InputDataBuilderオブジェクトを生成します。また、HTMLフォームデータストリーム解析時のデータサイズの上限値およびメモリ使用量の上限値を指定します。このコンストラクタは別ウィンドウ連携でデータ入力する場合に使用します。 |
public | 与えられたHttpServerRequestオブジェクトから、InputDataBuilderオブジェクトを生成します。また、HTMLフォームデータストリーム解析時のデータサイズの上限値およびメモリ使用量の上限値を指定します。このコンストラクタは別ウィンドウ連携でデータ入力する場合に使用します。 |
■ メソッドの概要
戻り値型 | メソッド名 | 説明 |
---|---|---|
org.w3c.dom.Document | Webブラウザから送信されたXMLデータのドキュメントオブジェクトを返します。 | |
java.lang.String | 指定したパラメタ名に対応するパラメタ値(HTMLデータ)を返します。 | |
java.util.Enumeration | getParameterNames() | 推奨されていません。 |
com.fujitsu.form. | 指定した項目の添付ファイルオブジェクトを返します。 | |
java.util.Enumeration | Webブラウザから送信された添付ファイルの項目名の一覧を返します。 |
■ コンストラクタの詳細
InputDataBuilder(java.io.InputStream, java.lang.String)
形式:
public InputDataBuilder(java.io.InputStream formIS, java.lang.String contentType) throws java.lang.IllegalArgumentException, com.fujitsu.form.XmlProcessorException
説明:
与えられたHTMLフォームデータストリームとコンテントタイプから、InputDataBuilderオブジェクトを生成します。
ただし、与えられたHTMLフォームデータストリームとコンテントタイプから生成できるInputDataBuilderオブジェクトは1つだけです。2回目以降は、「java.lang.IllegalArgumentException:入力ストリームオブジェクトにデータがありません。」という例外が通知されます。
また、HtmlFormUtilオブジェクトを生成したあと、InputDataBuilderオブジェクトを生成する場合は、必ずHtmlFormUtilオブジェクトのgetInputStream()メソッドで獲得したものを指定してください。指定しない場合、「java.lang.IllegalArgumentException:入力ストリームオブジェクトにデータがありません。」という例外が通知されます。
パラメタ:
フォーム送信データを格納した入力ストリーム
コンテントタイプヘッダの内容
例外:
次に示すどれかの場合
パラメタ「formIS」または「contentType」がnullの場合
HTMLフォームデータストリームまたはコンテントタイプのどちらかがXMLデータ形式として正しくない場合
入力ストリーム内にXMLデータが存在しない場合
XMLデータを扱うためのオブジェクトを生成できなかった場合
InputDataBuilder(javax.servlet.http.HttpServletRequest)
形式:
public InputDataBuilder(javax.servlet.http.HttpServletRequest request) throws java.lang.IllegalArgumentException, com.fujitsu.form.XmlProcessorException
説明:
与えられたリクエストオブジェクトから、InputDataBuilderオブジェクトを生成します。
ただし、与えられたリクエストオブジェクトから生成できるInputDataBuilderオブジェクトは1つだけです。2回目以降は、「java.lang.IllegalArgumentException:入力ストリームオブジェクトにデータがありません。」という例外が通知されます。
また、HtmlFormUtilオブジェクトを生成したあとでは、このコンストラクタではオブジェクトを生成できません。生成しようとすると、「java.lang.IllegalArgumentException:入力ストリームオブジェクトにデータがありません。」という例外が通知されます。この場合、HtmlFormUtilクラスのgetInputStream()メソッドで獲得したものをInputDataBuilder(java.io.InputStream formIS, java.lang.String contentType)に指定してオブジェクトを生成してください。
パラメタ:
HttpServletRequestオブジェクト
例外:
次に示すどれかの場合
パラメタ「request」がnullの場合
HTMLフォームデータストリームまたはコンテントタイプのどちらかがXMLデータ形式として正しくない場合
入力ストリーム内にXMLデータが存在しない場合
XMLデータを扱うためのオブジェクトを生成できなかった場合
InputDataBuilder(java.io.InputStream, java.lang.String,int,int)
形式:
public InputDataBuilder(java.io.InputStream formIS, java.lang.String contentType, int dataSizeLimit, int memUseLimit) throws java.lang.IllegalArgumentException com.fujitsu.form.XmlProcessorException
説明:
与えられたHTMLフォームストリームとコンテントタイプから、InputDataBuilderオブジェクトを生成します。
ただし、与えられたHTMLフォームストリームとコンテントタイプから生成できるInputDataBuilderオブジェクトは1つだけです。2回目以降は、「java.lang.IllegalArgumentException:入力ストリームオブジェクトにデータがありません。」という例外が通知されます。
また、HtmlFormUtilオブジェクトを生成したあと、InputDataBuilderオブジェクトを生成する場合は、必ずHtmlFormUtilオブジェクトのgetInputStream()メソッドで獲得したものを指定してください。指定しない場合、「java.lang.IllegalArgumentException:入力ストリームオブジェクトにデータがありません。」という例外が通知されます。
データサイズの上限値に指定したバイト数を超えるデータがフォーム送信データに含まれていた場合、「入力ストリームオブジェクトのデータ解析でエラーが発生しました。」という例外が通知されます。
メモリ使用量の上限値に指定したバイト数を超えるデータがフォーム送信データに含まれていた場合、TEMP領域に一時ファイルを作成しメモリを使用しないようにします。
データサイズの上限値、メモリ使用量の上限値に0を指定すると、上記の解析時の例外や一時ファイルの作成を抑止することができます。ただし、その場合はJava VMの起動オプションで最大ヒープサイズを増加させるなど、サーバ負荷を考慮してください。なお、データサイズの上限値は設定するが一時ファイルは作成しない場合、データサイズの上限値と同じサイズをメモリ使用量に指定してください。
データサイズの上限値、メモリ使用量に0を指定したHtmlFormUtilオブジェクトのgetInputStream()メソッドで、InputDataBuilderのコンストラクタを作成する場合、InputDataBuilderでも、データサイズの上限値、メモリ使用量に0を指定してください。指定しないか、0以外の値を指定した場合は、データサイズの上限値を超えるデータの場合に、解析エラーが発生します。
パラメタ:
フォーム送信データを格納した入力ストリーム
コンテントタイプヘッダの内容
フォーム送信データ解析でのデータサイズの上限値(単位:バイト)
フォーム送信データ解析でのメモリ使用量の上限値(単位:バイト)
例外:
次に示すどれかの場合
パラメタ「formIS」または「contentType」がnullの場合
HTMLフォームデータストリームまたはコンテントタイプのどちらかがXMLデータ形式として正しくない場合
入力ストリーム内にXMLデータが存在しない場合
XMLデータを扱うためのオブジェクトを生成できなかった場合
InputDataBuilder(javax.servlet.http.HttpServletRequest,int,int)
形式:
public InputDataBuilder(javax.servlet.http.HttpServletRequest request, int dataSizeLimit, int memUseLimit) throws java.lang.IllegalArgumentException com.fujitsu.form.XmlProcessorException
説明:
与えられたリクエストオブジェクトから、InputDataBuilderオブジェクトを生成します。
ただし、与えられたリクエストオブジェクトから生成できるInputDataBuilderオブジェクトは1つだけです。2回目以降は、「java.lang.IllegalArgumentException:入力ストリームオブジェクトにデータがありません。」という例外が通知されます。
また、HtmlFormUtilオブジェクトを生成したあとでは、このコンストラクタではオブジェクトを生成できません。生成しようとすると、「java.lang.IllegalArgumentException:入力ストリームオブジェクトにデータがありません。」という例外が通知されます。この場合は、HtmlFormUtilオブジェクトのgetInputStream()メソッドで獲得したものをInputDataBuilder(java.io.InputStream formIS, java.lang.String contentType)に指定してオブジェクトを生成してください。
データサイズの上限値に指定したバイト数を超えるデータがフォーム送信データに含まれていた場合、「入力ストリームオブジェクトのデータ解析でエラーが発生しました。」という例外が通知されます。
メモリ使用量の上限値に指定したバイト数を超えるデータがフォーム送信データに含まれていた場合、TEMP領域に一時ファイルを作成しメモリを使用しないようにします。
データサイズの上限値、メモリ使用量の上限値に0を指定すると、上記の解析時の例外や一時ファイルの作成を抑止することができます。ただし、その場合はJava VMの起動オプションで最大ヒープサイズを増加させるなど、サーバ負荷を考慮してください。なお、データサイズの上限値は設定するが一時ファイルは作成しない場合、データサイズの上限値と同じサイズをメモリ使用量に指定してください。
パラメタ:
HttpServletRequestオブジェクト
フォーム送信データ解析でのデータサイズの上限値(単位:バイト)
フォーム送信データ解析でのメモリ使用量の上限値(単位:バイト)
例外:
次に示すどれかの場合
パラメタ「request」がnullの場合
HTMLフォームデータストリームまたはコンテントタイプのどちらかがXMLデータ形式として正しくない場合
入力ストリーム内にXMLデータが存在しない場合
XMLデータを扱うためのオブジェクトを生成できなかった場合
InputDataBuilder(java.io.InputStream, java.lang.String, boolean)
形式:
public InputDataBuilder(java.io.InputStream formIS, java.lang.String contentType, boolean timeout) throws java.lang.IllegalArgumentException, com.fujitsu.form.XmlProcessorException
説明:
与えられたHTMLフォームデータストリームとコンテントタイプから、InputDataBuilderオブジェクトを生成します。
ただし、与えられたHTMLフォームデータストリームとコンテントタイプから生成できるInputDataBuilderオブジェクトは1つだけです。2回目以降は、「java.lang.IllegalArgumentException:入力ストリームオブジェクトにデータがありません。」という例外が通知されます。
また、HtmlFormUtilオブジェクトを生成したあと、InputDataBuilderオブジェクトを生成する場合は、必ずHtmlFormUtilオブジェクトのgetInputStream()メソッドで獲得したものを指定してください。指定しない場合、「java.lang.IllegalArgumentException:入力ストリームオブジェクトにデータがありません。」という例外が通知されます。
別ウィンドウ連携時に親ウィンドウのデータベース検索入力支援機能のタイムアウトを発生させない場合、パラメタ「timeout」にfalseを指定してください。データベース検索入力支援機能を利用しない場合、本指定は無効となります。
パラメタ:
フォーム送信データを格納した入力ストリーム
コンテントタイプヘッダの内容
データベース検索入力支援機能のタイムアウトの発生指定
タイムアウトを発生させる場合、trueを指定します。
タイムアウトを発生させない場合、falseを指定します。
例外:
次に示すどれかの場合
パラメタ「formIS」または「contentType」がnullの場合
HTMLフォームデータストリームまたはコンテントタイプのどちらかがXMLデータ形式として正しくない場合
入力ストリーム内にXMLデータが存在しない場合
XMLデータを扱うためのオブジェクトを生成できなかった場合
InputDataBuilder(javax.servlet.http.HttpServletRequest, boolean)
形式:
public InputDataBuilder(javax.servlet.http.HttpServletRequest request, boolean timeout) throws java.lang.IllegalArgumentException, com.fujitsu.form.XmlProcessorException
説明:
与えられたリクエストオブジェクトから、InputDataBuilderオブジェクトを生成します。
ただし、与えられたリクエストオブジェクトから生成できるInputDataBuilderオブジェクトは1つだけです。2回目以降は、「java.lang.IllegalArgumentException:入力ストリームオブジェクトにデータがありません。」という例外が通知されます。
また、HtmlFormUtilオブジェクトを生成したあとでは、このコンストラクタではオブジェクトを生成できません。生成しようとすると、「java.lang.IllegalArgumentException:入力ストリームオブジェクトにデータがありません。」という例外が通知されます。この場合、HtmlFormUtilクラスのgetInputStream()メソッドで獲得したものをInputDataBuilder(java.io.InputStream formIS, java.lang.String contentType)に指定してオブジェクトを生成してください。
別ウィンドウ連携時に親ウィンドウのデータベース検索入力支援機能のタイムアウトを発生させない場合、パラメタ「timeout」にfalseを指定してください。データベース検索入力支援機能を利用しない場合、本指定は無効となります。
パラメタ:
HttpServletRequestオブジェクト
データベース検索入力支援機能のタイムアウトの発生指定
タイムアウトを発生させる場合、trueを指定します。
タイムアウトを発生させない場合、falseを指定します。
例外:
次に示すどれかの場合
パラメタ「request」がnullの場合
HTMLフォームデータストリームまたはコンテントタイプのどちらかがXMLデータ形式として正しくない場合
入力ストリーム内にXMLデータが存在しない場合
XMLデータを扱うためのオブジェクトを生成できなかった場合
InputDataBuilder(java.io.InputStream, java.lang.String, int, int, boolean)
形式:
public InputDataBuilder(java.io.InputStream formIS, java.lang.String contentType, int dataSizeLimit, int memUseLimit, boolean timeout) throws java.lang.IllegalArgumentException com.fujitsu.form.XmlProcessorException
説明:
与えられたHTMLフォームストリームとコンテントタイプから、InputDataBuilderオブジェクトを生成します。
ただし、与えられたHTMLフォームストリームとコンテントタイプから生成できるInputDataBuilderオブジェクトは1つだけです。2回目以降は、「java.lang.IllegalArgumentException:入力ストリームオブジェクトにデータがありません。」という例外が通知されます。
また、HtmlFormUtilオブジェクトを生成したあと、InputDataBuilderオブジェクトを生成する場合は、必ずHtmlFormUtilオブジェクトのgetInputStream()メソッドで獲得したものを指定してください。指定しない場合、「java.lang.IllegalArgumentException:入力ストリームオブジェクトにデータがありません。」という例外が通知されます。
データサイズの上限値に指定したバイト数を超えるデータがフォーム送信データに含まれていた場合、「入力ストリームオブジェクトのデータ解析でエラーが発生しました。」という例外が通知されます。
メモリ使用量の上限値に指定したバイト数を超えるデータがフォーム送信データに含まれていた場合、TEMP領域に一時ファイルを作成しメモリを使用しないようにします。
データサイズの上限値、メモリ使用量の上限値に0を指定すると、上記の解析時の例外や一時ファイルの作成を抑止することができます。ただし、その場合はJava VMの起動オプションで最大ヒープサイズを増加させるなど、サーバ負荷を考慮してください。なお、データサイズの上限値は設定するが一時ファイルは作成しない場合、データサイズの上限値と同じサイズをメモリ使用量に指定してください。
データサイズの上限値、メモリ使用量に0を指定したHtmlFormUtilオブジェクトのgetInputStream()メソッドで、InputDataBuilderのコンストラクタを作成する場合、InputDataBuilderでも、データサイズの上限値、メモリ使用量に0を指定してください。指定しないか、0以外の値を指定した場合は、データサイズの上限値を超えるデータの場合に、解析エラーが発生します。
別ウィンドウ連携時に親ウィンドウのデータベース検索入力支援機能のタイムアウトを発生させない場合、パラメタ「timeout」にfalseを指定してください。データベース検索入力支援機能を利用しない場合、本指定は無効となります。
パラメタ:
フォーム送信データを格納した入力ストリーム
コンテントタイプヘッダの内容
フォーム送信データ解析でのデータサイズの上限値(単位:バイト)
フォーム送信データ解析でのメモリ使用量の上限値(単位:バイト)
データベース検索入力支援機能のタイムアウトの発生指定
タイムアウトを発生させる場合、trueを指定します。
タイムアウトを発生させない場合、falseを指定します。
例外:
次に示すどれかの場合
パラメタ「formIS」または「contentType」がnullの場合
HTMLフォームデータストリームまたはコンテントタイプのどちらかがXMLデータ形式として正しくない場合
入力ストリーム内にXMLデータが存在しない場合
XMLデータを扱うためのオブジェクトを生成できなかった場合
InputDataBuilder(javax.servlet.http.HttpServletRequest, int, int, boolean)
形式:
public InputDataBuilder(javax.servlet.http.HttpServletRequest request, int dataSizeLimit, int memUseLimit, boolean timeout) throws java.lang.IllegalArgumentException com.fujitsu.form.XmlProcessorException
説明:
与えられたリクエストオブジェクトから、InputDataBuilderオブジェクトを生成します。
ただし、与えられたリクエストオブジェクトから生成できるInputDataBuilderオブジェクトは1つだけです。2回目以降は、「java.lang.IllegalArgumentException:入力ストリームオブジェクトにデータがありません。」という例外が通知されます。
また、HtmlFormUtilオブジェクトを生成したあとでは、このコンストラクタではオブジェクトを生成できません。生成しようとすると、「java.lang.IllegalArgumentException:入力ストリームオブジェクトにデータがありません。」という例外が通知されます。この場合は、HtmlFormUtilオブジェクトのgetInputStream()メソッドで獲得したものをInputDataBuilder(java.io.InputStream formIS, java.lang.String contentType)に指定してオブジェクトを生成してください。
データサイズの上限値に指定したバイト数を超えるデータがフォーム送信データに含まれていた場合、「入力ストリームオブジェクトのデータ解析でエラーが発生しました。」という例外が通知されます。
メモリ使用量の上限値に指定したバイト数を超えるデータがフォーム送信データに含まれていた場合、TEMP領域に一時ファイルを作成しメモリを使用しないようにします。
データサイズの上限値、メモリ使用量の上限値に0を指定すると、上記の解析時の例外や一時ファイルの作成を抑止することができます。ただし、その場合はJava VMの起動オプションで最大ヒープサイズを増加させるなど、サーバ負荷を考慮してください。なお、データサイズの上限値は設定するが一時ファイルは作成しない場合、データサイズの上限値と同じサイズをメモリ使用量に指定してください。
別ウィンドウ連携時に親ウィンドウのデータベース検索入力支援機能のタイムアウトを発生させない場合、パラメタ「timeout」にfalseを指定してください。データベース検索入力支援機能を利用しない場合、本指定は無効となります。
パラメタ:
HttpServletRequestオブジェクト
フォーム送信データ解析でのデータサイズの上限値(単位:バイト)
フォーム送信データ解析でのメモリ使用量の上限値(単位:バイト)
データベース検索入力支援機能のタイムアウトの発生指定
タイムアウトを発生させる場合、trueを指定します。
タイムアウトを発生させない場合、falseを指定します。
例外:
次に示すどれかの場合
パラメタ「request」がnullの場合
HTMLフォームデータストリームまたはコンテントタイプのどちらかがXMLデータ形式として正しくない場合
入力ストリーム内にXMLデータが存在しない場合
XMLデータを扱うためのオブジェクトを生成できなかった場合
■ メソッドの詳細
形式:
public org.w3c.dom.Document getXMLData() throws com.fujitsu.form.XmlProcessorException
説明:
Webブラウザから送信されたXMLデータのドキュメントオブジェクトを返します。
入力データが存在しない場合は、データルートタグだけのドキュメントオブジェクトが返されます。
ただし、コマンド種別が「キャンセル」のコマンドボタン項目で送信された場合、nullオブジェクトが通知されます。
パラメタ:
なし
戻り値:
XMLデータのドキュメントオブジェクト
例外:
ドキュメントオブジェクトの生成に失敗した場合
補足:
getXMLData()メソッドで取得できるXMLデータの構造については、「2.3.1 処理の流れとデータ」の「■ Webブラウザに送信するデータ」を参照してください。
getParameter(java.lang.String)
形式:
public java.lang.String getParameter(java.lang.String name)
説明:
指定したパラメタ名に対応するパラメタ値を検索して返します。
Formcoordinatorで予約されているFjXMLで始まるパラメタ名、および添付ファイルのパラメタ名は検索できません。
次に示す項目に対する情報が取得できます。
コマンド種別が「送信」、「キャンセル」、「署名送信(「署名オプション」を追加インストールした場合)」のコマンドボタン項目に指定したラベル名
hidden項目に指定した値
「キャンセル」ボタンの送信データでも利用できます。
ただし、次に示すメソッドについては、「キャンセル」ボタンの送信データでは、nullオブジェクトが通知されます。
getXMLData()メソッド
getAttachedFile()メソッド
getAttachedFileNames()メソッド
getPackageData()メソッド(署名オプション固有)
パラメタ:
パラメタ名
戻り値:
パラメタ値。パラメタ名がnull、存在しないパラメタ名、または検索対象外のパラメタ名の場合はnull
getAttachedFile(java.lang.String)
形式:
public com.fujitsu.form.AttachedFile getAttachedFile(java.lang.String name)
説明:
指定した項目の添付ファイルオブジェクトを返します。
ただし、コマンド種別が「キャンセル」のコマンドボタン項目で送信された場合、nullオブジェクトが通知されます。
パラメタ:
添付ファイルの項目名
戻り値:
添付ファイルオブジェクト。添付ファイルの項目名がnull、または存在しない添付ファイルの項目名の場合は、null
形式:
public java.util.Enumeration getAttachedFileNames()
説明:
Webブラウザから送信された添付ファイルの項目名の一覧を返します。
ただし、コマンド種別が「キャンセル」のコマンドボタン項目で送信された場合、nullオブジェクトが通知されます。
パラメタ:
なし
戻り値:
添付ファイルの項目名の文字列から成る列挙オブジェクト。該当するデータがない場合は、空の列挙オブジェクト
■ 補足
入力データの解析について、データサイズが1メガバイトを超える場合は、TEMP環境変数に設定されたフォルダに一時ファイルが作成されます。システムを再起動してもTEMP環境変数に設定されたフォルダにf3hk****.tmpのファイルが残っていた場合は、削除する必要があります。
また、入力データ中に添付ファイルなど、10メガバイトを超えるデータが含まれていた場合は、コンストラクタで「入力ストリームオブジェクトのデータ解析でエラーが発生しました。」という例外が通知されます。
ただし、InputDataBuilderクラスのデータサイズの上限値およびメモリ使用量の上限値が指定できるコンストラクタを利用することにより上記の制御をカスタマイズすることができます。詳細については、「C.1.1 クラス:InputDataBuilder」の「■ コンストラクタの詳細」を参照してください。
■ 使用例
InputDataBuilderクラスの使用例を次に示します。
Webブラウザから送信されたデータからパラメタを取得する場合
この例では、クライアントのWebブラウザからXMLデータ形式で送信されたデータから、パラメタの名前と値を取得しています。
getParameter()メソッドでコマンドボタンの項目名を引数に、コマンドボタンのラベル文字列を取得します。コマンドボタンのラベル文字列を取得できない場合は違うコマンドボタンであり、取得できる場合はコマンドボタンのラベル文字列を判定するという制御方法です。
なお、キャンセルボタン送信では、このクラス構築時に例外が発生するため、HtmlFormUtilクラスを利用してください。
コマンドボタン項目で、項目名に「送信ボタン項目」、ラベルに「申請」、コマンド種別に「送信」が設定されている場合の例を、次に示します。
import javax.servlet.* ; import javax.servlet.http.* ; import java.io.* ; import com.fujitsu.form.* ; public class SampleServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { try { // InputDataBuilderオブジェクトを生成します。 InputDataBuilder idb = new InputDataBuilder(request); // 「申請」ボタンで送信されてきたデータかを判定します。 String button = idb.getParameter("送信ボタン項目") ; if (button != null && button.equals("申請")) { // 申請処理の続き ・ ・ ・ } // 申請処理以外の続き ・ ・ ・ } catch(Exception e){ // 例外処理 ・ ・ ・ } } }
Webブラウザから送信されたデータから添付ファイルを取得する場合
この例では、クライアントのWebブラウザからXMLデータ形式で送信されたデータから、添付ファイルのデータを取得しています。また、添付ファイル一覧を取得し、データをサーバに保存しています。
import javax.servlet.* ; import javax.servlet.http.* ; import java.util.* ; import java.io.* ; import com.fujitsu.form.* ; public class SampleServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { try { // InputDataBuilderオブジェクトを生成します。 InputDataBuilder idb = new InputDataBuilder(request); // 添付ファイルのデータ一覧を取得します。 Enumeration enum = idb.getAttachedFileNames() ; // 添付ファイルのデータ一覧から添付ファイルのサイズ、ファイル種別、 // ファイル名を取得し、添付ファイルのデータをファイルに保存します。 while(enum.hasMoreElements()) { // 添付ファイル項目名を取得します。 String itemname = (String)enum.nextElement(); // AttachedFileクラスを取得します。 AttachedFile attfile = idb.getAttachedFile(itemname); // ファイル種別を取得します。 String filetype = attfile.getType() ; // ファイルサイズを取得します。 long filesize = attfile.getSize() ; // ファイル名を取得します。 String filename = attfile.getFileName() ; // 添付ファイルを保存します。 FileOutputStream outs = new FileOutputStream("c:\\temp\\"+filename) ; // SolarisおよびLinuxの場合は以下のように記述します。 // FileOutputStream outs = new FileOutputStream("/var/tmp/"+filename) ; attfile.write(outs) ; outs.close() ; // 処理の続き ・ ・ ・ } } catch(Exception e){ // 例外処理 ・ ・ ・ } } }
Webブラウザから送信されたデータから、入力XMLデータを取得する場合
この例では、クライアントのWebブラウザからXMLデータ形式で送信されたデータから、電子フォームに入力されたXMLデータをドキュメントオブジェクトで取得しています。
import org.w3c.dom.*; import javax.servlet.* ; import javax.servlet.http.* ; import java.io.* ; import com.fujitsu.form.* ; public class SampleServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { try { // InputDataBuilderオブジェクトを生成します。 InputDataBuilder idb = new InputDataBuilder(request); // Webブラウザから送信された入力データをドキュメントオブジェクトで取得 // します。 Document doc = idb.getXMLData() ; } catch(Exception e){ // 例外処理 ・ ・ ・ } } }
Webブラウザから送信されたパラメタをHtmlFormUtilクラスで解析したあとで、InputDataBuilderオブジェクトを生成する場合
この例では、クライアントのWebブラウザからXMLデータ形式で送信されたデータのパラメタを解析したあとで、InputDataBuilderオブジェクトを生成しています。
import javax.servlet.* ; import javax.servlet.http.* ; import java.util.* ; import java.io.* ; import com.fujitsu.form.* ; public class SampleServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { try { HtmlFormUtil hfu = null ; if (HtmlFormUtil.getEnctyp(request) == HtmlFormUtil.MULTIPART) { // HtmlFormUtilオブジェクトを生成します。 hfu = new HtmlFormUtil(request); // パラメタに「申請」ボタンがあるかどうかを調べます。 String button = hfu.getParameter("送信ボタン項目") ; if (button != null && button.equals("申請")) { // 処理の続き ・ ・ ・ } // InputDataBuilderオブジェクトを生成します。 // HtmlFormUtilクラスでパラメタを解析しているため、InputDataBuilder // オブジェクトを生成する場合は、HtmlFormUtilクラスのgetInputStream() // メソッドからデータを取得して、生成する必要があります。 // requestまたはrequest.getInputStream()で生成すると例外に // なります。 InputDataBuilder idb = new InputDataBuilder(hfu.getInputStream(), request.getContentType()); // 処理の続き ・ ・ ・ } } catch(Exception e){ // 例外処理 ・ ・ ・ } } }
データサイズの上限値およびメモリ使用量の上限値を指定してInputDataBuilderオブジェクトを生成し、Webブラウザから送信されたXMLデータ形式のデータからパラメタを取得する場合
この例では、データサイズの上限値を20メガバイト、メモリ使用量の上限値を20メガバイトに指定してInputDataBuilderオブジェクトを生成し、クライアントのWebブラウザからXMLデータ形式で送信されたデータからパラメタの名前と値を取得しています。
import org.w3c.dom.* ; import javax.servlet.* ; import javax.servlet.http.* ; import java.util.* ; import java.io.* ; import com.fujitsu.form.* ; public class SampleServlet extends HttpServlet { // データサイズの上限値を20メガバイトに指定します。 static final int dataSizeLimit = (1024*1024)*20; // メモリ使用量の上限値を20メガバイトに指定します。 static final int memUseLimit = (1024*1024)*20; public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { try { // InputDataBuilderオブジェクトを生成します。 InputDataBuilder idb = new InputDataBuilder(request, dataSizeLimit, memUseLimit); // もう一方のコンストラクタの場合は、以下の形式で指定します。 // InputDataBuilder idb = new InputDataBuilder(request.getInputStream(), // request.getContentType(), // dataSizeLimit, memUseLimit); // パラメタに「申請」ボタンがあるかどうかを調べます。 String button = idb.getParameter("送信ボタン項目") ; if (button != null && button.equals("申請")) { // 処理の続き ・ ・ ・ } } catch(Exception e){ // 例外処理 ・ ・ ・ } } }