- 浏览: 425912 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
xiaomuxingren:
你好,请问update-alternatives --inst ...
JDK8安装及jenkins安装 -
wahahachuang8:
我觉得这种东西自己开发太麻烦了,就别自己捣鼓了,找个第三方,方 ...
HTML5 WebSocket -
晨曦的朝阳:
刚好有需求,学习一下!
MySql主从配置 -
mfkvfn:
这是恶意的商业竞争呀
解决 android 微信5.0及后续版本无法打开电话号码的问题 -
fwyhf:
require('./monitor/module_liste ...
NodeJS Server 进程自动重启
简介:
BeanShell
是一种脚本语言,一种完全符合java
语法的java
脚本语言,并且又拥有自己的一些语法和方法,beanShell
是一种松散类型的脚本语言(这点和JS
类似)。
下载地址:http://www.beanshell.org
设置环境
l
把;bsh-xx.jar
放到$JAVA_HOME/jre/lib/ext
文件夹下
l unix: export CLASSPATH=$CLASSPATH:bsh-xx.jar
l windows: set classpath %classpath%;bsh-xx.jar
运行方式:
l
界面UI
方式 :java bsh.Console
l
命令行方式 :java bsh.Interpreter
l
运行脚本文件:java bsh.Interpreter filename [ args ]
简单举例:
在classpath
中设置好环境变量,打开dos
窗口,键入:java bsh.Console
命令
出现BeanShell
图片代表设置成功,beanshell
开始运行
测试内容:
设置变量
foo = "Foo";
four = (2 + 2)*2/2;
打印变量
print( foo + " = " + four );
循环
for (i=0; i<5; i++)
print(i);
在窗口中打印按钮
button = new JButton( "My Button" );
frame = new JFrame( "My Frame" );
frame.getContentPane().add( button, "Center" );
frame.pack();
frame.setVisible(true);
完整代码:
foo = "Foo";
four = (2 + 2)*2/2;
print( foo + " = " + four );
for (i=0; i<5; i++)
print(i);
button = new JButton( "My Button" );
frame = new JFrame( "My Frame" );
frame.getContentPane().add( button, "Center" );
frame.pack();
frame.setVisible(true);
在窗口中输入上面的代码
敲回车执行,运行结果如图
说明:
因为beanshell
是松散类型的脚本语言因此可以直接写
foo = "Foo";
four = (2 + 2)*2/2;
print
是beanshell
提供一种简单的打印命令相当于java
中的System.out.println()
其他的beanshell
脚本命令
· source(), run() –
读取,或者运行一个脚本文件
· frame() –
显示一个窗口
· load(), save() –
读取或者保存一个脚本对象到文件
· cd(), cat(), dir(), pwd(), etc.
使用Unix
下面的命令
· exec() –
运行一个本地的方法
· javap() –
使用javap
命令.
· setAccessibility() –
设置可以接收private
和protected
类型的变量
BeanShell
命令不一定都是内置的脚本命令,脚本方法会自动从classpath
中取方法使用,因此你可以添加你自己的脚本到classpath
中来扩充基本的命令
脚本方法
一般的方法:
int addTwoNumbers( int a, int b ) {
return a + b;
}
sum = addTwoNumbers( 5, 7 ); // 12
也可以使用动态的变量类型(无状态)方法
add( a, b ) {
return a + b;
}
foo = add(1, 2); // 3
foo = add(1, “2”); //”12”
只要有一个为字符串全部按照字符串处理,系统不会根据1
是数字在前把“2”
转换成数字处理(特别注意)
foo = add("Oh", " baby"); // "Oh baby"
实现接口
实现任何接口需要java1.3
或者更高
可以使用缺省的java
匿名类的语法实现一个接口类,例如:
ActionListener scriptedListener = new ActionListener() {
actionPerformed( event ) { ... }
}
不需要实现接口的所有的方法,只需要实现你使用的方法即可,如果使用你没有实现的方法,beanshell
将抛出一个错误,
ml = new MouseListener() {
mousePressed( event ) { ... }
// handle the rest
invoke( name, args ) { print("Method: "+name+" invoked!");
}
脚本对象
使用特殊的关键字this
可以创建一个对象(根JS
类似)
foo() {
print("foo");
x=5;
bar() {
print("bar");
}
return this;
}
myfoo = foo(); // prints "foo"
print( myfoo.x ); // prints "5"
myfoo.bar(); // prints "bar"
从应用程序中调用BeanShell
创建一个BeanShell
的解释器(interpreter)
用eval
()和source()
命令可以对一个字符串求值和运行一个脚本文件
使用set
()方法可以给一个对象传入一个变量的参考
使用get
()方法可以重新得到一个变量的结果
完整代码:
package cn.com.sparknet.util;
import bsh.*;
import java.util.*;
public class BeanShell {
public static void main(String[] args) {
try {
Interpreter interpreter = new Interpreter(); //
构造一个解释器
interpreter.set("foo", 5); //
设置变量
interpreter.set("date", new Date()); //
设置一个时间对象
Date date = (Date) interpreter.get("date"); //
重新得到时间变量
interpreter.println(date.toString()); //
打印时间变量
interpreter.eval("bar = foo*10"); //
对一段脚本求值,并得到结果
System.out.println(interpreter.get("bar")); //
打印变量
interpreter.source("d:\\helloWorld.bsh"); //
导入并执行一个脚本文件
}
catch (Exception e) {
//
如果发生异常,写入日志文件
Log.error(new BeanShell(), "main", FormatDate.getCurrDate(),
e.getMessage());
}
}
}
BeanShell
语法
BeanShell
是一种最原始的java
解释器。
标准的java
语法
/*
Standard Java syntax
*/
// Use a hashtable
Hashtable hashtable = new Hashtable();
Date date = new Date();
hashtable.put( "today", date );
// Print the current clock value
print( System.currentTimeMillis() );
// Loop
for (int i=0; i<5; i++)
print(i);
// Pop up a frame with a button in it
JButton button = new JButton( "My Button" );
JFrame frame = new JFrame( "My Frame" );
frame.getContentPane().add( button, "Center" );
frame.pack();
frame.setVisible(true);
松散类型的java
语法
/*
Loosely Typed Java syntax
*/
// Use a hashtable
hashtable = new Hashtable();
date = new Date();
hashtable.put( "today", date );
// Print the current clock value
print( System.currentTimeMillis() );
// Loop
for (i=0; i<5; i++)
print(i);
// Pop up a frame with a button in it
button = new JButton( "My Button" );
frame = new JFrame( "My Frame" );
frame.getContentPane().add( button, "Center" );
frame.pack();
frame.setVisible(true);
异常处理
标准的java
异常
try {
int i = 1/0;
} catch ( ArithmeticException e ) {
print( e );
}
松散的异常处理(类似JS
)
try {
...
} catch ( e ) {
...
}
松散类型变量的作用范围
标准的java
程序的变量作用范围是在一个模块中的(在模块中声明的变量),而在松
散类型的语言中如果在一个模块中没有指定一个变量的类型,则认为是一个全局变量(只有它以后的代码可以使用该变量,系统在调用该变量的时候自动生成一个全
局变量,也就为什么在调用模块之前不能使用该变量的原因)
// Arbitrary code block
{
y = 2; // Untyped variable assigned
int x = 1; // Typed variable assigned
}
print( y ); // 2
print( x ); // Error! x is undefined.
// Same with any block statement: if, while, try/catch, etc.
if ( true ) {
y = 2; // Untyped variable assigned
int x = 1; // Typed variable assigned
}
print( y ); // 2
print( x ); // Error! x is undefined.
同样也使用于for-loop, if-else
等循环语句
for( int i=0; i<10; i++ ) { // typed for-init variable
j=42;
}
print( i ); // Error! 'i' is undefined.
print( j ); // 42
for( z=0; z<10; z++ ) { } // untyped for-init variable
print( z ); // 10
方便灵活的语法
标准的java
语法
java.awt.Button button = new java.awt.Button();
button.setLabel(“javaButton”);
松散的语法
button = new java.awt.Button();
button.label = "my button";
你也可以使用{}
来对一个对象设置属性
b = new java.awt.Button();
b{"label"} = "my button"; // Equivalent to:
b.setLabel("my button");
h = new Hashtable();
h{"foo"} = "bar"; // Equivalent to: h.put("foo",
"bar");
自动装箱和自动拆箱(box
和unbox
)
BeanShell
自动转为简单类型
i=5;
iw=new Integer(5);
print( i * iw ); // 25
导入类和包
import javax.xml.parsers.*;
import mypackage.MyClass;
超级导入法:
import *;
BeanShell
默认导入下面的包
· java.lang
· java.io
· java.util
· java.net
· java.awt
· java.awt.event
· javax.swing
· javax.swing.event
友好文档实体
BeanShell
支持特殊的文档操作类型内容
@gt > @lt <
@lteq <= @gteq >=
@or || @and &&
@bitwise_and & @bitwise_or |
@left_shift << @right_shift >>
@right_unsigned_shift >>> @and_assign &=
@or_assign |= @left_shift_assign <<=
@right_shift_assign >>= @right_unsigned_shift_assign >>>=
脚本方法
你可以定义方法象java
中的定义方法一样
int addTwoNumbers( int a, int b ) {
return a + b;
}
你可以使用内馅的BeanShell
方法使用他们
sum = addTwoNumbers( 5, 7 );
只有BeanShell
变量可以被动态定义为动态类型,方法可以有动态的参数以及返回类型
add( a, b ) {
return a + b;
}
在这个方法中,BeanShell
将动态的决定类型当这个方法被调用时并且能够准确的计算出你想要的结果
foo = add(1, 2);
print( foo ); // 3
foo = add("Oh", " baby");
print( foo ); // Oh baby
在第一个例子中BeanShell
将把参数定义为数字型,并返回数字型
在第二个例子中BeanShell
将把参数定义为字符型,并返回字符对象
变量和方法的可见范围
就像您所预期的那样,在方法内您可以参考到上下文中上面的变量和方法
a = 42;
someMethod() { ... }
foo() {
print( a );
someMethod(); // invoke someMethod()
}
// invoke foo()
foo(); // prints 42
如果一个变量只有在方法内使用请定义成局部变量,即加上类型,如果是全局变量请在方法外定义
var = "global";
foo() {
print(var);
String var = "local";
print(var);
}
foo();
print(var);
将打印出
global
local
global
方法内的var
(第四行)变量属于局部变量,不会覆盖全局变量var
(第一行)的因此改变var
(第四行)变量不会影响到全局变量var
(第一行)
范围参考:super
使用super
关键字可以在局部参考到全局变量
var = "global";
foo() {
String var = "local";
print(var);
print(super.var);
}
foo();
将输出
local
global
脚本对象
this
对象
在java
标准语言中可以使用this
返回一个类的一个实例
// MyClass.java
MyClass {
Object getObject() {
return this; // return a reference to our object
}
}
在这个例子中getObject()
方法是返回MyClass
类的一个实例
在BeanShell
中对象中的变量只是局部的变量在对象内可以使用,在对象外是不可以使用(不同于前面for-loop,if-else
中的使用);
// Define the foo() method:
foo() {
bar = 42;
print( bar );
}
// Invoke the foo() method:
foo(); // prints 42
print( bar ); // Error, bar is undefined here
可以使用this
返回对象,使用对象加上“.”
运算符参考属性(类似JS
)
foo() {
bar = 42;
return this;
}
fooObj = foo();
print( fooObj.bar ); // prints 42!
同样对象中也可以定义一些方法
foo() {
bar() {
...
}
}
例如
foo() {
int a = 42;
bar() {
print("The bar is open!");
}
bar();
return this;
}
// Construct the foo object
fooObj = foo(); // prints "the bar is open!"
// Print a variable of the foo object
print ( fooObj.a ) // 42
// Invoke a method on the foo object
fooObj.bar(); // prints "the bar is open!"
也可以把bar
()和foo
也可以代参数
foo() {
return this;
}
bar(int a) {
print("The bar is open!" + a);
}
foo().bar(1);
也可以把bar
()方法定义到对象外面
foo() {
bar(int a) {
print("The bar is open!" + a);
}
return this;
}
foo().bar(1);
BeanShell
一种松散的脚本语言,有很多中声明的方法可以使用
This super global
This
是参考当前对象
Super
是参考父亲对象
Global
是参考最上层对象
super.super.super...foo = 42; // Chain super. to reach the top
global.foo = 42;
简单例子:
文本拖动:
dragText() { f = new Frame("Drag in the box"); f.setFont( new Font("Serif", Font.BOLD, 24) ); f.setSize(300, 300); f.show(); gc = f.getGraphics(); gc.setColor(Color.cyan); mouseDragged( e ) { gc.drawString("Drag Me!", e.getX(), e.getY()); } mouseMoved( e ) { } f.addMouseMotionListener( this ); }
简单画图
import bsh.util.BshCanvas; // BshCanvas simply buffers graphics graph( int width, int height ) { canvas=new BshCanvas(); canvas.setSize( width, height ); frame=frame( canvas ); graphics=canvas.getBufferedGraphics(); // draw axis graphics.setColor( Color.red ); graphics.drawLine( 0, height/2, width, height/2 ); graphics.drawLine( width/2, 0, width/2, height ); graphics.setColor( Color.black ); plot(int x, int y) { graphics.fillOval( (x+width/2-1), (y+height/2-1), 3, 3); canvas.repaint(); } return this; } drawSin( graph ) { for (int x=-100; x<100; x++ ) { y=(int)(50*Math.sin( x/10.0 )); graph.plot( x, y ); } }
简单web
浏览器
import javax.swing.*; import javax.swing.event.*; import javax.swing.text.*; import java.awt.event.*; import java.awt.*; JFrame browser( startingUrl ) { invoke( method, args ) {} windowClosing(WindowEvent we) { we.getWindow().setVisible(false); } setPage( url ) { try { pane.setPage( url ); } catch(Exception e) { statusBar.setText("Error opening page: "+url); } } hyperlinkUpdate( HyperlinkEvent he ) { type = he.getEventType(); if (type == HyperlinkEvent.EventType.ENTERED) { pane.setCursor( Cursor.getPredefinedCursor( Cursor.HAND_CURSOR) ); statusBar.setText(he.getURL().toString()); } else if (type == HyperlinkEvent.EventType.EXITED) { pane.setCursor( Cursor.getDefaultCursor() ); statusBar.setText(" "); } else { setPage( he.getURL() ); if (urlField != null) urlField.setText(he.getURL().toString()); } } frame = new JFrame("Browser"); frame.setSize(400,300); frame.addWindowListener( this ); urlPanel = new JPanel(); urlPanel.setLayout(new BorderLayout()); urlField = new JTextField(startingUrl); urlPanel.add(new JLabel("Site: "), BorderLayout.WEST); urlPanel.add(urlField, BorderLayout.CENTER); statusBar = new JLabel(" "); pane = new JEditorPane(); pane.setEditable(false); setPage( startingUrl ); jsp = new JScrollPane(pane); frame.getContentPane().add(jsp, BorderLayout.CENTER); frame.getContentPane().add(urlPanel, BorderLayout.SOUTH); frame.getContentPane().add(statusBar, BorderLayout.NORTH); // This is the equivalent of an inner class in bsh. urlTextHandler() { actionPerformed(ActionEvent ae) { setPage( ae.getActionCommand() ); } return this; } urlField.addActionListener( urlTextHandler() ); pane.addHyperlinkListener( (HyperlinkListener)this ); return frame; } browser = browser("http://java.sun.com/"); browser.show();
发表评论
-
git版本控制工具分享
2012-07-06 02:09 0github用户: lockstion haiyupete ... -
fusioncharts学习心得
2010-11-03 17:51 7588至此声明:若需要商用,请大家支持正版! FusionChar ... -
OperaMasks中的注解工作方式
2010-10-11 22:29 18661.进入页面后如何根据@ManagedBean找到对应的后台J ... -
OperaMasks中的资源处理
2010-08-24 20:53 1047OperaMasks作为一个表现层框架,那么其属于对于资源机制 ... -
OperaMasks 的 delegate机制(Tree,Grid 二次取数)
2010-08-23 23:18 1460OperaMasks 二次取数 ... -
jxl基本操作
2009-05-13 16:40 1212jxl的一些总结 要往xls文件里面写入数据的时候需要 ... -
使用dom4j和xpath
2008-12-29 18:49 2101使用dom4j和XPath 配置开发包 dom4j-1.6 ... -
dom4j实例
2008-12-29 18:48 3812国外的dom4j已经很流行了,国内的相关资料相对较少,但普及 ... -
dom中使用xpath解析xml文件
2008-12-29 18:46 3174在使用Dom4j解析xml文档时,我们很希望有一种类似正则表达 ... -
xml dom4j操作
2008-12-29 18:41 1799在项目中,我们很多都用到了xml 文件,无论是参数配置还是与 ... -
Dom4j学习笔记
2008-12-29 18:33 2257一、生成xml文件 ... -
lucene多字段检索
2008-12-26 19:25 2362默认情况下,IndexSearcher 类的search ... -
IKAnalyzer基于lucene2.0版本API开发
2008-12-26 19:20 3391使用说明: IKAnalyzer 基于lucene2.0 ... -
JXL与Excel
2008-12-26 18:52 1325jxl 的一些总结 要往 xls 文件里面写 ...
相关推荐
1. **BeanShell简介** - BeanShell是基于Java的脚本语言,它提供了类似Perl或JavaScript的语法,但支持完整的Java对象和API。 - 在JMeter中,BeanShell组件允许用户在测试计划中嵌入Java代码,处理请求和响应数据...
1. **BeanShell简介** BeanShell允许开发者编写Java脚本,并在运行时即时执行,无需编译。这使得它成为构建动态系统的好工具。在我们的公式管理系统中,BeanShell将用于解析和执行用户定义的公式。 2. **JDOM简介*...
#### 一、BeanShell简介 BeanShell是一种轻量级的脚本语言,其语法与Java高度兼容。它不仅支持标准的Java语法,还具备自己的特性和方法,使其成为开发环境中进行快速原型设计、自动化测试以及脚本编程的理想选择。...
#### 一、BeanShell简介 BeanShell是一款轻量级的可嵌入式Java源代码解释器和工具。它不仅支持完整的Java语法,还提供了一些额外的功能,如松散的数据类型处理和内置的实用命令。通过BeanShell,开发者可以在运行时...
BeanShell简介 BeanShell 的核心功能是作为一个即时(JIT)编译器,它可以解析并执行Java语法的子集。它不仅支持基本的Java语法,还提供了一些方便的脚本特性,如变量声明、函数定义和控制结构。BeanShell 是基于...
#### 三、BeanShell简介 BeanShell是一款小巧、免费且易于嵌入的Java代码解释器,它具有面向对象脚本语言的特点,同时支持标准的Java语句和表达式。BeanShell可以用于测试或调试Java代码,也可以作为应用程序的脚本...
为了帮助读者更好地理解和掌握智能Web算法,《智能Web算法》还提供了丰富的附录资料,包括BeanShell简介、网页爬虫技术、数学复习、自然语言处理基础、神经网络等内容。这些附录不仅能够帮助读者打下坚实的理论基础...
bsh(BeanShell)是一个轻量级的、动态的Java语言解释器,它允许在运行时执行Java语法和一些扩展语法的脚本。作为Java开发工具,bsh提供了一个强大的环境,开发者可以快速测试代码片段、原型设计、自动化任务,甚至...
**软件开发测试工具JMeter简介** JMeter是Apache组织提供的一款强大的、开源的性能测试工具,主要用于对Web应用进行负载和压力测试。它能够模拟大量并发用户,测试服务器、网络或对象的性能,并分析结果数据,帮助...
* 实现断言:使用正则表达式、Xpath、Json、Beanshell等技术实现断言。 * 实现接口之间响应值传递:使用Jmeter实现接口之间响应值传递。 * 实现自由拓展:使用OT框架实现自由拓展,满足不同测试场景的需求。 自动化...
**一、Bean Shell 简介** 1. **什么是 Bean Shell** Bean Shell 是一个遵循 Java 语法的轻量级脚本引擎,它允许用户编写类似于 Java 的代码进行动态执行。Bean Shell 支持动态类型,这意味着你不需要提前声明变量...
BeanShell是一个小型的Java源代码解释器,它可以让我们在Jmeter中编写Java代码来处理数据。 此外,我们还可以使用CSV Data Set Config组件来从CSV文件中读取数据,并将读取的数据作为参数传递给采样器。例如,我们...
jmeter简介??03. jmeter安装01??04. jmeter安装02?05. 目录结构介绍??06. 主界面菜单和工具栏介绍? ?07. jmeter第一个实战08. jmeter常用组件初步? ?09. 线程组?10. 采样器之HTTP请求0?11. 采样器之HTTP请求02? ?12...
7. **脚本支持**:支持BeanShell和其他BSF兼容语言的脚本取样器,允许用户编写脚本来模拟复杂的行为或自动化测试逻辑。 8. **动态输入与数据操作**:JMeter可以处理动态输入,例如从外部文件、数据库或变量中获取...
** mavscript 开源项目简介** Mavscript 是一个独特的开源工具,它允许用户在普通的文本文档中执行计算任务。这个创新的系统结合了文本编辑的便利性和计算环境的功能,为用户提供了无缝的编程和计算体验。Mavscript...
一、JMeter简介 JMeter是一款用于负载和性能测试的Java应用程序,它最初设计用来测试Web应用,但后来扩展到其他协议,如FTP、SMTP、SOAP、REST等。JMeter允许用户模拟多个并发用户对服务器进行请求,以此来评估系统...
### JMeter简介 JMeter是一款开源的性能测试工具,主要用于负载测试和功能测试。它能够模拟服务器或网络应用的高负载情况,并测量其性能。JMeter主要用于测试Web应用程序或服务器,可以用于测试静态和动态资源,如...
- 取样器(Sampler)负责发送请求并记录响应,如HTTP Request、FTP Request、TCP Request、JDBC Request等,Java Request和Beanshell Request提供自定义功能。 - 逻辑控制器调整测试逻辑,如If Controller、Switch...