Jakarta Taglibs BSFタグライブラリとスクリプト言語 |
BSFタグライブラリは、
BSF(Bean Scripting Framework)
を実装したJavaのクラスライブラリを利用して、
TclやPython、JavaScriptといったスクリプト言語のプログラムをJava VM上
(つまり、J2EEアプリケーションサーバ上でも)
で動かす機能を提供します。
TclのJavaによる実装はJacl、
PythonのJavaによる実装はJython
と呼ばれます。
また、Javaで書かれたJavaScriptの実装としては、
Mozilla.org の元でオープンソースで開発されている
Rhinoが最も有名です。
これらのうち、JaclとRhinoは動作確認しました。
Jythonはスクリプト中に日本語の文字列を使うと化けてしまい、確認に至っていません。
そこで、ここではスクリプト言語としてJaclとRhino
(TclとJavaScript) に絞ってご紹介します。
BSFを使って、JSP上でTcl/JavaScript言語のスクリプトを実行するには、
Java VM、サーブレットコンテナの他に次のものが必要です。
- BSFの実装。ここでは
Jakarta Project
がオープンソースで公開しているライブラリ(bsf.jar)を使います。
最新のバージョンは2.3.0で、これを使います。
-
Jakarta Taglibs
に含まれるbsfパッケージのライブラリ、
taglibs-bsf.jar とそのタグライブラリデスクリプタ、taglibs-bsf.tld
-
(Jaclを使う場合)
Jaclのライブラリ、jacl.jarとtcljava.jar。
ここではJaclのバージョン1.3.0のライブラリを使いました。
(Rhinoを使う場合)
Rhinoのライブラリ、js.jar。
BSF自体については、こちらのページで紹介しています。
以下の説明では、タグライブラリを使いたいWebアプリケーションの基点ディレクトリを
$APP_HOME と表記します。
●セットアップ手順
-
Jakarta BSF のアーカイブから、
bsf.jar を $APP_HOME/WEB-INF/lib にコピーします。
-
(Jaclを使う場合)
Jaclの配布アーカイブから、
jacl.jar と tcljava.jar を $APP_HOME/WEB-INF/lib にコピーします。
(Rhinoを使う場合)
Rhinoの配布アーカイブから、
js.jar を $APP_HOME/WEB-INF/lib にコピーします。
-
Jakarta Taglibs のアーカイブから、
bsf ディレクトリの taglibs-bsf.jar を
$APP_HOME/WEB-INF/lib にコピーします。
-
jakarta-taglibs/session/jakarta-bsf.tld を
$APP_HOME/WEB-INF にコピーします。
-
$APP_HOME/WEB-INF/web.xmlを編集して、
次の記述を書き加えます。
<taglib>
<taglib-uri>http://jakarta.apache.org/taglibs/bsf-1.0</taglib-uri>
<taglib-location>/WEB-INF/taglibs-bsf.tld</taglib-location>
</taglib>
|
●Jaclのサンプル
<%@ page language="java" contentType="text/html;charset=Shift_JIS" %>
<%@ page import="tcl.lang.*" %>
<%@ taglib uri="http://jakarta.apache.org/taglibs/bsf-1.0" prefix="bsf" %>
<html><body>
<font color="#700040">●Jakarta Taglibs BSFのテスト</font><br>
<bsf:scriptlet language="jacl">
package require java
$out println {<font color="red">ハローワールド</font><br>}
$out println "[expr 3+5]<br>"
</bsf:scriptlet>
</body></html>
|
サンプルは基本に立ち返って、ハローワールドだけの簡単な処理です。
bsf:scriptlet
タグで囲んだ中身がTclスクリプトです。
BSFでは暗黙オブジェクトとして
outという変数があります。
もちろんこれは、JSPと同じように、
Webクライアントに送り返すHTTP出力ストリームに対応する
JspWriterクラスのオブジェクトです。
●Rhinoのサンプル
<%@ page language="java" contentType="text/html;charset=Shift_JIS" %>
<%@ page import="tcl.lang.*" %>
<%@ taglib uri="http://jakarta.apache.org/taglibs/bsf-1.0" prefix="bsf" %>
<html><body>
<font color="#700040">●Jakarta Taglibs BSFのテスト</font><br>
<bsf:scriptlet language="javascript">
out.println("<font color=\"red\">ハローワールド</font><br>")
out.println((3+5) + "です。<br>")
</bsf:scriptlet>
</body></html>
|
同様に、Rhinoのサンプルです。
(first uploaded 2003/03/27 last updated 2003/06/09, URANO398)
|