Java Sticky Note
java
link
author
|
|
Jexl / Jelly 〜 EL,JSTL の機能を非Web アプリケーションで使う〜
JSTL は処理内容をJSP 内にタグベースで記述する
サーブレットエンジン上の技術ですが,EL 及びJSTL
相当の機能をXML ベースのスクリプトから実行する
技術にJellyがあります.Jelly
は, Jakarta Commons
のサブプロジェクトです.Jakarta Commons はTomcat やJetspeed のような特定のフ
レームワークではなく,汎用的に使用可能なJava ラ
イブラリを提供するApache Jakarta プロジェクトの
サブプロジェクトです.
Jelly は,サーブレットエンジン上ではなく,単体
で動作させることが可能です.サーブレット上で動作
するわけではないので,変数のスコープの考え方な
ど,JSTL と完全に同じ機能を提供しているわけでは
ありませんが,JSTL の機能をほぼ包含するタグが用
意されています.もちろん,JSTL のEL 相当の式言
語も利用可能です.Jelly は,Ant
のフロントエンド
としても使用可能で,Ant 単独では困難で複
雑な条件判断などの実現も可能です.
Jelly では,core ライブラリ使用時の接頭
辞にj を使用します.リストa は,Jelly を用いて記述
したスクリプトの例です.
リストa. Jelly によるスクリプトの例
<?xml version="1.0"?>
<j:jelly xmlns:j="jelly:core" >
<j:forEach var="x" begin="1" end="10" step="2">
<j:set var="sum" value="${sum + x}"/>
</j:forEach>
sum = <j:out value="${sum}"/>
</j:jelly>
|
リストb はJelly で記述したスクリプトを実行し,出力する簡単なJava プログ
ラムです.プログラムb のJellySample 起動時の引数
に,Jelly スクリプトファイルのファイル名を指定す
ると,実行結果が標準出力に出力されます.
リストb. Jelly スクリプトを呼び出す
プログラムの例
import java.io.File;
import org.apache.commons.jelly.*;
public class JellySample {
public static void main(String[] arg) throws Exception {
XMLOutput output = XMLOutput.createXMLOutput(System.out);
JellyContext context = new JellyContext();
context.runScript(new File(arg[0]), output);
}
}
|
Jelly では,式言語の実装をJelly プロジェクト独自
で行っているわけではなく,式言語の実装は同じ
Jakarta Commons プロジェクト内の,Jexl サブプロジェクトのプロダクトを使用しています.Jexl は,
JSTL 相当の式言語を拡張したスクリプトをJava プロ
グラム内から処理することを可能にするクラスライブ
ラリです.
リストc は,x とy に変数を設定し,x+y を実行す
るスクリプトをJava プログラムから呼び出す例です.
リストc. Jexl を使用したサンプルプログラム
import org.apache.commons.jexl.*;
public class JexlSample {
public static void main(String[] arg) throws Exception {
String script = "x+y";
Expression e = ExpressionFactory.createExpression(script);
JexlContext jc = JexlHelper.createContext();
jc.getVars().put("x", "10");
jc.getVars().put("y", "20");
Object value = e.evaluate(jc);
System.out.println("x + y = " + value);
}
}
|
初出:技術評論社刊「JAVA PRESS Vol.31」
JAVA PRESSの記事に加筆・修正しています。
このドキュメントに関するご意見、ご要望などはまで。
|
|