package com.bjsxt.test;

import java.io.FileReader;
import java.net.URL;
import java.util.List; import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager; /**
* 测试脚本引擎执行javascript代码
* @author 尚学堂高淇 www.sxt.cn
*
*/
public class Demo01 {
public static void main(String[] args) throws Exception {
//获得脚本引擎对象
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByName("javascript"); //定义变量,存储到引擎上下文中
engine.put("msg", "gaoqi is a good man!");
String str = "var user = {name:'gaoqi',age:18,schools:['清华大学','北京尚学堂']};";
str += "println(user.name);"; //执行脚本
engine.eval(str);//输出结果gaoqi
/*
* 修改msg的值
* */
engine.eval("msg = 'sxt is a good school';");
/*
* 打印msg的孩子
* */
System.out.println(engine.get("msg"));//输出sxt is a good school
System.out.println("###########################"); //定义函数
engine.eval("function add(a,b){var sum = a + b; return sum;}");
//取得调用接口
Invocable jsInvoke = (Invocable) engine;
//执行脚本中定义的方法
Object result1 = jsInvoke.invokeFunction("add", new Object[]{13,20});
System.out.println(result1);//输出结果是33.0 //导入其他java包,使用其他包中的java类.若需要深入了解细节,可以详细学习Rhino的语法
/**
*
* 使用java中的java类*/
String jsCode = "importPackage(java.util); var list=Arrays.asList([\"北京尚学堂\",\"清华大学\",\"北京大学\"]);";
engine.eval(jsCode); List<String> list2 = (List<String>)engine.get("list");
for (String temp : list2) {
System.out.println(temp);
} //执行一个js文件(我们将a.js至于项目的src下即可)
URL url = Demo01.class.getClassLoader().getResource("a.js");
System.out.println(url.getPath());
FileReader fr = new FileReader(url.getPath());
engine.eval(fr);
fr.close(); //由于只是测试,就不那么规范了。大家实际用时要使用try catch finally! }
}

程序的运行结果是:

gaoqi
sxt is a good school
###########################
33.0
北京尚学堂
清华大学
北京大学

尚学堂 215 在java中执行JavaScript代码的更多相关文章

  1. JAVA中执行JavaScript代码并获取返回值

    JAVA中执行JavaScript代码并获取返回值 场景描述 实现思路 技术要点 代码实现 测试方法 运行结果 改进空间 场景描述 今天在CSDN上偶然看到一个帖子对于一段字符串 “var p=‘xx ...

  2. python中执行javascript代码

    python中执行javascript代码: 1.安装相应的库,我使用的是PyV8 2.import PyV8 ctxt = PyV8.JSContext()     ctxt.enter()     ...

  3. java中执行js代码

    要在java中执行js代码,首先明白,java不支持浏览器本身的方法.支持自定义的js方法,否则会报错 先新建一个js文件:jsss.js 内容如下: function aa(a,b){ return ...

  4. UWP 在 WebView 中执行 JavaScript 代码(用于模拟用户输入等) - walterlv

    原文:UWP 在 WebView 中执行 JavaScript 代码(用于模拟用户输入等) - walterlv UWP 在 WebView 中执行 JavaScript 代码(用于模拟用户输入等) ...

  5. Java中运行javascript代码

    Java中运行javascript代码 1.Java 代码 2.JS代码 2.1demoWithParams.js 2.2demoWithListParams.js 原文作者:russle 原文地址: ...

  6. java中执行javascript案例

    Nashorn js engine官方文档 https://docs.oracle.com/javase/7/docs/technotes/guides/scripting/programmer_gu ...

  7. 在Java中执行js代码

    在某些特定场景下,我们需要用Java来执行Js代码(如模拟登录时,密码被JS加密了的情况),操作如下: ScriptEngineManager mgr = new ScriptEngineManage ...

  8. UWP 在 WebView 中执行 JavaScript 代码(用于模拟用户输入等)

    UWP 中使用 WebView 时可以在网页中额外执行一些代码.于是你几乎可以在网页上做任何事情,那些你可以在浏览器控制台中做的事情. 本文将介绍做法. 本文内容 准备环境 执行 JavaScript ...

  9. Selenium2(WebDriver)中执行JavaScript代码 (转)

    在用selenium编写web页面的自动化测试代码时,可能需要执行一些JavaScript代码,selenium本身就支持执行js,我们在代码中可以使用executeScript.executeAsy ...

随机推荐

  1. Unity 离线建造系统

    很多游戏,特别是养成类手游,都会有自己独特的建造系统,一个建造装置的状态循环或者说生命周期一般是这样的: 1.准备建造,设置各项资源的投入等 2.等待一段倒计时,正在建造中 3.建造结束,选择是否收取 ...

  2. 7z命令行简单使用

    7z命令行简单使用 网上有很多博客都有记录7z的命令行使用方式,但看起来乱起八糟的,不知所云. 急于使用者可以直接看实例 注:我仅仅记录我认为常用的命令,毕竟没有那么多的精力去学习不常用的东西. 简介 ...

  3. 循序渐进VUE+Element 前端应用开发(6)--- 常规Element 界面组件的使用

    在我们开发BS页面的时候,往往需要了解常规界面组件的使用,小到最普通的单文本输入框.多文本框.下拉列表,以及按钮.图片展示.弹出对话框.表单处理.条码二维码等等,本篇随笔基于普通表格业务的展示录入的场 ...

  4. R 语言

    ps 帮人学习R语言代码: 定义变量 alldata<-c(32.56,1.4072,28.94,0.231,11.005,2.48713,40.33,1.5334,34.79,0.288,18 ...

  5. AUTOSAR-标准文档索引

    https://mp.weixin.qq.com/s/6yl5dBP1mSFGVsfE7YRm6w   索引的两种方法: 关键字检索:用Document Search搜索下载,https://www. ...

  6. java方法句柄-----1.方法句柄类型、调用

    目录 方法句柄 1.方法句柄的类型 1.1MethodType类的对象实例的创建 1.1.1 通过指定参数和返回值的类型来创建MethodType.[显式地指定返回值和参数的类型] 1.1.2 通过静 ...

  7. Java实现 LeetCode 778 水位上升的泳池中游泳(二分+DFS)

    778. 水位上升的泳池中游泳 在一个 N x N 的坐标方格 grid 中,每一个方格的值 grid[i][j] 表示在位置 (i,j) 的平台高度. 现在开始下雨了.当时间为 t 时,此时雨水导致 ...

  8. Java 第十一届 蓝桥杯 省模拟赛 第十层的二叉树

    一棵10层的二叉树,最多包含多少个结点? 注意当一棵二叉树只有一个结点时为一层. 答案提交 这是一道结果填空的题,你只需要算出结果后提交即可.本题的结果为一个整数,在提交答案时只填写这个整数,填写多余 ...

  9. SQL Server实现 LeetCode 178 分数排名

    178. 分数排名 SQL架构 编写一个 SQL 查询来实现分数排名.如果两个分数相同,则两个分数排名(Rank)相同.请注意,平分后的下一个名次应该是下一个连续的整数值.换句话说,名次之间不应该有& ...

  10. Android中WebView如何加载JavaScript脚本

    主Activity和XML布局,末尾附上效果图 package com.example.myapplication; import androidx.appcompat.app.AppCompatAc ...