●ファイル名/格納先
|
||||||
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");
}
|