`

Java动态执行代码Bsh

    博客分类:
  • Java
 
阅读更多

 

首先要到http://www.beanshell.org/download.html去下载个BeanShell的一个包,如bsh-2.0b4.jar ,然后在ClassPath中将它的地址加上.

package test;

import java.util.Date;
import bsh.EvalError;
import bsh.Interpreter;

public class Test {
 public static void main(String[] args) {
  Interpreter interpreter = new Interpreter();
  String s = "2>3||3>4&&5<4";
  try {
   interpreter.set("boolean", interpreter.eval("(" + s +")"));
   System.out.println(interpreter.get("boolean"));
  } catch (EvalError e) {
   e.printStackTrace();
  }
 }
}

 

从你的应用程序调用BeanShell

 

通过建立一个BeanShell解释器,使用eval()或source()命令,你可以在你的应用程序中求文本表达式的值和运行脚本。如果你希望在你的脚本内部使用一个对象,可以用set()方法传递对象的变量参数给BeanShell,并通过get()方法取得结果。

   

 import bsh.Interpreter;
    Interpreter i = new Interpreter();  // Construct an interpreter
    i.set("foo", 5);                    // Set variables
    i.set("date", new Date() );
    Date date = (Date)i.get("date");    // retrieve a variable
    // Eval a statement and get the result
    i.eval("bar = foo*10");            
    System.out.println( i.get("bar") );
    // Source an external script file
    i.source("somefile.bsh"); 

 

如官方的例子

         Here are some examples:

 

                Interpeter bsh = new Interpreter();

                // Evaluate statements and expressions
                bsh.eval("foo=Math.sin(0.5)");
                bsh.eval("bar=foo*5; bar=Math.cos(bar);");
                bsh.eval("for(i=0; i<10; i++) { print(\"hello\"); }");
                // same as above using java syntax and apis only
                bsh.eval("for(int i=0; i<10; i++) { System.out.println(\"hello\"); }");

                // Source from files or streams
                bsh.source("myscript.bsh");  // or bsh.eval("source(\"myscript.bsh\")");

                // Use set() and get() to pass objects in and out of variables
                bsh.set( "date", new Date() );
                Date date = (Date)bsh.get( "date" );
                // This would also work:
                Date date = (Date)bsh.eval( "date" );

                bsh.eval("year = date.getYear()");
                Integer year = (Integer)bsh.get("year");  // primitives use wrappers

                // With Java1.3+ scripts can implement arbitrary interfaces...
                // Script an awt event handler (or source it from a file, more likely)
                bsh.eval( "actionPerformed( e ) { print( e ); }");
                // Get a reference to the script object (implementing the interface)
                ActionListener scriptedHandler = 
                        (ActionListener)bsh.eval("return (ActionListener)this");
                // Use the scripted event handler normally...
                new JButton.addActionListener( script );
        

 

分享到:
评论

相关推荐

    java 类库bsh-1.2

    java的工具类库, 运行过程中可执行嵌入java代码

    bsh.rar_Beanshel_beanshell_bsh-2.0b4-src.zip_javascript 解释

    也就是说BeanShell在许多方面对于Java的用处就像Tcl/Tk对于C的用处一样:BeanShell是可嵌入式的---你可以在运行时从你的应用程序调用BeanShell去动态的执行Java代码或是为你的应用程序提供脚本扩展。相反,你也可以...

    java的BeanShell公式执行引擎

    根目录Bean/bin文件夹下bsh-core-2.0b4.jar文件是jar包, 根目录Bean/com/strart.java是用BeanShell计算1+2=3的代码例子

    NC-57BSH远程代码执行漏洞补丁

    先按 说明.txt 中的方案解决 如果替换jar包后导致错误,可以用如下...把项目上“bsh-2.0b”原文件中的 \bsh\servlet\BshServlet.class 文件删除,重启服务 影响版本:NC57 / NC63 / NC65 / NCC1903 / NCC1909 / NCC2005

    beanshell.jar

    一个神奇的Java库:bsh for android,可以动态运行Java代码,非常好用。

    AJShA:Android Java Shell应用

    联合会Android Java Shell应用程式 使用此应用程序,您可以快速评估一些Android Java代码-用于快速迭代,实验和API探索的脚本风格。 有时,您只想评估一些Android代码而不编译项目-这是您完成此工作的应用程序。 ...

    通过spring用beanshell实现java接口示例

    通过脚本语言让JAVA执行动态代码2.用Spring可以将脚本语言代理成Java接口的实现类3.Spring2.5.6中支持三种脚本语言ruby,Groovy,BeanShell4.示例中为spring与beanshell结合5.依赖spring2.5.6,bsh-2.0b4 代码如下:...

    网络架构师148讲视频课程

    java架构师148讲视频教程 │ ├─1-148视频教程 │ 第01节:整体课程概览.flv │ 第02节:分模块、分工程管理.avi │ 第03节:多模块多Web应用合并War包.avi │ 第04节:Git基本原理和安装配置使用.avi │ 第05节...

    BeanShell 测试实例

    Beanshell (bsh) 是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性。BeanShell执行 标准Java语句和表达式,另外包括一些脚本命令和语法。

    beanShell范例

    Beanshell是用Java写成的,是一个小型的、免费的的、可嵌入式的Java源代码解释器,具有对象脚本语言特性。 BeanShell执行标准Java语句和表达式,另外包括一些脚本命令和语法。它将脚本化对象看作简单闭包方法...

    JTools-extras:实验性或依赖于 3rd 方库的 JTools 的附加功能

    Java 工具和实用程序的集合。 这些工具要么是实验性的,要么依赖于第三方库。 整个项目依赖于 JTools,测试代码使用 TestNG。 除此之外,每个包都记录了自己的依赖关系。 用法 该项目旨在成为一个实用程序库。 该...

Global site tag (gtag.js) - Google Analytics