Java教程 第43页

Java 调用Javascript函数-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 调用Javascript函数

Java脚本教程 – Java调用Javascript函数 以下代码显示了如何从Java调用Javascript函数。 首先,它定义了Javascript文件中的四个函数并保存它到c:/Java_Dev/calculator.js。 var calculator = new Object(); calculator.add = function (n1, n2) n1 + n2; calculator.subtract = function (n1, n2) n1 - n2; calculator.multiply = function (n1, n2) n1 * n2; calculator.divide = function (n1, n2) n1 / n2; 然后,使用eval()函数加载脚本并获取表示函数的Object。 String scriptPath = "c:/Java_Dev/calculator.js"; engine.eval("load("" + scriptPath + "")"); Object calculator = engine.get("calculator"); 最后,通过名称获取函数并传递参数。 Object addResult = inv.invokeMethod(calculator, "add", x, y); Object subResult = inv.invokeMethod(calculator, "subtract", x, y); Object mulResult = inv.invokeMethod(calculator, "multiply", x, y); Object divResult = inv.invokeMethod(calculator, "divide", x, y); 例子 import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class Main { public static void main(String[] args) throws Exception { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("JavaScript"); if (!(engine instanceof Invocable)) { System.out.println("Invoking methods...

Java 脚本实现接口

Java脚本教程 – Java脚本实现接口 在脚本中实现Java接口 Java Scripting API允许我们以脚本语言实现Java接口。 例子 假设我们想在Javascript中实现下面的Java接口。 public interface Calculator { double add (double n1, double n2); } cal.js文件的内容,保存在c:/Java_dev/cal.js下 function add(n1, n2) { n1 + n2; } 从Java代码调用JavaScript中实现的Java接口。 import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class Main { public static void main(String[] args) throws Exception { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("JavaScript"); if (!(engine instanceof Invocable)) { System.out.println("Interface implementation in script" + "is not supported."); return; } Invocable inv = (Invocable) engine; String scriptPath = "c:/Java_Dev/cal.js"; engine.eval("load("" + scriptPath + "")"); Calculator calc = inv.getInterface(Calculator.class); if (calc == null) { System.err.println("Calculator interface " + "implementation not found."); return; } double x = 2.0; double y = 1.0; double addResult = calc.add(x, y); System.out.println(addResult);...

Java 编译脚本-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 编译脚本

Java脚本教程 – Java编译脚本 脚本引擎允许以Java类的形式编译脚本,然后重复执行它。 以下代码检查脚本引擎是否实现了可编译接口: import javax.script.Compilable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class Main { public static void main(String[] args) throws Exception { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("JavaScript"); if (engine instanceof Compilable) { System.out.println("Script compilation is supported."); } else { System.out.println("Script compilation is not supported."); } } } 上面的代码生成以下结果。 例子 可编译接口包含两个方法: CompiledScript compile(String script) throws ScriptException CompiledScript compile(Reader script) throws ScriptException 要执行编译脚本,请从CompiledScript类调用以下eval()方法之一。 Object eval() throws ScriptException Object eval(Bindings bindings) throws ScriptException Object eval(ScriptContext context) throws ScriptException 以下代码显示了如何编译脚本并执行它。它使用不同的参数执行相同的编译脚本两次。 import javax.script.Bindings; import javax.script.Compilable; import javax.script.CompiledScript; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class Main { public static void main(String[] args) throws Exception { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("JavaScript"); if (!(engine instanceof Compilable)) { System.out.println("Script compilation not...

Java 脚本语言

Java脚本教程 – Java脚本语言 使用包全局对象 Nashorn将所有Java包都定义为名为 Packages 的全局变量的属性。 例如, java.lang 和 javax.swing 包可以称为 Packages.java.lang 和 Packages.javax.swing 。 以下代码在Nashorn中使用 java.util.List 和javax.swing.JFrame : // Create a List var list1 = new Packages.java.util.ArrayList(); // Create a JFrame var frame1 = new Packages.javax.swing.JFrame("Test"); Nashorn将 java,javax,org,com,edu 和 net 声明为全局变量,分别是 Packages.java Packages.javax Packages.org Packages.com Packages.edu和 Packages.net 的别名。 以下代码使用 Packages.java 和 Packages.javax 的 java 和 javax 别名: // Create a List var list = new java.util.ArrayList(); // Create a JFrame var frame = new javax.swing.JFrame("Test"); 使用Java全局对象 Nashorn定义了一个称为Java的新的全局对象,它包含许多有用的函数来使用Java包和类。 Java对象的 type()函数将Java类型导入脚本中。 以下Nashorn代码导入 java.util.ArrayList 类并创建其对象: // Import java.util.ArrayList type and call it ArrayList var ArrayList = Java.type("java.util.ArrayList"); // Create an object of the ArrayList type var list = new ArrayList(); 以下代码导入java.util.ArrayList并调用它MyList: var MyList = Java.type("java.util.ArrayList"); var list2 = new MyList(); 使用importPackage()和importClass()函数...

Java 全局脚本-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 全局脚本

Java脚本教程 – Java全局脚本 每个Nashorn引擎使用多个脚本全局变量 import javax.script.ScriptContext; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.SimpleScriptContext; public class Main { public static void main(String[] args) throws Exception { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("JavaScript"); engine.eval("var msg = "Hello globals""); engine.eval("print(this.msg);"); ScriptContext ctx = new SimpleScriptContext(); engine.eval("print(this.msg);", ctx); } } 上面的代码生成以下结果。 例子 以下代码显示了如何通过复制引擎的默认上下文的引擎范围绑定来共享脚本。 import static javax.script.ScriptContext.ENGINE_SCOPE; import javax.script.Bindings; import javax.script.ScriptContext; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.SimpleScriptContext; public class Main { public static void main(String[] args) throws Exception { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("JavaScript"); engine.eval("var msg = "Hello globals""); engine.eval("print(this.msg);"); ScriptContext ctx = new SimpleScriptContext(); ScriptContext defaultCtx = engine.getContext(); Bindings engineBindings = defaultCtx.getBindings(ENGINE_SCOPE); ctx.setBindings(engineBindings, ENGINE_SCOPE); engine.eval("print(this.msg);", ctx); } } 上面的代码生成以下结果。

Java 脚本Nashorn

Java脚本教程 – Java脚本Nashorn Nashorn是JVM上的ECMAScript 5.1规范的运行时实现。 Nashorn是100%符合ECMAScript 5.1。 使用Nashorn,我们可以在脚本中使用Java库。 Nashorn有自己的语法和构造。 严格和非严格模式 Nashorn可以在两种模式下操作:严格和非严格。 一些容易出错的ECMAScript特性不能在严格模式下使用。 在非严格模式下工作的某些功能将在严格模式下生成错误。 我们可以通过两种方式在脚本中启用严格模式: 对jjs命令使用-strict选项 使用 “使用严格” 或 ‘使用严格’ 指令 以下命令以严格模式调用jjs命令行工具,并尝试为未声明的变量赋值。 C:\> jjs -strict jjs> a = 10; <shell>:1 ReferenceError: "a" is not defined jjs> exit() 以下命令在非严格模式下调用jjs命令行工具,而不使用-strict选项。 运行相同的代码: C:\> jjs jjs> a = 10; 10 jjs>exit() 以下代码显示如何在js源文件中使用use strict伪指令 指令在脚本或函数的开头指定。 // strict.js "use strict"; // This is the use strict directive. a = 10; // This will generate an error.

Java 脚本上下文-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 脚本上下文

Java脚本教程 – Java脚本上下文 脚本引擎在上下文或环境中执行脚本。 ScriptContext 接口的实例表示脚本的上下文。 SimpleScriptContext 类是 ScriptContext 接口的实现。 脚本上下文由四个组件组成: 与不同范围相关联的绑定。上下文中的绑定将参数传递给脚本。 读取器读取输入 写入输出 写入错误输出的错误写入器 例子 以下代码使用SimpleScriptContext类创建ScriptContext。 SimpleScriptContext类的一个实例维护Bindings的两个实例:一个用于引擎范围,一个用于全局范围。 默认情况下,SimpleScriptContext类分别将上下文的输入阅读器,输出写入程序和错误写入程序初始化为 System.in , System.out 和 System.err 。 ScriptContext接口的getReader(),getWriter()和getErrorWriter()方法分别返回来自ScriptContext的读者,写者和错误写入者的引用。 Setter方法可以设置读写器。 以下代码显示如何获取读写器。它还显示如何设置写入器到FileWriter以将脚本输出写入文件: import java.io.FileWriter; import java.io.Reader; import java.io.Writer; import javax.script.ScriptContext; import javax.script.SimpleScriptContext; public class Main { public static void main(String[] args) throws Exception{ ScriptContext ctx = new SimpleScriptContext(); // Get the reader and writers from the script context Reader inputReader = ctx.getReader(); Writer outputWriter = ctx.getWriter(); Writer errWriter = ctx.getErrorWriter(); // Write all script outputs to an out.txt file Writer fileWriter = new FileWriter("out.txt"); ctx.setWriter(fileWriter); } } 添加上下文 创建 SimpleScriptContext 后,您可以开始在引擎范围绑定中存储键值对。 setAttribute()方法用于向Bindings添加键值对。 以下代码显示如何添加三个键值对。 import javax.script.ScriptContext; import javax.script.SimpleScriptContext; public class Main { public static void main(String[] args) throws Exception{ ScriptContext ctx = new SimpleScriptContext(); ctx.setAttribute("year",...

Java 脚本范围

Java脚本教程 – Java脚本范围 范围与绑定一起使用。 绑定的范围决定了其键值对的可见性。 一个绑定仅发生在一个作用域中。 脚本引擎首先在具有较高优先级的绑定中搜索变量名称,然后搜索具有较低优先级的绑定。 Java Scripting API定义了两个范围。 ScriptContext.ENGINE_SCOPE ScriptContext.GLOBAL_SCOPE 引擎范围的优先级高于全局范围。

Java 脚本绑定-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 脚本绑定

Java脚本教程 – Java脚本绑定 绑定是一组键/值对,键必须是非空的非空字符串。 Java Bindings是Bindings接口的一个实例。 SimpleBindings类是Bindings接口的一个实现。 Bindings接口继承了 Map< String,Object> 接口。 绑定是一个映射,限制其键必须是非空的非空字符串。 例子 import javax.script.Bindings; import javax.script.SimpleBindings; public class Main { public static void main(String[] args) { Bindings params = new SimpleBindings(); params.put("stringKey", "Hello"); params.put("valueKey", 2015); Object msg = params.get("stringKey"); Object year = params.get("valueKey"); System.out.println("stringKey" + msg); System.out.println("valueKey = " + year); params.remove("valueKey"); year = params.get("valueKey"); boolean containsYear = params.containsKey("valueKey"); System.out.println("valueKey = " + year); System.out.println("params contains year = " + containsYear); } } 上面的代码生成以下结果。 例2 要将参数从Java代码传递到脚本引擎,请使用ScriptEngine接口中的createBindings()方法,该方法返回Bindings接口的实例。 import javax.script.Bindings; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class Main { public static void main(String[] args) { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("JavaScript"); Bindings params = engine.createBindings(); params.put("stringKey", "Hello"); params.put("valueKey", 2015); Object msg = params.get("stringKey"); Object year = params.get("valueKey"); System.out.println("stringKey" +...

Java 脚本eval-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 脚本eval

Java脚本教程 – Java脚本eval ScriptEngine 可以在 String 和java.io.Reader中执行脚本。 通过使用Reader,我们可以在网络或文件中执行脚本。 ScriptEngine接口的eval()方法具有以下重载版本。 Object eval(String script) Object eval(Reader reader) Object eval(String script, Bindings bindings) Object eval(Reader reader, Bindings bindings) Object eval(String script, ScriptContext context) Object eval(Reader reader, ScriptContext context) 例子 以下代码显示如何运行从.js文件存储的Javascript脚本代码。 名为helloscript.js的.js文件的内容如下所示。 // Print a message print("Hello from JavaScript!"); 这里是运行脚本的代码。 import java.io.IOException; import java.io.Reader; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class Main { public static void main(String[] args) { String scriptFileName = "c:/test.js"; Path scriptPath = Paths.get(scriptFileName); ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("JavaScript"); try { Reader scriptReader = Files.newBufferedReader(scriptPath); engine.eval(scriptReader); } catch (IOException | ScriptException e) { e.printStackTrace(); } } } 上面的代码生成以下结果。 例2 ScriptEngine 中的 eval()方法以对象形式返回脚本中的最后一个值。 import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class...