I will be waiting for your knock ever after from today.


Visards, Inc.

Java Sticky Note

java
  ・JSTL
  ・Commons Net
  ・Apache
  ・Tomcat
  ・James
  ・Jetspeed
  ・POI
  ・Jexl
  ・Jelly
  ・Blojsom
  ・eclipse

link
  ・James

author
  ・profile

Jexl / Jelly  
JSTL Index
Jexl / Jelly
〜 EL,JSTL の機能を非Web アプリケーションで使う〜

mixiチェック

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の記事に加筆・修正しています。


このドキュメントに関するご意見、ご要望などはまで。


Copyright (C) 2003-2005 Visards, Inc. All Rights Reserved.