Java调用JS脚本里的方法

JavaScript020

Java调用JS脚本里的方法,第1张

   本例子使用了JDK 以上的javax script包 通过Invocable接口实现JAVA调用JS脚本里的方法 本例中调用分为内部执行脚本和外部执行脚本 外部执行脚本分为不带参数调用和带参数调用 主要采用invokeFunction方法调用         ObjectinvokeFunction(String name Object… args)        用于调用脚本中定义的顶层程序和函数         ObjectinvokeMethod(Object thiz String name Object… args)        对以前的脚本执行中已经编译的脚本对象(以 ScriptEngine 的状态保持)调用某一方法         package de javase        import javax script Invocable        import javax script ScriptEngineManager        import javax script ScriptEngine        import java io File        import java io Reader        import java io FileReader        public class AjavaInvokingFunction {        public static void main(String[] args) {        // 获得一个JavaScript脚本引擎 也可以是ECMAScript脚本引擎        ScriptEngineManager manager = new ScriptEngineManager()         ScriptEngine engine = manager getEngineByName( JavaScript )         String titlescript = function sayTitle() {         +    println( 源码实例 使用javax script调用JS脚本里的方法 )         +    println( )         + }         try {   

    // 调用内部脚本执行         engine eval(titlescript)         // 转换为Invocable        Invocable invocableEngine = (Invocable) engine        // 不带参数调用sayTitle方法        invocableEngine invokeFunction( sayTitle )         // 调用外部脚本执行         // 创建JS文件的File对象 并读入流        File functionscript = new File( ajava js )         Reader reader = new FileReader(functionscript)         // 开始执行ajava js里的程序        engine eval(reader)         // 不带参数调用sayHello方法        invocableEngine invokeFunction( sayHello )         // 带参数调用sayHello方法        invocableEngine invokeFunction( sayHello mark )         } catch (Exception e) {        e printStackTrace()         }        }        }        ajava js文件         function sayHello(){        sayHello(null)         }        function sayHello(name){        if(name==null){        println( 欢迎你!请注册Ajava会员 )         }else{        println(name+ 独立JAVA社区欢迎你 )         }        }        运行结果(控制台)         源码实例 使用javax script调用JS脚本里的方法 lishixinzhi/Article/program/Java/hx/201311/26436

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

public class ExecJs {

/**

* 记录日志类

*/

private Logger log = Logger.getLogger(ExecJs.class)

/**

* 后置处理,执行js脚本

* @param js

* @throws Exception

*/

public void execJs(String js, Map<String,Object>map) throws Exception {

if (log.isDebugEnabled()) {

log.debug("execJs js : " + js)

Iterator<Entry<String, Object>>it = map.entrySet().iterator()

while (it.hasNext()) {

Entry<String, Object>entry = (Entry<String, Object>) it.next()

log.info("EXECJS MAP : " + entry.getKey() + "---" + entry.getValue())

}// end while

}// end if

if ("".equals(js) || js == null) {

log.info("EXECJS ERROR : JAVASCRIPT CONTENT IS NULL")

} else if(map == null || map.size()<=0){

log.info("EXECJS ERROR : MAP CONTENT IS NULL")

} else {

// 获取脚本引擎

ScriptEngineManager mgr = new ScriptEngineManager()

ScriptEngine engine = mgr.getEngineByName("javascript")

// 绑定数据

ScriptContext newContext = new SimpleScriptContext()

Bindings bind = newContext.getBindings(ScriptContext.ENGINE_SCOPE)

bind.putAll(map)

try {

engine.setBindings(bind, ScriptContext.ENGINE_SCOPE)

engine.eval(js)

} catch (Exception e) {

log.info("EXECJS EXCEPTION : EXECUTE JAVASCRIPT EXCEPTION", e)

throw (e)

}// end try

}// end if

}

}

js指的是网页Java Script客户端脚本文件。JS和HTML都是网页的格式文件,HTML是一种使用标准确无误语言编写的网页,JS是使用高级语言,广义的网页语言也有AJAX、JS、XML、ASP、PHP等JS只是其中的一种.HTML转JS文件的软件即将普通语言做成的网页,在不改变页面内容等情况下,使用JS语言对内部进行重新组织,重新显示出同样的效果.JS对网页制作要求高于HTML语言.扩展名为js的文件,是用javascript脚本语言编写的。js文件常见的有两种用法。1.在网页里使用:一般不能直接打开,只有配合网页使用,如果是想破解某网站的在线电影等,仅从js文件入手可能性不大,建议使用专门的抓取工具,如wpe,抓取网络封包,再对封包分析,js可以使用记事本编辑。2.在单机使用,一般可以用来做为一个可执行程序直接双击就可以运行,当然前提是计算机没有安装网页设计软件。