Documentation![]() ![]() |
![]() ![]() ![]() |
このセクションでは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の処理ステップのまとめになっています.
msp:allocateKernelタグは計算のためにMathematica カーネルを入手するために使われます.開始タグはページの処理に次のステップを踏みます.
msp:allocateKernelは,まず,JSPの名前に基づいてリクエストに使うプールを決定します.名前の付いたプールがなければGeneralプールが使われます.
Mathematica カーネルはカーネルプールからリクエストされます.プールには計算のために待機しているカーネルが入っています.使えるカーネルがなければ,システムは使えるようになるまで待機します.プールを使うことで,複数のリクエスト間でMathematica カーネルを分け合うことが可能になり,システムの応答時間が短くなります.
各リクエストが全く異なるカーネルを得ることがあるので,カーネルに何かを保存して次に再びそれを使うことはできません.
リクエストで送られた入力変数は,次に値と共にMathematica カーネルに送られます.変数symと値funに,Mathematica の$$sym = "fun"という割当てが行われます.これで,値はMathematica の文字列として送られ,何らかの特別のアクションなしでは評価されなくなります.input要素だけが変数のソースではないのでご注意ください.例えば,画像マップも変数を転送します.webMathematica はこれらの変数の名前を付け替えて,ユーザのMSP中のMathematica コードと干渉し合うことを防ぎます.
各変数はスキャンされ,有効なMathematica のシンボルであるかどうか確認されます.「.」という記号はすべてバッククォート(`)で置き換えられます.またアンダースコア(_)は「U」で置き換えられます.名前の変換はJ/Link におけるそれと一致します.
以下は変数名の変換例です.
その後,各変数は文字,数字,ドル記号($),バッククォート記号(`)しか含んでいないことが確認されます.これにより,エクスクラメーション記号(!)で始まる変数を送る攻撃が抑止されます.エクスクラメーション記号で始まる変数はMathematica にオペレーティングシステムシェルの操作を始めさせる可能性があるので,潜在的な危険性を孕んでいるのです.
各値はMathematica の文字列になります.ここで,バックスラッシュ記号(\)やダブルクォート記号(")があると,バックスラッシュ記号(\)が追加される形で拡張されます.値がエクスクラメーション記号(!)で始まっている場合は,スペースが加えられます.最後にダブルクォート(")が前後に加えられます.
カーネルのリクエストに相応しくなるように,$ServletRequest,$ServletResponse,$ServletConfig,$ScriptName,$PathInfo,$QueryStringに割当てをします.
$Contextと$ContextPathの設定は保存され,メッセージとプリント出力の保存に使われたリストは初期化されます.
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でクリアすることができます.
msp:allocateKernelタグが閉じられると,次のステップで後処理が行われます.
JSPの処理中にJavaの例外が投げられると,投げられた例外は捕えられ,カーネルはシャットダウンされた後に再スタートされます.それから例外が再度投げられ,場合によってはHTTPのリクエストと一緒に返されます.
評価中にMSPReturnがあると,JSPの通常の出力の代りにその引数が返されます.
コンテントタイプが設定されます.これはMSPPageOptionsのContentTypeオプションの設定によって,またはMSPReturnによって指定されます.デフォルトはtext/htmlです.
カーネルは再び使えるようにクリーンな状態にされます.つまり,リクエストとともに送られたパラメータの値がクリアされ,デフォルトコンテキストのすべてのシンボルが取り除かれます.これに加えて$Contextと$ContextPathが初期値に戻され,Javaオブジェクトの参照が削除されます.また,開かれたストリームはすべて閉じられます.
カーネルは再び使えるようにプールに戻されます.
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でクリアすることができます.
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でクリアすることができます.
msp:includeClassicMSPタグはMSPスクリプトをJSPに入れるためにあります.MSPスクリプトは「以前のwebMathematica 技術」のセクションで説明してあるように,webMathematica を使う古い方法です.
このタグは以下のように2つの属性を取ります.
以下の例にはMSPスクリプトExamples/PlotSingle.mspの結果が含まれています.引数fun=Sin[x]&x1=10はMSPスクリプトに渡されます.
<msp:includeClassicMSP name="Examples/PlotSingle" arguments="fun=Sin[x]&x1=10" />
先に挙げたmsp:includeClassicMSPの例題もご覧ください.
msp:forwardClassicMSPタグはMSPスクリプトをJSPから転送するためにあります.MSPスクリプトは「以前のwebMathematica 技術」に関するセクションで説明してあるように,webMathematica を使う古い方法です.
このタグは以下のように2つの属性を取ります.
以下の例はMSPスクリプトExamples/PlotSingle.mspに転送されます.引数fun=Sin[x]&x1=10はMSPスクリプトに渡されます.
<msp:forwardClassicMSP name="Examples/PlotSingle" arguments="fun=Sin[x]&x1=10" />
ページ処理の概要は「webMathematica の技術」をご覧ください.
![]() ![]() ![]() |