スクリプトレットについて

●ファイル名／格納先
| 1つのScriptlet（サーブレット）に対して、最低2つのスクリプトファイルを作成する必要があります。 作成するスクリプトレットは、以下の3ファイルです。
|  | 〜_init.ses | 初期アクセス時に実行するスクリプトレット | 必須
|  | 〜_exec.ses | 処理要求を実行するスクリプトレット | 必須
|  | 〜_error.ese | エラー処理時に実行するスクリプトレット exceptionグローバルオブジェクトが利用可能となります。 | 任意
|  | ”〜”にはScriptlet（サーブレット）名となります 例：web.xmlにfooSriptletというサーブレットをDefaultScriptや独自のScriptletをServletClass として指定した場合、fooSriptlet_init.ses、fooSriptlet_exec.sesおよびfooSriptlet_error.ses を作成します。
| スクリプトレットは、全てWEB-INF/scriptletフォルダに格納する必要があります。
●スクリプレットの記述
| スクリプトレットの記述には、以下の仕様に従って、init、exec、errorそれぞれのファイルへ 記述を行う必要があります。
|  | 〜_init.ses | セッションの特定の属性(SecureServlet#SEQUENCE_KEY)の値がnull、 または前処理で指定された値が等しい場合に実行されます。 DefaultScriptletでは、その他の場合INVALID_ACCESSとなり、 HTTPレスポンスコード403が戻されます。 このスクリプトレットが初期状態です。このスクリプトレットに記述する A要素HREF属性またはFORM要素ACTION属性の値には、 同じURLを記述するのが基本的な記述方法です。 特定のシーケンスからのみ、アクセスを許可する場合、前のScriptletにて、 SecureServlet#getNextInitSequence()の実装を行い、 呼出されたScriptletにおける、SecureServlet#getInitSequence()の戻り値と 同じあたいを返すように設計する必要があります。
|  | 〜_exec.ses | セッションの特定の属性(SecureServlet#SEQUENCE_KEY)の値がinit処理で 設定された値であった場合にのみ実行されます。 DefaultScriptでは、POST、GETいずれのメソッドにおいても、 要求パラメータが指定されている必要があります。
|  | 〜_error.ses | 必須ではありませんが、通常は実装する必要があると思われます。 exceptionグローバルオブジェクトは、発生した例外をスクリプト’から アクセス可能にする為に定義されています。 任意のメッセージを表示したい場合に利用します。
| servervalidation要素 | 要求パラメータの検証ルールを記述する要素です。 記述フォーマットは次の通りです。
|  | パラメータ名 | 要求パラメータ（INPUT要素のNAME属性値）を指定します。
|  | = | 必ず”=”を記述します。
|  | ルール | 正規表現(Java)でルールを記述します。例を記述します。 数字3桁：\d{3} 漢字とひらがな4文字： [\p{InCJKUnifiedIdeographs}\p{InHiragana}]{4} カタカナ1文字以上、3文字以内： [\p{InKatakana}\p{InHalfwidthAndFullwidthForms}]{1,3}
|  | , | 必須パラメータとしたい場合は、必ず”,”を記述します。
|  | 必須フラグ | trueと記述した場合のみ必須パラメータとなります。 その他の値、または”,”以降を記述しなかった場合は、 任意パラメータとなります。
| serverscript要素 | スクリプト記述要素です。 Rhinoで提供される記述方式が実装可能です。後に記述する、LiveConnectや E4X(要Apache XMLBeans)等、強力な言語仕様です。 また、スクリプトレット用に、いくつかの特別なグローバルオブジェクトも 追加しました。
●予約グローバル・オブジェクト名（追加分のみ）
| request | javax.servlet.http.HttpServletRequestクラスのインスタンス
| response | javax.servlet.http.HttpServletResponseクラスのインスタンス
| session | javax.servlet.http.HttpSessionクラスのインスタンス HttpServletRequest#getSession()の戻り値
| serverout | java.io.PrintWriterクラスのインスタンス HttpServletResponse#getWrite()の戻り値
| sysout | 標準出力（System.out）です。
| syserr | エラー出力（System.err）です。
| helper | info.dragonlady.scriptlet.ESCylinder.ESHelperクラスのインスタンス 文字コード操作用の関数を提供します。
| exception | info.dragonlady.scriptlet.ESExceptionクラスのインスタンス スクリプレット実行時に発生した例外オブジェクトです。
●オブジェクトの追加
| SecureServlet#getScriptNewProperties()を実装（オーバーライド）することにより、 独自のグルーバルオブジェクトを定義できます。 getScriptNewProperties()メソッドの戻り値Mapに key：グローバルオブジェクト名、value：提供したいインスタンスを設定することにより、 独自のグルーバルオブジェクトを追加できます。
●LiveConnect
| Rhinoの強力な機能です。 下記サンプルのように、クラスパスにあるJavaクラスのインスタンスをスクリプト内より 直接生成できます。
| 例 <serverscript> var url = request.getParameter("remoteurl"); var net = new java.net.URL(url); var con = net.openConnection(); var reader = new java.io.BufferedReader(new java.io.InputStreamReader(con.getInputStream())); var readData = reader.readLine(); while(readData){ serverout.write(readData); serverout.write("\n"); readData = reader.readLine(); } </serverscript>
●E4X
| RhinoとApache XMLBeansの組合わせで提供される、強力なXML解析／操作機能です。 下記のサンプルのように、XML操作が直感的に行えます。 詳細については、Rhinoのサイトを参照してください。
| 例 var rssxml = new XML(xmlData); for(var temp1 in rssxml..item.title) { serverout.write(rssxml..item.title[temp1]); serverout.write("<br>\n"); }