blob: d4a30d092bca99e8f58531dee21bbaa1fddeee3a [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!-- Content Stylesheet for Site -->
<!-- start the processing -->
<html>
<!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<meta name="author" value="Victor Orlikowski">
<meta name="email" value="victor.j.orlikowski@alumni.duke.edu">
<meta name="author" value="Chuck Murcko">
<meta name="email" value="chuck@topsail.org">
<title>Jakarta BSF - BSF Documentation</title>
</head>
<body bgcolor="#ffffff" text="#000000" link="#525D76">
<table border="0" width="100%" cellspacing="0">
<!-- TOP IMAGE -->
<tr>
<td align="left">
<a href="http://jakarta.apache.org"><img src="images/jakarta-logo.gif" border="0"/></a>
</td>
<td align="right">
<a href="http://jakarta.apache.org/bsf/"><img src="./images/bsf_logo.jpg" alt="Jakarta BSF" border="0"/></a>
</td>
</tr>
</table>
<table border="0" width="100%" cellspacing="4">
<tr><td colspan="2">
<hr noshade="" size="1"/>
</td></tr>
<tr>
<!-- LEFT SIDE NAVIGATION -->
<td valign="top" nowrap="true">
<p><strong>BSF Essentials</strong></p>
<ul>
<li> <a href="./index.html">Front Page</a>
</li>
<li> <a href="./bsfnews.html">News</a>
</li>
<li> <a href="./manual.html">Documentation</a>
</li>
<li> <a href="./projects.html">Related Projects</a>
</li>
<li> <a href="./resources.html">Resources</a>
</li>
<li> <a href="./faq.html">BSF FAQ</a>
</li>
<li> <a href="./problems.html">Having Problems?</a>
</li>
</ul>
<p><strong>Download</strong></p>
<ul>
<li> <a href="http://jakarta.apache.org/site/downloads/downloads_bsf.cgi">Binaries</a>
</li>
<li> <a href="http://jakarta.apache.org/site/downloads/downloads_bsf.cgi">Source Code</a>
</li>
</ul>
<p><strong>Jakarta</strong></p>
<ul>
<li> <a href="http://jakarta.apache.org/site/news.html">News & Status</a>
</li>
<li> <a href="http://jakarta.apache.org/site/mission.html">Mission</a>
</li>
<li> <a href="http://jakarta.apache.org/site/guidelines.html">Guidelines Notes</a>
</li>
<li> <a href="http://jakarta.apache.org/site/faqs.html">FAQs</a>
</li>
</ul>
<p><strong>Get Involved</strong></p>
<ul>
<li> <a href="http://jakarta.apache.org/site/getinvolved.html">Overview</a>
</li>
<li> <a href="http://jakarta.apache.org/site/cvsindex.html">Source Repositories</a>
</li>
<li> <a href="http://www.faqs.org/rfcs/rfc1855.html">Netiquette</a>
</li>
<li> <a href="http://jakarta.apache.org/site/mail.html">Mailing Lists</a>
</li>
<li> <a href="http://jakarta.apache.org/site/library.html">Reference Library</a>
</li>
<li> <a href="http://issues.apache.org/jira/browse/BSF">Bug Database</a>
</li>
<li> <a href="http://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&type=4&pid=12310621&resolution=-1&sorter/field=issuekey&sorter/order=ASC">Enhancement Requests</a>
</li>
</ul>
</td>
<td align="left" valign="top">
<table border="0" cellspacing="0" cellpadding="2" width="100%">
<tr><td bgcolor="#525D76">
<font color="#ffffff" face="arial,helvetica,sanserif">
<a name="Bean Scripting Framework"><strong>Bean Scripting Framework</strong></a>
</font>
</td></tr>
<tr><td>
<blockquote>
<p>
Bean Scripting Framework (BSF) is a set of Java classes which provides
scripting language support within Java applications, and
access to Java objects and methods from scripting languages.
</p>
</blockquote>
</td></tr>
</table>
<table border="0" cellspacing="0" cellpadding="2" width="100%">
<tr><td bgcolor="#525D76">
<font color="#ffffff" face="arial,helvetica,sanserif">
<a name="BSF Architectural Overview"><strong>BSF Architectural Overview</strong></a>
</font>
</td></tr>
<tr><td>
<blockquote>
<p>
The two primary components of BSF are the <code>BSFManager</code>
and the <code>BSFEngine</code>.
</p>
<p>
The <code>BSFManager</code> handles all scripting execution engines
running under its control, and maintains the object registry that permits
scripts access to Java objects. By creating an instance of the
<code>BSFManager</code> class, a Java application can gain access to
scripting services.
</p>
<p>
The <code>BSFEngine</code> provides an interface that must be
implemented for a language to be used by BSF. This interface provides
an abstraction of the scripting language's capabilities that permits
generic handling of script execution and object registration within
the execution context of the scripting language engine.
</p>
<p>
An application can instantiate a single <code>BSFManager</code>,
and execute several different scripting languages identically via the
<code>BSFEngine</code> interface. Furthermore, all of the scripting
languages handled by the <code>BSFManager</code> are aware of the
objects registered with that <code>BSFManager</code>, and the execution
state of those scripting languages is maintained for the lifetime of
the <code>BSFManager</code>.
</p>
</blockquote>
</td></tr>
</table>
<table border="0" cellspacing="0" cellpadding="2" width="100%">
<tr><td bgcolor="#525D76">
<font color="#ffffff" face="arial,helvetica,sanserif">
<a name="Installation"><strong>Installation</strong></a>
</font>
</td></tr>
<tr><td>
<blockquote>
<p>
BSF can be used standalone, as a class library, or as part of an
application server. In order to be used as a class library or as
a standalone system, you simply download a copy of the bsf.jar
file from the
<a href="http://jakarta.apache.org/bsf/index.html">BSF web site</a>
and include it in your classpath, along with any required classes
or jar files for desired languages.
</p>
<p>
In order to use BSF as part of the
<a href="http://jakarta.apache.org/tomcat/">Tomcat</a>
servlet engine, you must currently download patches from the BSF
web site that permit Jasper to call BSF. Instructions for this will be
posted on the website, and will soon be accompanied by prebuilt binaries.
We hope that these changes will be merged into Tomcat in the near
future.
</p>
</blockquote>
</td></tr>
</table>
<table border="0" cellspacing="0" cellpadding="2" width="100%">
<tr><td bgcolor="#525D76">
<font color="#ffffff" face="arial,helvetica,sanserif">
<a name="Using BSF"><strong>Using BSF</strong></a>
</font>
</td></tr>
<tr><td>
<blockquote>
<table border="0" cellspacing="0" cellpadding="2" width="100%">
<tr><td bgcolor="#828DA6">
<font color="#ffffff" face="arial,helvetica,sanserif">
<a name="BSF and JSPs"><strong>BSF and JSPs</strong></a>
</font>
</td></tr>
<tr><td>
<blockquote>
<p>
After you set up an application server that is BSF enabled, you can write
JSPs using any of the supported scripting languages. JSPs using scripting
languages differ only slightly from those using Java.
</p>
<p>
First, you must set the language attribute of the page directive
in the JSP to the desired language. For example,
<p>
<code>
&lt;%@ page language="javascript" %&gt;
</code>
</p>
sets the language used for the JSP to Javascript; any
<code>scriptlet</code>s or <code>expressions</code> within the JSP
will be handed off to BSF, which will in turn hand the code over to
Rhino for execution.
</p>
<p>
The standard set of JSP implicit objects is available within BSF.
These implicit objects must be used for input and output with respect
to the generated page, since the scripting languages do not have any
awareness of having been called within a JSP. For example, in order to
print a line of text into the page generated by the JSP, one must use the
<code>println()</code> method of the <code>out</code> implicit object.
</p>
<p>
Multiple languages can be supported within a given JSP; this is
accomplished by using the BSF taglibs, which are available from the
<a href="http://jakarta.apache.org/taglibs/index.html">Jakarta Taglibs</a>
project. BSF taglib provides two tags: <code>scriptlet</code> and
<code>expression</code>. Both of these have a required language attribute,
which is used to specify the language used on a per <code>scriptlet</code>
or <code>expression</code> basis.
</p>
</blockquote>
</td></tr>
</table>
<table border="0" cellspacing="0" cellpadding="2" width="100%">
<tr><td bgcolor="#828DA6">
<font color="#ffffff" face="arial,helvetica,sanserif">
<a name="Servlets and Other Applications"><strong>Servlets and Other Applications</strong></a>
</font>
</td></tr>
<tr><td>
<blockquote>
<p>
Using BSF in servlets or applications is also quite simple. In order
to provide an application with scripting support, you need to
import the BSF class hierarchy and instantiate a <code>BSFManager</code>
object. After instantiating the <code>BSFManager</code>, you
register or declare any Java objects to be made available within the
scripting engine. Then call either one of the <code>eval()</code>
or <code>exec() BSFManager</code> methods (depending on whether you want to
evaluate a script and have the value of the evaluation returned, or
execute a script). Alternatively, you can call the
<code>loadScriptingEngine()</code> method in order to get an object
implementing the <code>BSFEngine</code> interface for the desired
scripting language. You can then call the <code>exec()</code> or
<code>eval()</code> methods of <code>BSFEngine</code> to run the script.
</p>
<p>
Additionally, BSF declares an object named <code>bsf</code> within a
scripting engine's execution context, which represents the
<code>BSFManager</code> that is associated with the scripting engine.
This object provides all of the methods and properties
associated with the <code>BSFManager</code> to the script.
However, the most used method within scripts is usually
<code>lookupBean()</code>, which is used to access objects
in BSF's object registry.
</p>
<p>
The most important methods within the <code>BSFManager</code> are:
<ul>
<li><code>BSFManager</code>() - the <code>BSFManager</code>
constructor</li>
<li><code>eval()</code> - used to evaluate a script and return
its value</li>
<li><code>exec()</code> - used to execute a script </li>
<li><code>loadScriptingEngine()</code> - used to return a
<code>BSFEngine</code> for the desired scripting language</li>
<li><code>registerBean()</code> - adds an object to BSF's object
registry</li>
<li><code>lookupBean()</code> - retrieves an object from BSF's
object registry</li>
<li><code>declareBean()</code> - creates an implicit object in
the context of any loaded scripting language, which does not have
to be accessed via <code>lookupBean()</code></li>
</ul>
</p>
<p>
Other, less often used methods within the <code>BSFManager</code> are:
<ul>
<li><code>apply()</code> - used to call anonymous functions</li>
<li><code>compileExpr()</code> - used to compile an expression into a
<code>CodeBuffer</code> object</li>
<li><code>compileScript()</code> - similar to compile expression, used to
compile scripts into <code>CodeBuffer</code> objects</li>
<li><code>compileApply()</code> - similar to both of the above - used to
compile anonymous functions into <code>CodeBuffer</code> objects</li>
</ul>
</p>
<p>
For the curious, the <code>CodeBuffer</code> is a class provided by BSF for
storing generated Java code.
</p>
<p>
The <code>BSFManager</code> <code>exec()</code>, <code>eval()</code>,
and <code>apply()</code> methods (as well as their compile counterparts)
are wrappers over the equivalent methods presented by the
<code>BSFEngine</code> interface. If the programmer explicitly
loads a scripting engine via <code>loadScriptingEngine()</code>, they
can use the <code>exec()</code> or <code>eval()</code> methods of the
resulting <code>BSFEngine</code> as appropriate.
</p>
</blockquote>
</td></tr>
</table>
</blockquote>
</td></tr>
</table>
<table border="0" cellspacing="0" cellpadding="2" width="100%">
<tr><td bgcolor="#525D76">
<font color="#ffffff" face="arial,helvetica,sanserif">
<a name="Adding BSF Support for a Scripting Language"><strong>Adding BSF Support for a Scripting Language</strong></a>
</font>
</td></tr>
<tr><td>
<blockquote>
<p>
In order to incorporate your own scripting language into BSF, you must first
write a class implementing the <code>BSFEngine</code> interface for the
language; examples are available in the BSF source distribution.
</p>
<p>
Usually, a scripting language author extends the
<code>BSFEngineImpl</code> class, which implements <code>BSFEngine</code>,
and only requires the scripting language author to implement the
<code>eval()</code> method. However, the following methods specified by
the <code>BSFEngine</code> interface are the most commonly implemented:
<ul>
<li><code>initialize()</code> - used to set up the underlying scripting
language engine</li>
<li><code>call()</code> - used to call functions or methods within the
scripting engine</li>
<li><code>eval()</code> - used to evaluate a script</li>
<li><code>exec()</code> - used to execute a script</li>
<li><code>declareBean()</code> - used to create an implicit object within
the scripting language</li>
<li><code>undeclareBean()</code> - used to remove an implicit object
from the scripting language</li>
</ul>
</p>
<p>
Once you have implemented the wrapper for your language engine, you
instantiate a <code>BSFManager</code> in your application, and register your
engine with it via the <code>registerScriptingEngine()</code> method.
Afterward, you may use your language within the application through the
usual BSF semantics.
</p>
</blockquote>
</td></tr>
</table>
<table border="0" cellspacing="0" cellpadding="2" width="100%">
<tr><td bgcolor="#525D76">
<font color="#ffffff" face="arial,helvetica,sanserif">
<a name="Standalone Scripts"><strong>Standalone Scripts</strong></a>
</font>
</td></tr>
<tr><td>
<blockquote>
<p>
BSF provides a facility for running scripting languages itself. Simply running
<code>java org.apache.bsf.Main</code> will produce a help message, with
instructions on how to run these scripts.
</p>
</blockquote>
</td></tr>
</table>
</td>
</tr>
<!-- FOOTER -->
<tr><td colspan="2">
<hr noshade="" size="1"/>
</td></tr>
<tr><td colspan="2">
<div align="center"><font color="#525D76" size="-1"><em>
Copyright &#169; 2002-2010, Apache Software Foundation
</em></font></div>
</td></tr>
</table>
</body>
</html>
<!-- end the processing -->