スクリプトレットについて
ファイル名/格納先
 
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");
}