BSF 是什麼
Bean Scripting Framework(BSF)是一個支持在Java應用程式內調用腳本語言 (Script),並且支持腳本語言直接訪問Java對象和方法的一個開源項目。有了它 , 你就能在java application中使用javascript, Python, XSLT, Perl, tcl, ……等一大堆scripting language. 反過來也可以,就是在這些scripting language中調用任何已經註冊過了的JavaBean,java object。
它提供了完整的API實現通過Java訪問腳本語言的引擎。目前BSF 支持以下幾種
腳本語言:
Javascript (using Rhino ECMAScript, from the Mozilla project)
NetRexx(an extension of the IBM REXX scripting language in Java)
Python (using Jython)
Tcl (using Jacl)
XSLT Stylesheets (as a component of Apache XML project's Xalan and Xerces)
另外,也支持以下的這幾種語言通過他們自身的BSF引擎來實現(下面提到的各個
腳本語言的引擎都可以在其官網下載到)。
Java (using BeanShell, from the BeanShell project)
Groovy
JLog (PROLOG implemented in Java)
JRuby
JudoScript
ooRexx (Open Object Rexx), using BSF4Rexx.
BSF最初是IBM的Alpha工作組的項目後來貢獻給了Apache,這個項目的目的就是為使得在
腳本語言的環境下訪問JavaBean的內容。相信使用過這個Apache項目的朋友應該不多。但是這是一個很好的idea。可以使得Java能夠更好的於各種流行腳本語言整合,實現不同語言之間的互動作用。隨著Groovy, Ruby等腳本語言的走紅。這個項目可能會有更大的發揮餘地。試想一下,使用Java來編寫模組,使用腳本來排列組合各個模組。並且可以通過bsf來統一管理運行多種不同腳本,這樣也算是不錯的想法。當然具體運用它還要看實際項目的需要。
如何安裝
把bsf.jar檔案當做class library來安裝.另外一個非常重要的包是js.jar(假如你用javascript的話),也要裝進來,否則會找不到javascriptEngine。
三、如何使用?
在JSP中使用BSF:
省略
在servlet / formBean / java application中使用BSF:
Step 1. import BSF class
例如: 這些包都是要用到的.
import org.apache.soap.util.IOUtils; (這個包用於把javascript檔案給變成String,才能扔進BSF引擎中處理)
import org.apache.bsf.*; (BSF引擎就在這裡)
import org.apache.bsf.engines.javascript.*;
import java.io.*;
import java.util.*;
Step 2. initiate BSFManager object
例: bsfmgr = new BSFManager();
Step 3.使用BSFManager.eval(….) 或 BSFManager.exec(…) 就可以執行javascript了.
例:
Object obj = bsfmgr.eval( “javascript”, XX, YY, ZZ, script ) : 返回script的值,以object的形式.
bsfmgr.exec( “javascript”, XX, YY, ZZ, script): 執行這script.返回空!
第一個參數javascript可以換成其它如perl, python, tcl……
XX: The name of the input source (typically a filename; here, it's always simply Evaluator),沒有什麼用,任何string都行.
YY: The line number, 通常為0,
ZZ: The character position of the given script in the input source (these arguments are for error reporting), 通常為0最後一個參數是要執行的script語句, 是String就行了.
Step 4:
在java class 中註冊一個javaBean, mgr.declareBean("PS", ps, ps.getClass()), “PS” 和 ps(一個javaBean的 instance) 綁定在一起了. 以後在 javascript檔案中,直接用 PS就可以找到這個javaBean了.
如果你用另外一種註冊方法: mgr.registerBean("PS",ps) , 那么在javascript檔案中,用PS = bsf.lookupBean("PS") 來在BSFManager中找到PS這個javaBean. Bsf就代表BSFManager.
常用的method參考:
BSFManager() - the BSFManager constructor
· eval() - used to evaluate a script and return its value
· exec() - used to execute a script
· loadScriptingEngine() - used to return a BSFEngine for the desired scripting language
· registerBean() - adds an object to BSF’s object registry
· lookupBean() - retrieves an object from BSF’s object registry
· declareBean() - creates an implicit object in the context of any loaded scripting language, which does not have to be accessed via lookupBean()
BSF(back-surface field)
太陽能電池中用於減少反射、增加電池轉換效率的背面反射場。