Mathematica 9 is now available
9.2 MSPTaglibのリファレンス

ドキュメント9. 付録

 

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 が何らかのメッセージや出力を生成すると,それらはMSPGetMessagesMSPGetPrintOutputでそれぞれ回収できるように保存されます.

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:evaluatemsp:setmsp:getのすべてのタグで同じカーネルが使われます.このためそれぞれは互いに可視的です.この定義は/msp:allocateKernelでクリアすることができます.

9.2.3 msp:allocateKernel (タグクローズ)

msp:allocateKernelタグが閉じられると,次のステップで後処理が行われます.

Javaの例外

JSPの処理中にJavaの例外が投げられると,投げられた例外は捕えられ,カーネルはシャットダウンされた後に再スタートされます.それから例外が再度投げられ,場合によってはHTTPのリクエストと一緒に返されます.

MSPReturn

評価中にMSPReturnがあると,JSPの通常の出力の代りにその引数が返されます.

ContentTypeの設定

コンテントタイプが設定されます.これはMSPPageOptionsContentTypeオプションの設定によって,または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:evaluatemsp:setmsp:getのすべてのタグで同じカーネルが使われます.このためそれぞれは互いに可視的です.この定義は/msp:allocateKernelでクリアすることができます.

9.2.5 msp:get

msp:getタグはMathematica から値を取ってJavaに入れるためのものです.各msp:getタグは,内容を評価するようにmsp:allocateKernelタグによって割り当てられたカーネルを使います.カーネルが割り当てられていないと,リクエストはエラーページに転送されます.

このタグは以下に記した3つの必須属性を取ります.

次の例題では,タイプDoubleのJavaの変数dValueMathematica の関数Random[]の結果に設定されています.

<msp:allocateKernel>

   <msp:get name="dValue" type="Double" value="Random[]" />

</msp:allocateKernel>

先に挙げたmsp:getの例題もご覧ください.

msp:allocateKernelスコープ内ではmsp:evaluatemsp:setmsp: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 の技術」をご覧ください.



Any questions about topics on this page? Click here to get an individual response.Buy NowMore Information
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT. CURRENT WEBMATHEMATICA DOCUMENTATION IS NOW AVAILABLE.