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 と表記します。

セットアップ手順

  1. Jakarta BSF のアーカイブから、 bsf.jar を $APP_HOME/WEB-INF/lib にコピーします。
  2. (Jaclを使う場合) Jaclの配布アーカイブから、 jacl.jar と tcljava.jar を $APP_HOME/WEB-INF/lib にコピーします。
    (Rhinoを使う場合) Rhinoの配布アーカイブから、 js.jar を $APP_HOME/WEB-INF/lib にコピーします。
  3. Jakarta Taglibs のアーカイブから、 bsf ディレクトリの taglibs-bsf.jar を $APP_HOME/WEB-INF/lib にコピーします。
  4. jakarta-taglibs/session/jakarta-bsf.tld を $APP_HOME/WEB-INF にコピーします。
  5. $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のサンプルです。

Server Side Java Index Top

(first uploaded 2003/03/27 last updated 2003/06/09, URANO398)

テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル