我们首先的自己先建立一个文本文件,然后编写一个javascript函数,并保存文件,可以改后缀名为.js,例如我们的例子里面就写入一个这样的函数:
function cal(var1,var2) { return var1+var2-factor; }
然后我们开始写java代码,java代码主要为以下部分:
import java.io.FileNotFoundException; import java.io.FileReader; import java.util.Scanner; import javax.script.Bindings; import javax.script.Invocable; import javax.script.ScriptContext; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class ScriptText { public static void main(String[] args) throws FileNotFoundException, ScriptException, Exception { ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript"); Bindings bind = engine.createBindings(); bind.put("factor", 2); //这里绑定一个factor的值为2. engine.setBindings(bind,ScriptContext.ENGINE_SCOPE); Scanner input = new Scanner(System.in); while(input.hasNext()) { int first = input.nextInt(); int sec = input.nextInt(); System.out.println("输入的参数为:"+ first+ " , " + sec); engine.eval_r(new FileReader("E:/cal.js")); if(engine instanceof Invocable) { Invocable in = (Invocable)engine; Double result = (Double)in.invokeFunction("cal",first,sec); System.out.println("运算结果为:" + result.intValue()); } } } }
其中的“E:/cal.js”就是我们js文件的保存路径。并且这个主函数可以循环的输入。
我们运行一下这个程序得到的结果如下:
1
2
输入的参数为:1 , 2
运算结果为:1
上面也就是 调用了 1 + 2 - 2 = 1 ,所以结果为1
我们将js文件中的function方法改变下,改编为下面的函数:
function cal(var1,var2) { return var1+var2*factor; }
我们保存js文件,然后再继续在运行的程序中输入我们要计算的数字,(注意:这里不需要重新启动程序,因为输入时循环输入的)
我们再来看这个输出的结果:
1
2
输入的参数为:1 , 2
运算结果为:5
我们看到我们得到的结果为5,我们发现程序调用了我们修改后的js文件中函数,也就是调用方式为 1 + 2 * 2 = 5 所以我们得到的结果为5。
这个结果我们是否觉得有点神奇呢,我们一般的java程序在运行后,它在这次的运行中输入相同的值结果应该是不变的,但是这个程序在运行同一个程序的时候输入相同值但是得到的结果变化了,这主要是javascript指解释性语言,当程序需要用到js中的function的时候他才去解释执行这个函数,但是我们的function函数已经变化了,所以它就加载执行改变后的js代码,所以得到的就是我们有点意外的结果。
这样的优势是我们在有的应用中不需要重新启动程序就可以改变它的业务逻辑,这样在实时系统中会有比较重要的应用。
相关推荐
如果你的工作中需要用到逻辑处理,而这部分逻辑处理需要针对不同的应用修改,做到逻辑可配,那么这就是你的方案(如果是数据配置的问题,应该用xml的方案)
java调用js方便在不重启服务的情况更改方法算法
android JS与java代码相互调用Demo,简单易懂的Demo。包括了java调用js方法。js调用java代码。记得js调用java的方法不能处理主线程UI。
Java直接运行JS代码样例 java中调用js脚本 java中直接调用js代码
能够运行的案例java调用js和js调用java,欢迎大家下载
Java代码调用HTML5中的JS函数算法,这样就可以轻松解密..
JS 与 JAVA 互相调用代码样例,代码比较简易,适合学习,希望对您有帮助!
android使用webView实现java程序与js脚本的相互调用,
主要介绍了android webview中使用Java调用JavaScript方法并获取返回值,本文直接给出代码示例,需要的朋友可以参考下
微信的java js 微支付bug太多,改了6,7个bug 最后实例才能运行调用,本实例,只要改config里面的相关秘钥就可以了,已经测试通过,有问题,可以留言,大家一起讨论。
前段时间 做了个学校的春萌项目,其中用到vue连接后端java接口。 先上后端接口代码: package controller; import net.sf.json.JSONObject; import util.DBUtil; import javax.servlet.ServletException; import ...
主要介绍了Java调用JavaScript实现字符串计算器代码示例,具有一定参考价值,需要的朋友可以了解下。
Java直接调用js文件框架rhino-1.7.9源代码 https://github.com/mozilla/rhino/releases
js 直接调用java类的方法,自己根据.net有过类似的方法想这样做,简单实现。包括源代码
java调用codesoft的案例,代码内容
利用webview控件,实现js和java代码的相互调用
js脚本元素调用java代码[整理].pdf
Ice 是一种针对客户端和服务器进行通信的面向对象的中间件平台。Ice 为构建面向对象的客户-服务器应用提供了工具、API 和库支持。客户和服务器通信双方可以用不同的编程...本代码为ice同步调用和异步调用实例代码。
js和java 互调,绝非单纯的js中调用java代码。自身已通过测试可用
安卓webview中h5页面里的js和java相互调用,js和Android代码相互调用