|
9.2 MSPTaglibのリファレンス
9.2 MSPTaglibのリファレンス このセクションではMSPのtaglibが提供している6つのタグについて説明します.これらの使い方の例はたくさんありますが,特に「基本的な例題」のセクションをご覧になるとよいでしょう.  MSPのtaglibは,最も基本的には,JSPが1つまたは複数のmsp:evaluateタグの周りのmsp:allocateKernelタグをラップするために使われます.
... <msp:allocateKernel> <msp:evaluate> ... </msp:evaluate>
<msp:evaluate> ... </msp:evaluate>
</msp:allocateKernel> ...
以下はこれらのタグの操作説明です.MSPのtaglibを使うJSPの処理ステップのまとめになっています. 9.2.1 msp:allocateKernel (タグオープン) msp:allocateタグは計算のためにMathematica カーネルを入手するために使われます.開始タグはページの処理に次のステップを踏みます. プールの決定 msp:allocateは,まず,JSPの名前に基づいてリクエストに使うプールを決定します.名前の付いたプールがなければGeneralプールが使われます. カーネルの割当て Mathematica カーネルはカーネルプールからリクエストされます.プールには計算のために待機しているカーネルが入っています.使えるカーネルがなければ,システムは使えるようになるまで待機します.プールを使うことで,複数のリクエスト間でMathematica カーネルを分け合うことが可能になり,システムの応答時間が短くなります. 各リクエストが全く異なるカーネルを得ることがあるので,カーネルに何かを保存して次に再びそれを使うことはできません. 入力変数の割当て リクエストで送られた入力変数は,次に値と共にMathematica カーネルに送られます.変数symと値funに,Mathematica の$$sym = "fun"という割当てが行われます.これで,値はMathematica の文字列として送られ,何らかの特別のアクションなしでは評価されなくなります.input要素だけが変数のソースではないのでご注意ください.例えば,画像マップも変数を転送します.webMathematica はこれらの変数の名前を付け替えて,ユーザのMSP中のMathematica コードと干渉し合うことを防ぎます. 各変数はスキャンされ,有効なMathematica のシンボルであるかどうか確認されます.「.」という記号はすべてバッククォート(`)で置き換えられます.またアンダースコア(_)は「U」で置き換えられます.名前の変換はJ/Link におけるそれと一致します. 以下は変数名の変換例です.  その後,各変数は文字,数字,ドル記号($),バッククォート記号(`)しか含んでいないことが確認されます.これにより,エクスクラメーション記号(!)で始まる変数を送る攻撃が抑止されます.エクスクラメーション記号で始まる変数はMathematica にオペレーティングシステムシェルの操作を始めさせる可能性があるので,潜在的な危険性を孕んでいるのです. 各値はMathematica の文字列になります.ここで,バックスラッシュ記号(\)やダブルクォート記号(")があると,バックスラッシュ記号(\)が追加される形で拡張されます.値がエクスクラメーション記号(!)で始まっている場合は,スペースが加えられます.最後にダブルクォート(")が前後に加えられます.  パラメータの割当て カーネルのリクエストに相応しくなるように,$ServletRequest,$ServletResponse,$ScriptName,$PathInfo,$QueryStringに割当てをします. 初期化 $Contextと$ContextPathの設定は保存され,メッセージとプリント出力の保存に使われたリストは初期化されます. 9.2.2 msp:evaluate msp:evaluateタグはJSPの内部にあるMathematica のコマンドを評価するためのものです.msp:evaluateタグの内部にあるMSPの関数すべてを使うことができます.それぞれのタグは内容を評価するようにmsp:allocateKernelタグで割り当てられたカーネルを使います.カーネルが割り当てられていない場合,リクエストはエラーページに転送されます. MSPExceptionが投げられると,処理コードがそれを捕え,適切なエラーメッセージを挿入します. MSPReturnコマンドが評価されると,進行中の評価や他のすべての評価が直ちに終了され,引数が直接JSPから返されます.MSPReturnコマンドがひとつもなければ,評価結果は出力ストリームに挿入されます. 各評価の処理は,KernelTimeLimit設定パラメータから計算される時間のパラメータであるTimeConstrainedでラップされます. Mathematica が何らかのメッセージや出力を生成すると,それらはMSPGetMessagesとMSPGetPrintOutputでそれぞれ回収できるように保存されます. msp:evaluateタグの結果はフォーマットされ,結果として返されます.以下の例では出力ページにその日の日付けが表示されます.
<msp:evaluate> Date[] </msp:evaluate>
ひとつのmsp:evaluateタグで複数の日付けを計算したければ,別々のステップをセミコロン(;)で区切ります.最後の計算の結果がフォーマットされて出力ページに現れます.以下の例ではx+yという計算の数値結果が現れます.
<msp:evaluate> x = Sin[5.6]; y = Sqrt[x]; x+y </msp:evaluate>
msp:evaluateタグの結果のフォーマットについては「評価のフォーマット」で詳しく説明してあります. msp:allocateKernelスコープ内ではmsp:evaluate,msp:set,msp:getのすべてのタグで同じカーネルが使われます.このためそれぞれは互いに可視的です.この定義は/msp:allocateKernelでクリアすることができます. 9.2.3 msp:allocateKernel (タグクローズ) msp:allocateKernelタグが閉じられると,次のステップで後処理が行われます. Javaの例外 JSPの処理中にJavaの例外が投げられると,投げられた例外は捕えられ,カーネルはシャットダウンされた後に再スタートされます.それから例外が再度投げられ,場合によってはHTTPのリクエストと一緒に返されます. MSPReturn 評価中にMSPReturnがあると,JSPの通常の出力の代りにその引数が返されます. ContentTypeの設定 コンテントタイプが設定されます.これはMSPPageOptionsのContentTypeオプションの設定によって,またはMSPReturnによって指定されます.デフォルトはtext/htmlです. カーネルをクリーンにする カーネルは再び使えるようにクリーンな状態にされます.つまり,リクエストとともに送られたパラメータの値がクリアされ,デフォルトコンテキストのすべてのシンボルが取り除かれます.これに加えて$Contextと$ContextPathが初期値に戻され,Javaオブジェクトの参照が削除されます.また,開かれたストリームはすべて閉じられます. カーネルの解放 カーネルは再び使えるようにプールに戻されます. 9.2.4 msp:set msp:setタグはJavaを使ってMathematica のシンボルを設定するためのものです.各msp:setタグはmsp:allocateKernelタグで割り当てられたカーネルを使ってその内容を評価します.カーネルが割り当てられていない場合は,リクエストがエラーページに転送されます. このタグは以下の必須属性を持ちます.  上記に加え,以下の属性も設定しなければなりません.  次の例題では,Mathematica の変数varがJavaのint numで設定されています.
<msp:allocateKernel>
<msp:set name="var" intValue="<%= num %>" />
</msp:allocateKernel>
先に挙げたmsp:setの例題もご覧ください. msp:allocateKernelスコープ内ではmsp:evaluate,msp:set,msp:getのすべてのタグで同じカーネルが使われます.このためそれぞれは互いに可視的です.この定義は/msp:allocateKernelでクリアすることができます. 9.2.5 msp:get msp:getタグはMathematica から値を取ってJavaに入れるためのものです.各msp:getタグは,内容を評価するようにmsp:allocateKernelタグによって割り当てられたカーネルを使います.カーネルが割り当てられていないと,リクエストはエラーページに転送されます. このタグは以下に記した3つの必須属性を取ります.  次の例題では,タイプDoubleのJavaの変数dValueがMathematica の関数Random[]の結果に設定されています.
<msp:allocateKernel>
<msp:get name="dValue" type="Double" value="Random[]" />
</msp:allocateKernel>
先に挙げたmsp:getの例題もご覧ください. msp:allocateKernelスコープ内ではmsp:evaluate,msp:set,msp:getのすべてのタグで同じカーネルが使われます.このためそれぞれは互いに可視的です.この定義は/msp:allocateKernelでクリアすることができます. 9.2.6 msp:includeMSP msp:includeMSPタグはMSPスクリプトをJSPに入れるためにあります.MSPスクリプトはMSPスクリプトに関するセクションで説明してあるように,webMathematica を使う古い方法です. このタグは以下のように2つの属性を取ります.  以下の例にはMSPスクリプトExamples/PlotSingle.mspの結果が含まれています.引数fun=Sin[x]&x1=10はMSPスクリプトに渡されます.
<msp:includeMSP name="Examples/PlotSingle" arguments="fun=Sin[x]&x1=10" />
先に挙げたmsp:includeMSPの例題もご覧ください. 9.2.7 msp:forwardMSP msp:forwardMSPタグはMSPスクリプトをJSPから転送するためにあります.MSPスクリプトはMSPスクリプトに関するセクションで説明してあるように,webMathematica を使う古い方法です. このタグは以下のように2つの属性を取ります.  以下の例はMSPスクリプトExamples/PlotSingle.mspに転送されます.引数fun=Sin[x]&x1=10はMSPスクリプトに渡されます.
<msp:forwardMSP name="Examples/PlotSingle" arguments="fun=Sin[x]&x1=10" />
9.2.8 まとめ ページ処理の概要は「webMathematica の技術」をご覧ください.
|