●ファイル名/格納先
|
||||||||||||||||||||||||||||||||||||||
1つのScriptletに対して、処理スクリプトと、例外発生時のエラースクリプトの2ファイルで構成されます。
エラースクリプトは省略する事が可能です。
|
||||||||||||||||||||||||||||||||||||||
〜
|
処理を実行するスクリプトレット
|
必須
|
||||||||||||||||||||||||||||||||||||
〜_error
|
エラー処理時に実行するスクリプトレット
exceptionグローバルオブジェクトが利用可能となります。
|
任意
|
||||||||||||||||||||||||||||||||||||
”〜”にはScriptlet名となります
例:sitemap.xmlにfooSriptletというサーブレットをDefaultScriptetや独自のScriptletを利用して
指定した場合、fooSriptletおよびfooSriptlet_errorを作成します。
|
||||||||||||||||||||||||||||||||||||||
スクリプトレットは、WEB-INF/scriptletフォルダに格納するかWEB-INF/config.xmlに定義した任意のパスに格納する必要があります。
例:<entry key='scriptlet_path'>/usr/local/foo/scriptlet</entry>
|
||||||||||||||||||||||||||||||||||||||
エラースクリプトを省略した際の共通エラースクリプトのファイル名をWEB-INF/config.xmlに設定して、スクリプトレットフォルダに格納する必要があります。
例:<entry key='common_error'>common_error.es</entry>
|
||||||||||||||||||||||||||||||||||||||
●ページ管理
|
||||||||||||||||||||||||||||||||||||||
サイトマップをXMLで記述する事により、ページ(画面)を管理します。
全てのパスを定義しなくてもスクリプト(ファイル)が存在すれば該当のスクリプトが実行されます。省略された場合は、site要素のclass属性に定義されたScriptlet実装クラスを利用します。 |
||||||||||||||||||||||||||||||||||||||
ノード名
|
概要
|
ノードタイプ
|
必須
|
|||||||||||||||||||||||||||||||||||
site
|
ルートエレメントノード、必ずsiteノードで定義を開始する必要があります。
|
要素
|
◯
|
|||||||||||||||||||||||||||||||||||
version
|
1.0を指定します。
|
属性
|
◯
|
|||||||||||||||||||||||||||||||||||
class
|
デフォルトのScriptletのクラスを定義します。
|
属性
|
◯
|
|||||||||||||||||||||||||||||||||||
page
|
各ページ毎に定義します。
|
要素
|
◯
|
|||||||||||||||||||||||||||||||||||
path
|
ページのパスを定義します(コンテキスト名を含まず、かならず”/”で始まります)
※HttpServletRequest#getRequestURIの戻り値
|
属性
|
◯
|
|||||||||||||||||||||||||||||||||||
class
|
Scriptletのクラスを定義します。
|
属性
|
||||||||||||||||||||||||||||||||||||
サイトマップXMLは、WEB-INF/sitemap.xmlに定義するかWEB-INF/config.xmlに任意のパスを定義する必要があります。
例: <entry key='sitemap'>/usr/local/foo/sitemap.xml</entry>
|
||||||||||||||||||||||||||||||||||||||
●スクリプレットの記述
|
||||||||||||||||||||||||||||||||||||||
スクリプトレットの記述には、以下の仕様に従って、それぞれのファイルへ記述を行う必要があります。
|
||||||||||||||||||||||||||||||||||||||
〜
|
フォルダ名はコンテキスト名を含まないフォルダ構成を指定します。
グローバルオブジェクトはsite要素のclass属性に定義されたクラスまたはpage要素ののclass属性に定義されたクラスに依存します。
|
|||||||||||||||||||||||||||||||||||||
〜_error
|
必須ではありません。
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で提供される記述方式が実装可能です。
また、スクリプトレット用に、いくつかの特別なグローバルオブジェクトも
追加しました。
|
|||||||||||||||||||||||||||||||||||||
予約語
|
@import
外部スクリプトを取込みます。外部スクリプトは拡張子に関わらず、serverscriptlet要素内の命令を処理します。
|
|||||||||||||||||||||||||||||||||||||
●予約グローバル・オブジェクト名(追加分のみ)
|
||||||||||||||||||||||||||||||||||||||
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クラスのインスタンス
スクリプレット実行時に発生した例外オブジェクトです。
|
|||||||||||||||||||||||||||||||||||||
document
|
HTMLのbody要素にonloadserver属性を定義し、呼出された関数内でのみ参照可能なグローバルオブジェクト。
HTMLドキュメント自体を示す、ドキュメントオブジェクト(DOM)です。
|
|||||||||||||||||||||||||||||||||||||
mongodb
|
MongoDBアクセスオブジェクト
mongodb.xml(デフォルト)に定義したMongoDBに接続条件を設定して、collectionの作成/アクセスを行なうことができます。
MongoDB設定XMLは、WEB-INF/mongodb.xmlに定義するか、WEB-INF/config.xmlに任意のパスを定義する必要があります。
例)
<entry key='mongodbject'>true</entry> <entry key='mongodbconfig'>/Users/Shared/work_folder/DEVELOPPING/ServerEScript/ses/WEB-INF/mongodb.xml</entry> |
|||||||||||||||||||||||||||||||||||||
mongodbjson
|
MongoDB簡易アクセスオブジェクト
JSONを引数にmongoDBへのアクセスを行うオブジェクト
例:
var removeData = "{'regist_ts':{'$lte':"+before15min+"}}"; mongodbjson.removeDB(mongodb, 'chat_message_col', removeData); 例:
mongodbjson.insertDB(mongodb, 'chat_message_col', JSON.stringify(jsonData)); |
|||||||||||||||||||||||||||||||||||||
dbaccesser
|
RDB汎用アクセスオブジェクト
db_config.xml(デフォルト)に定義したRDBアクセス設定、およびSQLをスクリプトレットより利用する事で、DBアプリケーションを簡単に構築可能です。
DB設定XMLは、WEB-INF/db_config.xmlに定義するかWEB-INF/config.xmlに任意のパスを定義する必要があります。
例: <entry key='dbconfig'>/usr/local/foo/db_config.xml</entry>
|
|||||||||||||||||||||||||||||||||||||
sqldbjson
|
RDB汎用簡易アクセスオブジェクト
JSONを引数にDBへのアクセスを行うオブジェクト
例:
var params = []; var tel = '{"type":"STRING", "value":"'+gps.tel+'"}'; var imsi = '{"type":"STRING", "value":"'+gps.imsi+'"}'; var gps_latitude = '{"type":"STRING", "value":"'+gps.gps_latitude+'"}'; var gps_longitude = '{"type":"STRING", "value":"'+gps.gps_longitude+'"}'; var gps_time = '{"type":"STRING", "value":"'+gps.gps_time+'"}'; var gps_accuracy = '{"type":"STRING", "value":"'+gps.gps_accuracy+'"}'; var net_latitude = '{"type":"STRING", "value":"'+gps.net_latitude+'"}'; var net_longitude = '{"type":"STRING", "value":"'+gps.net_longitude+'"}'; var net_time = '{"type":"STRING", "value":"'+gps.net_time+'"}'; var net_accuracy = '{"type":"STRING", "value":"'+gps.net_accuracy+'"}'; var charge = '{"type":"STRING", "value":"'+gps.charge+'"}'; var network = '{"type":"STRING", "value":"'+gps.network+'"}'; params.push(tel); params.push(imsi); params.push(gps_latitude); params.push(gps_longitude); params.push(gps_time); params.push(gps_accuracy); params.push(net_latitude); params.push(net_longitude); params.push(net_time); params.push(net_accuracy); params.push(charge); params.push(network); var result = sqldbjson.execUpdateSQL(dbaccesser, 'insertgps', params); 例:
var params = []; var tel = '{"type":"STRING", "value":"'+gps.tel+'"}'; params.push(tel); var result = sqldbjson.execSelectSQL(dbaccesser, 'selectgps', params); var resultJson = JSON.parse(result); |
|||||||||||||||||||||||||||||||||||||
●オブジェクトの追加
|
||||||||||||||||||||||||||||||||||||||
SecureServlet#getScriptNewProperties()を実装(オーバーライド)することにより、
独自のグルーバルオブジェクトを定義できます。 getScriptNewProperties()メソッドの戻り値Mapに
key:グローバルオブジェクト名、value:提供したいインスタンスを設定することにより、
独自のグルーバルオブジェクトを追加できます。
|
||||||||||||||||||||||||||||||||||||||
●LiveConnect
|
||||||||||||||||||||||||||||||||||||||
下記サンプルのように、クラスパスにある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");
}
|
||||||||||||||||||||||||||||||||||||||
●documentオブジェクトの利用
|
||||||||||||||||||||||||||||||||||||||
onloadserver属性に指定した関数では、documentオブジェクトへの参照が可能になります。
この場合、完全に解析されたHTMLがオブジェクトとして参照できるため、埋込み型のスクリプトレットにて動的に生成された箇所への参照も可能となります。
ただし、HTMLは完全なXMLドキュメントとする必要があります。
|
||||||||||||||||||||||||||||||||||||||
例
・基本スクリプトレット
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift-jis"/>
<title>test</title>
<serverscript language="JavaScript" type="text/javascript" src="DocumentTest.js"/>
</head>
<body onload="init()" onloadserver="getValue()">
Document test<br/>
<br/>
<serverscript>
serverout.write("<div id='doctest'>Documentをサポートしました</div>");
serverout.write("<br/>");
</serverscript>
<a href='./DocumentTest'>戻る</a>
</body>
</html>
・外部スクリプトレット
function getValue() {
var targetNode = document.getElementsByTagName("div").item(0);
if(targetNode){
var testValue = targetNode.getFirstChild().getNodeValue();
targetNode.appendChild(document.createElement("br"));
if(document.getCookie("start")) {
targetNode.appendChild(document.createTextNode(document.getCookie("start").getValue()));
}else{
targetNode.appendChild(document.createTextNode("No Cookie"));
}
var d = new Date();
var value = d.getHours() + ":" + d.getMinutes() + " :" + d.getSeconds();
document.setCookie("end", value, -1);
}
}
|
||||||||||||||||||||||||||||||||||||||
●mongodbオブジェクトの利用
|
||||||||||||||||||||||||||||||||||||||
mongodbオブジェクトはMongoDB Java DriverをRhinoでラップしたオブジェクトです。MongoDBで公開しているRhino版JavaScriptとはクラス構成が異なっています。MongoDB定義ファイル(デフォルトは~/WEB-INF/mongodb.xml)にMongoDB接続情報を定義します。
|
||||||||||||||||||||||||||||||||||||||
例)
<html> <META http-equiv="Content-Type" content="text/html; charset=UTF-8"> <body> <serverscript> var col1 = mongodb.getCollection("test1"); serverout.write("test1<br/>"); serverout.write(col1.findOne()); serverout.write("<hr/>"); var col2 = mongodb.getCollection("test2"); serverout.write("test2<br/>"); var docRemove = mongodb.createDBObject(); docRemove.put("b",66); col2.remove(docRemove); docRemove = mongodb.createDBObject(); docRemove.put("b",77); col2.remove(docRemove); docRemove = mongodb.createDBObject(); docRemove.put("b",88); col2.remove(docRemove); var cur = col2.find(); while(cur.hasNext()) { serverout.write(cur.next()); serverout.write("<br/>"); } var doc = mongodb.createDBObject(); doc.put("b",66); col2.insert(doc); doc = mongodb.createDBObject(); doc.put("b",77); col2.insert(doc); doc = mongodb.createDBObject(); doc.put("b",88); col2.insert(doc); serverout.write("--------insert--------<br/>"); var query = mongodb.createDBQuery(); query.put("b", 77); var cur = col2.find(query); while(cur.hasNext()) { serverout.write(cur.next()); serverout.write("<br/>"); } </serverscript> <br/> <a href='.'>戻る</a> </body> </html> |
||||||||||||||||||||||||||||||||||||||
●dbaccesserオブジェクトの利用
|
||||||||||||||||||||||||||||||||||||||
dbaccesserオブジェクトはJDBCを利用したDBアクセス処理を、スクリプトレットより簡単に利用することを可能にする為のオブジェクトです。SQL定義ファイル(デフォルトは~/WEB-INF/db_config.xml)にJDBC接続情報およびスクリプトレットにて利用するSQLステートメントを定義します。
|
||||||||||||||||||||||||||||||||||||||
例1
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=Shift-jis">
<title>DB List</title>
</head>
<body>
<table border='1'>
<tr><td>no</td><td>name</td><td> </td></tr>
<serverscript>
var con = dbaccesser.getConnection();
var resultList = dbaccesser.selectQuery("listsql", con, null);
var i=0;
for(i=0;i<resultList.size();i++) {
serverout.write("<tr>\n");
serverout.write("<form action='./DBDelete' method='post'>\n");
var record = resultList.get(i);
var keys = record.keySet().toArray();
for(var j=0;j<keys.length;j++) {
var key = keys[j];
serverout.write("<td>"+helper.HTMLEncode(record.get(key))+"</td>\n");
serverout.write("<input type='hidden' name='"+helper.HTMLEncode(key)+"' value='"+record.get(key)+"' />\n");
}
serverout.write("<td><input type='submit' name='submit' value='delete' /></td>\n");
serverout.write("</form>\n");
serverout.write("</tr>");
}
con.rollback();
con.close();
</serverscript>
</table>
<br><br>
<br/>
<a href='./DBTest'>戻る</a>
</body>
</html>
|
||||||||||||||||||||||||||||||||||||||
例2
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=Shift-jis">
<title>DB Delete Result</title>
</head>
<body>
<servervalidation>
no=\d{1,5},true
name=.*,true
</servervalidation>
下記を追加しました。<br/>
<serverscript>
var no = request.getParameter("no");
var name = request.getParameter("name");
var paramNo = dbaccesser.createIntDBParam(new Number(no));
var paramName = dbaccesser.createStringDBParam(name);
var params = new Array();
params[0] = paramNo;
params[1] = paramName;
var con = dbaccesser.getConnection();
dbaccesser.updateQuery("insertsql", con, params);
con.commit();
con.close();
serverout.write("no:"+no+"<br/>\n");
serverout.write("name:"+name+"<br/>\n");
</serverscript>
<br><br>
<br/>
<a href='./DBTest'>戻る</a>
</body>
</html>
|
||||||||||||||||||||||||||||||||||||||
・getConnectionメソッド
DBコネクションを確立し、コネクションオブジェクトを返します。
SQL処理を実行した後、トランザクションの結果反映(commitかrollback)およびクローズ(close)
を実施してください。
・createIntDBParamメソッド
・createStringDBParamメソッド
・createBooleanDBParamメソッド
・createLongDBParamメソッド
・createFloatDBParamメソッド
・createDoubleDBParamメソッド
・createDateDBParamメソッド
・createTimestampDBParamメソッド
・createBlodDBParamメソッド
create***DBParamメソッドは、準備型ステートメントオブジェクトの変数”?”に指定する値を作成する
関数群です。それぞれのフィールド型に合わせて、適切な関数を使用します。
ステートメント実行時には、変数の順番通りに作成した変数オブジェクトが格納される配列を引数に渡
します。
・selectQueryメソッド
SELECTステートメントを実行する際に利用する関数です。
第一引数:SQL定義ファイルの任意のSQLステートメントのキー名を指定します。
第二引数:getConnectionメソッドで取得したコネクションオブジェクトを指定します。
第三引数:create***DBParamメソッドにて作成した、変数オブジェクトの配列を指定します。
戻り値:ステートメント実行結果の配列を応答します。
配列内の各レコードはjava.util.Mapクラスで構成され、フィールド名がキーに格納されます。
・updateQueryメソッド
更新系ステートメント(UPDATE、INSERT、DELETE等)を実行する際に利用する関数です。
第一引数:SQL定義ファイルの任意のSQLステートメントのキー名を指定します。
第二引数:getConnectionメソッドで取得したコネクションオブジェクトを指定します。
第三引数:create***DBParamメソッドにて作成した、変数オブジェクトの配列を指定します。
戻り値:ありません。失敗した場合は例外が発生します。
|
||||||||||||||||||||||||||||||||||||||