一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 2307|回复: 1
收起左侧

JS解释器rhino

[复制链接]
发表于 2017-2-1 11:43 | 显示全部楼层 |阅读模式
在Ubuntu下安装相当容易只要
0 c* b; k$ s, ]" ?sudo apt install rhino 就可以了
7 T) O* s& ~; e0 H1 ^1 r- ]用vim test.js" r$ g/ G7 C; w/ n7 s4 @
print("Hello World");, u2 k4 V% h5 X' p2 u0 a6 e/ j) l! `+ [
然后用rhino test.js 就OK了
* @/ L1 _9 o; f4 C
5 H2 V4 z3 T. {2 @4 t- U3 W. U4 F. Z/ m) x4 T" g% H/ w/ y

' p; J" F+ c" \) k0 }
 楼主| 发表于 2017-2-1 11:44 | 显示全部楼层
在网上找来的资料6 b* }0 A6 F- d0 u

. E* m5 x/ U% W5 ~( @3 ]& x+ k/ ~+ C% O$ [
Rhino -- 基于java的javascript实现
! U+ |# E, f, ^3 V2012-07-16 17:42 by cczw, 12081 阅读, 1 评论, 收藏, 编辑
( [  ?: W  E7 r" P这几天突然对js引擎非常感兴趣,大概了解了一下,记下来备忘。javascript引擎大家比较熟悉的应该是当前比较火的Chrome V8引擎。以快速闻名。v8基于c++开发。这里就不多阐述了。另外一个是 基于java的Rhino引擎,这个想来大家不是很了解。下面来简单介绍一下。
( }6 p7 h+ Z- _0 J" x0 U- w  `) `3 Z+ u
Rhino简介
9 E. q& m, u& a! I3 k# i+ @8 A(简介这部分是抄的)
9 c" y0 t/ M5 e; k- @
* Y! U1 ~! Y3 I/ T6 `6 K' {" o5 PRhino 是一种使用 Java 语言编写的 JavaScript 的开源实现,原先由Mozilla开发,现在被集成进入JDK 6.0。与其他很多语言一样,Rhino 是一种动态类型的、基于对象的脚本语言,它可以简单地访问各种 Java 类库。Rhino 从 JavaScript 中借用了很多语法,让程序员可以快速编写功能强大的程序。最为明显的区别是,Rhino 不再使用语句结束符( ; ),放宽了变量声明规则,并且极大地简化了修改和检索对象属性的语法(没有求助于调用存取方法)。
7 l6 |- I% s% ]4 d; x6 [) U4 E1 u4 i# ~7 I9 q8 w( j+ |
由于 Rhino 是 JavaScript 的一种基于 Java 的实现,所以对于 Java 开发人员来说,它应该特别易于使用。JavaScript 的(以及 Rhino 的)语法非常类似于 Java 编程语言。这两种语言都采用了与 Java 编程语言相似的循环和条件结构,并且遵循类似的语法模式来表示这些结构。  s  V% G7 r% x0 q) u/ t7 Y* t4 b
. f, V" M1 v' t" j* j3 p
虽然 Rhino 与本系列文章中介绍的其他编程语言具有很多共同点,但对于 Java 平台上的编程而言,它也有独特之处(可能有时有些不同的地方)。Rhino 是一种 基于原型的(prototype-based)语言,而不是一种 基于类的(class-based)语言。在 Rhino 中,您可以构建对象,而不是类。除了类的对象实例之外,这样做还可以让您避免构建和操作类的开发、部署和执行成本。正如您将在文中发现的那样,诸如 Rhino 这类基于原型的语言在开发和运行基于 GUI 的应用程序时尤其有效。* y, j5 ]3 x. q' v& i9 q

/ W* C4 u7 R0 Y7 X! e, K如何使用Rhino
) p' [& X. j, G你可以去Rhino的主页下载最新的源代码和文档,解压开之后有一个js.jar 这就是Rhino的库文件。Rhino应用方式我分为console,js调java,java调js三种。下面来一一阐述。# F" Q9 `2 M: F% N3 y
1 @& Q- \7 a2 c% \
一 console  shell命令
' o, `; n; T- V& f1 u: j4 O相信很多技术猿们习惯使用酷酷的console控制台来敲打shell命令。可这些一般都是服务端语言。现在你也可以在控制台中敲到js代码了。用法很简单。首先要将js.jar文件放入windows的java\jdk1.6.0\jre\lib\ext目录,mac的 /System/Library/Java/Extensions/目录下。- c! O+ S3 [* t- B% w. I
$ F7 N7 K" {/ @1 q; @2 @! t" K5 }
然后你就可以在命令行中敲打
' {5 t' m. h; R1 L7 V+ `
# |& a3 Y) L& g6 o4 Y2 S/ `0 m" gjava  org.mozilla.javascript.tools.shell.Main0 }/ s( r" A! J5 e, b( f" \% h0 g5 P# W
然后你就会看到像这样的输出:
3 |! Z; Y' A. Q) ?: Z6 a* G' r5 }5 g: G( \/ `; J
Rhino 1.7 release 4 2012 06 18
- y  `; I' n: }7 d; qjs> 4 Q7 n5 F6 b  |: |
这样你就可以调试js代码了,这里你既可以加载js文件来运行,也可以直接运行js语法语句,并且Rhino借用了java中很多的基础语法,使我们写起代码来更easy。下面我们来试试看。) B0 s8 q. X/ f! {* A3 k1 n

2 O; E5 k- a1 N7 X/ E7 k8 ~! U4 x直接写代码,效果如下:- s+ G% R7 @. i1 r) b6 b$ m5 p

. ~, Q' v( f- j; g# x1 e( `% rjs> var a={'name':'zhangwen','age':30}  y$ h& \. C) ], Y  n2 n! ^
js> a.name
; j: X% B6 m1 J# r5 @zhangwen
. P' L8 D! ]' Y$ n' c2 s* s0 ejs> a.age
) }: D; T' Y/ I6 e3 s) C300 p# h. N/ l9 m. f3 }$ ]( g' k
新建一个test.js文件,内容如下:% r2 `: k! ]# e7 R; P  c/ j

: _% J2 g9 O; ^- o3 T2 gfunction test(str){
' Q/ X' P0 J/ r4 G2 I% _( w& P4 K   var name=str;
, ~- P8 Q5 Y0 P! r3 A3 |5 Q   print(name);8 F) ~1 j# s. W# U1 a& g: Y
}
( ?# N; F3 [) d, m9 i
* F( \  |( r/ a- J, x; ?1 d* V
3 \$ }) W' n5 o9 \6 @然后在console中输入:( `0 a! ?. T2 N' R! W

7 w6 ~, H; o& D& H& cjs> load('test.js');
$ c- e( s* t+ D2 ?% V  Mjs> test('awen');  4 b7 z! a' g* P6 B" D2 j
awen3 {! L, P) h6 T6 T
js> 0 V4 ?7 Y4 I  m) X5 R9 N
体验了这两种方式后感觉是不是很酷?
( ^4 I3 J4 e; I9 f0 K$ J& g$ k  B8 J2 N& U4 _2 k

. M) m+ s& V' h9 p  C" x
3 s9 r  j- [) N: P( L二 Rhino中调用JAVA% q& m" v5 @% M0 ~6 _) T  \

) C) t: J- u: a5 A2 p, k不说废话,直接上代码:
+ I8 a" k. D; p+ S, [" W% a! J
7 {' z5 r+ l% ?! w' i6 ^4 \js> var date=new java.util.Date();  e8 F" Z# p' j3 B
js> date
  ^1 X3 g% t1 Q- p" P# P7 {) cMon Jul 16 17:04:07 CST 2012
2 d3 T4 [" |' W1 r/ Tjs> java.lang.Math.PI8 G0 D' j" D7 y" e) Z
3.141592653589793( p! Z% k' ]: y3 M
当然,你也先导入包,importPackage(java.util)(相当于java中的import package)那么代码中就不用写类名的包路径了,var date=new Date();不知道细心地同学发现没有。在javascript中也有原生的Date,那这样我们就应该避免这样的写法,防止代码中混乱。* O# n1 C% y. _2 U2 Y$ b
" f& z! P! I5 n! W7 O" _
Rhino实现Java接口:! i% U! S; ~6 p$ ^' n4 l5 k7 D

% }, D" `' A' C, P  f# E1 q: E  \复制代码1 z( Q8 ^: B; ~  L, K
js> var obj={run:function(){print("\nrunning...");}}" r& i& ]+ i  y2 e* ~! u
js> var r=new java.lang.Runnable(obj);; @7 b- T0 ]; e" R  p$ u8 A* z" U
js> var t=new java.lang.Thread(r);7 G' }( \: R+ |" Z2 `9 }
js> t.start();) v3 v- S6 E, M2 k8 z7 E
js> & m9 c) s; g7 D& r& P* C
running...
% e  s1 R& R$ H复制代码
( H& A- [. h# D- [* H8 q& K- YRhino创建Java 数组
1 n9 K, w7 P* t5 V$ V$ u% U1 U" r; V3 O6 ]
复制代码4 w8 T7 V! G+ \% {- e  P5 T
js> var array=java.lang.reflect.Array.newInstance(java.lang.String, 2);  
/ y, O5 j2 w# ^7 ]1 E8 O" pjs> array[0]="恩";     5 J8 F6 I5 v8 z9 f5 P" V- D: `! _' _

& R0 I* b4 T7 N" Wjs> array[1]="哦";
6 g: k  W" \$ X  ^) o$ |# ?0 n7 ^6 B8 b3 u: I5 }
js> java.util.Arrays.toString(array);3 E, h; a* b4 M. U7 c
[恩, 哦]
# e4 l2 Z" U! ?0 s. X+ J7 E复制代码6 M+ @* p9 ^" H* i2 a
三 Java对象操纵JavaScript
( ^, r+ j6 o! D
% \% }6 p; p) _  `" K# Z( d, l* \复制代码
" S& B# T3 `7 Gimport org.mozilla.javascript.Context;
5 T; F8 Q' i, ^" t7 b6 Bimport org.mozilla.javascript.Scriptable;: w% ]1 L+ U% w/ w0 J; W

( z; ]# U3 f0 m& A) h! k6 kpublic static void main(String[] args) {
3 T4 G. Z- Q& X3 y9 {( b   Context ctx=Context.enter();
3 w' Z* ]4 S9 ^0 I1 U   Scriptable scope=ctx.initStandardObjects();
/ w" K- M+ l' p0 E8 O$ p& w   / p4 |! P4 Q9 f+ @, U
   String jsStr="100*20/10";
6 n2 m" S8 A) h( V   Object result=ctx.evaluateString(scope, jsStr, null, 0,null); 5 _: q' g; H5 Y2 Y1 V) Y0 ^
   System.out.println("result="+result);: h, A' K  ~4 j; J+ \
}

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-3-29 19:13 , Processed in 0.041676 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表