一、概念

Java脚本引擎是jdk 6.0之后的新功能。

使得Java应用程序可以通过一套固定的接口与各种脚本引擎交互,从而达到在Java平台上调用各种脚本语言的目的。

Java脚本API是连接Java平台和脚本语言的桥梁。

可以把一些复杂的业务逻辑交给脚本语言处理,从而大大提高了开发效率。

【代码示例】

/***
* 测试脚本引擎 ,就是Java和脚本语言的中介
*/
package cn.sxt.jvm; import java.io.FileReader; import java.net.URL;
import java.util.List; import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager; public class Test_0419_JavaScript {
public static void main(String[] args) throws Exception {
//获取脚本引擎对象
ScriptEngineManager sem=new ScriptEngineManager();
ScriptEngine engine=sem.getEngineByName("javascript");//或者传个缩写 "js" // 定义变量,存储到引擎的上下文中。Java和JavaScript都可以读取到
engine.put("msg", "Are you OK!");
engine.eval("msg='小米手机';");//一段js代码
System.out.println(engine.get("msg"));//用Java平台去输出,结果是"小米手机",说明msg变量修改成功了,证明
//它可以被Java和JavaScript同时操作 //一段JavaScript脚本语言代码
String str ="var user={name:'夏洛',age:18,schools:['北京大学','清华大学']};";
str +="print(user.name);"; //写出println(user.name); 会报错即多个ln会报错,不知道为啥?
//用引擎执行脚本语言代码
engine.eval(str);//eval() 获取返回值 //定义js函数
engine.eval("function add(a,b) { var sum=a+b; return sum;}");
//取得调用接口
Invocable jsInvoke =(Invocable) engine; //Invocable可调用的
//执行脚本中定义的add方法 ,并传入参数
Object result =jsInvoke.invokeFunction("add", new Object[]{13,20});//激活函数
System.out.println(result); //导入其它jar包,使用其它jar包中的Java类
String jsCode=" var list=java.util.Arrays.asList([\"清华\",\"北大\"]);";
engine.eval(jsCode);
List<String> list2=(List<String>) engine.get("list");
for (String temp : list2) {
System.out.print(temp+" " );
} //执行一个外部的一个js文件 getClassLoader获得类加载器
URL url=Test_0419_JavaScript.class.getClassLoader().getResource("add.js");
//【注意】"add.js"的路径默认在项目的bin文件夹下(与src源码的.clss文件在一个文件夹下),而且要求项目名称是非中文。
//js文件的默认字符是“UTF-8”,如果编译器的默认字符集是“GBK”,要注意乱码的问题!!
FileReader fReader= new FileReader(url.getPath());
engine.eval(fReader);
fReader.close(); } }

[19/04/19-星期五] Java的动态性_脚本(Script,脚本)引擎执行JavaScript代码的更多相关文章

  1. 尚学堂 215 在java中执行JavaScript代码

    package com.bjsxt.test; import java.io.FileReader; import java.net.URL; import java.util.List; impor ...

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

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

  3. Java执行JavaScript代码

    Java执行JavaScript代码 这篇文章主要为大家详细介绍了Java执行JavaScript代码的具体操作方法,感兴趣的小伙伴们可以参考一下 我们要在Java中执行JavaScriptMetho ...

  4. [19/04/17-星期三] Java的动态性_反射(Reflection)机制

    一.前言 动态语言:程序运行时,可以改变程序结构或变量类型.典型的代表:Python,ruby,JavaScript 如JavaScript代码: function test(){ var s=&qu ...

  5. [19/04/18-星期四] Java的动态性_动态编译(DynamicCompiler,Dynamic:动态的,Compiler:编译程序)

    一.概念 应用场景:如在线评测系统,客户端编写代码,上传到服务器端编译运行:服务器动态加载某些类文件进行编译 /*** * */ package cn.sxt.jvm; import java.io. ...

  6. [19/04/20-星期六] Java的动态性_字节码操作(Javassist类库(jar包),assist:帮助、援助)

    一.概念 [基本] /** * */ package cn.sxt.jvm; import javassist.ClassPool; import javassist.CtClass; import ...

  7. [19/04/02-星期二] IO技术_字符流分类总结(含字符转换流InputStreamReader/ OutputStreamWriter,实现字节转字符)

    一.概念 ------->1.BufferedReader/BufferedWriter [参考19.03.31文章] *Reader/Writer-------->2.InputStre ...

  8. [19/04/01-星期一] IO技术_字节流分类总结(含字节数组(Array)流、字节数据(Data)流、字节对象(Object)流)

    一.字节流分类概括 -->1.ByteArrayInputStream /ByteArrayOutputStream(数组字节输入输出)        InputStream/OutputStr ...

  9. [19/04/03-星期三] IO技术_其它流(RandomAccessFile 随机访问流,SequenceInputStream 合并流)

    一.RandomAccessFile 随机访问流 [版本1] /* *RandomAccessFile 所谓随机读取就是 指定位置开始或指定位置结束 的读取写入文件 * 实现文件的拆分与合并 模拟下载 ...

随机推荐

  1. async和await理解代码

    <1>:Async和Await的理解1 using System; using System.Collections.Generic; using System.Linq; using S ...

  2. [javaSE] 多线程(守护线程)

    我们一般使用多线程,都是while的死循环,想要结束线程,只需退出死循环即可 当线程中调用了sleep()方法或者wait()方法,当前的线程就会进入冻结状态,这个线程就结束不了 调用Thread对象 ...

  3. 工作经验:Java 系统记录调用日志,并且记录错误堆栈

    前言:现在有一个系统,主要是为了给其他系统提供数据查询接口的,这个系统上线不会轻易更新,更不会跟随业务系统的更新而更新(这也是有一个数据查询接口系统的原因,解耦).这时,这个系统就需要有一定的方便的线 ...

  4. EF框架CodeFirst the model backing the 'PModelEntities' context has changed since the database was created. Consider using Code First Migrations to update the database

    1.采用code first 做项目时,数据库已经生成,后期修改数据库表结构.再次运行时出现一下问题: Entity Framework : The model backing the 'Produc ...

  5. UNIX 网络编程笔记-CH3:套接字编程简介

    IPv4套接字地址结构 struct in_addr { in_addr_t s_addr; }; struct sockaddr_in { uint8_t sin_len; /* length of ...

  6. 样式 bootstrap purecss Amaze UI 推荐

    Bootstrap 简洁.直观.强悍的前端开发框架,让web开发更迅速.简单. Bootstrap,来自 Twitter,是目前很受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAV ...

  7. 一键清理 Nexus 中无用的 Docker 镜像

    现许多团队使用 Nexus 来管理 Docker 镜像,产品不断迭代,镜像仓库占用的磁盘空间也越来越大.由于 Nexus 的控制台并未提供批量操作镜像功能,清理镜像十分不便.本文分享一个清理 Nexu ...

  8. Python爬虫教程-06-爬虫实现百度翻译(requests)

    使用python爬虫实现百度翻译(requests) python爬虫 上一篇介绍了怎么使用浏览器的[开发者工具]获取请求的[地址.状态.参数]以及使用python爬虫实现百度翻译功能[urllib] ...

  9. 同步(Synchronous)和异步(Asynchronous)的概念

    web项目中的同步与异步 在我们平时的web项目开发中会经常听到ajax请求这样一个称呼,在web项目中可以通过js或者jquery发送同步请求又或者异步请求,同步请求呢往往代表着你必须等待这次请求结 ...

  10. C# WinForm窗体及其控件自适应各种屏幕分辨率

    C# WinForm窗体及其控件自适应各种屏幕分辨率 一.说明  我们自己编写程序的界面,会遇到各种屏幕分辨率,只有自适应才能显的美观.实际上,做到这点也很简单,就是首先记录窗体和它上面控件的初始位置 ...