服务端调用js:javax.script
谈起js在服务端的应用,大部分人的第一反应都是node.js。node.js作为一套服务器端的 JavaScript 运行环境,有自己的独到之处,但不是所有的地方都需要使用它。
例如在已有的服务端代码上增加一个业务,而这个业务使用的却是js编写。如果用node.js处理的话,会很麻烦。而且另一方面对于很多服务端程序员来说,觉得js的对象模型很奇怪,不太喜欢用js处理问题。
对于上面这种情况,有一种简单的处理方法:javax.script API
javax.script加入了对部分脚本语言的支持,它的原意是为了针对关于业务在客户端和服务端中,逻辑相同而语言不同导致实现不同的问题。但是这种处理方法由于前后端的分工和一些缺陷,很少在实际应用中用到。
javax.script
实现起来很简单。
一:得到一个ScriptEngine对象
ScriptEngineManager maneger = new ScriptEngineManager(); ScriptEngine engine = maneger.getEngineByName("JavaScript");
二:读js文件
Reader scriptReader = new InputStreamReader( JsInServer.class.getResourceAsStream("js文件"));
三:解析文件
engine.eval(scriptReader);
四:调用js方法,得到的结果以Object对象返回
Object result = invocable.invokeFunction("js方法", js方法参数1, js方法参数2...);
测试例子:
java
import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class JsInServer { public static void main(String[] arg) throws IOException { ScriptEngineManager maneger = new ScriptEngineManager(); ScriptEngine engine = maneger.getEngineByName("JavaScript"); Reader scriptReader = new InputStreamReader( JsInServer.class.getResourceAsStream("TestAdd.js")); if (engine != null) { try { // JS引擎解析文件 engine.eval(scriptReader); if (engine instanceof Invocable) { Invocable invocable = (Invocable) engine; // JS引擎调用方法 Object result = invocable.invokeFunction("add", 1, 2); System.out.println("The result is: " + result); } } catch (ScriptException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } finally { scriptReader.close(); } } else { System.out.println("ScriptEngine create error!"); } } }
js:
function add(a,b){ println("The first parameter is: " + a); println("The second parameter is: " + b); return a+b; } println("js perform success");
执行结果:
js perform success The first parameter is: 1 The second parameter is: 2 The result is: 3.0
相关推荐
javax.script java调用js的jar包
Java调用JavaScript方法是跨语言交互的一个重要场景,特别是在服务器端需要利用JavaScript的灵活性和库资源时。在Java中,自JDK 1.6版本起,通过JSR 223(Java Scripting API)提供了对脚本语言的支持,包括...
本文将详细讲解如何在Java中调用JavaScript方法,主要涉及两种方式:一是调用Java代码内部编写的JS方法,二是调用外部JS文件中的方法。 **一、调用Java代码内部编写的JS方法** 自Java 6开始,Java引入了`javax....
本文将深入探讨“Java调用JavaScript代码”的技术实现,以及它在实际项目中的应用场景。 Java和JavaScript虽然名字相似,但它们是两种完全不同的编程语言,各自有其特定的用途。Java是一种静态类型的、面向对象的...
以下是一个基本的Java调用JavaScript的示例: ```java import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class JavaRunJsExample { public ...
### Java调用JS代码实现动态配置 在现代软件开发中,动态配置的需求越来越普遍,特别是在不希望频繁重启服务的情况下更新业务逻辑或算法时。本文将详细介绍如何利用Java调用JavaScript来实现这一目标,并通过一个...
import javax.script.ScriptEngineManager; public class JSEngineExample { public static void main(String[] args) throws Exception { // 创建ScriptEngineManager对象 ScriptEngineManager manager = new ...
2. **JavaScript到Java的互操作性**:Rhino允许JavaScript代码直接调用Java对象和方法,反之亦然,极大地增强了两种语言的交互性。 3. **嵌入到Java应用程序**:Rhino可以轻易地被嵌入到Java应用程序中,作为动态...
import javax.script.ScriptEngineManager; import javax.script.ScriptEngine; import javax.script.ScriptException; public class JavaEvalExample { public static void main(String[] args) { ...
标题“Java如何与脚本(JavaScript)之间相互调用二”主要探讨的是在Java应用程序中如何集成和调用JavaScript代码,以及反过来JavaScript如何调用Java的功能。这涉及到跨语言交互的技术,通常通过Java的ScriptEngine...
通过`invokeFunction`方法,我们可以像调用普通Java方法一样调用这个JavaScript函数。 #### 四、可用的脚本引擎 Java默认支持Mozilla Rhino引擎来执行JavaScript。然而,通过遵循JSR 223规范,可以轻松扩展以支持...
import javax.script.ScriptEngineManager; import javax.script.ScriptEngine; import javax.script.ScriptException; ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager....
1. **引入必要的类库**:在 Java Applet 中,需要引入 `javax.script.ScriptEngineManager` 和 `javax.script.ScriptEngine` 类库。 2. **创建 ScriptEngineManager 实例**:通过 `new ScriptEngineManager()` 创建...
`javax.script`包则提供了脚本引擎接口,可以执行JavaScript代码,间接与ActiveX控件交互。 4. **安全性与限制:** 使用ActiveX控件存在安全风险,因为它可以访问系统资源,容易成为恶意软件的入口。因此,Java...
Java可以通过`javax.script`包中的接口与JavaScript交互,允许在Java程序中执行JavaScript脚本或者调用JavaScript函数。 3. **Web Services和Ajax**:Java后端可以提供Web服务(如RESTful API),JavaScript通过...
import javax.script.ScriptEngineManager; import javax.script.ScriptEngine; import javax.script.ScriptException; public class NashornExample { public static void main(String[] args) { ...
Java可以调用本地的JavaScript引擎,如Rhino或Nashorn来执行JavaScript代码。例如,使用Nashorn,你可以在Java中这样执行JavaScript: ```java import javax.script.ScriptEngineManager; import javax.script....
script.src = '/path/to/javaResource?callback=handleJavaResult'; document.head.appendChild(script); ``` ### 3. 使用WebSocket WebSocket提供双向通信,允许JS和Java之间实时交互。Java端创建WebSocket服务器...