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
ObjectScript
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)
太陽能電池中用於減少反射、增加電池轉換效率的背面反射場。