精华内容
下载资源
问答
  • 在实现区域控制的时候...查了一下,还真的可以在Java调用js。下面是代码:Stringdp="114.018107,22.672359|114.151774,22.66142|114.153212,22.577351|114.092558,22.542373|114.006896,22.548782|114.01322,22.5...

    在实现区域控制的时候,突然想到,能不能在Java中调用javascript来实现呢?查了一下,还真的可以在Java中调用js。下面是代码:

    String dp = "114.018107,22.672359|114.151774,22.66142|114.153212,22.577351|114.092558,22.542373|114.006896,22.548782|114.01322,22.596571|113.981025,22.659019|113.981025,22.659019|";

    String carPoiont = "114.151774,22.66142";

    ScriptEngineManager manager = new ScriptEngineManager();

    ScriptEngine engine = manager.getEngineByName("javascript");

    String jsFileName = "WebRoot/Resources/AreaJud.js";   // 读取js文件

    FileReader reader = new FileReader(jsFileName);   // 执行指定脚本

    engine.eval(reader);

    if(engine instanceof Invocable) {

    Invocable invoke = (Invocable)engine;    // 调用merge方法,并传入两个参数

    // c = merge(2, 3);

    Double c = (Double)invoke.invokeFunction("stringJudge", dp, carPoiont);

    System.out.println("c = " + c);

    }

    reader.close();

    实现是实现了,但是Java调用javascript还是有诸多限制,比如在js中我们会用到大量的浏览器对象,比如document、alert等,在Java中调用javascript的时候这些对象都不能使用,所以,我的功能只能换一种方式来实现了。

    展开全文
  • 1.从打印Hello World开始Java8 引入Nashorn实现javascript调用,比如使用java运行一段js实现“Hello World”打印:package com.iflytek.research.jsdemo;import javax.script.ScriptEngine;import javax.script....

    最近项目需要,利用java执行动态语言,首先想到的是支持js。

    1.从打印Hello World开始

    Java8 引入Nashorn实现javascript调用,比如使用java运行一段js实现“Hello World”打印:

    package com.iflytek.research.jsdemo;

    import javax.script.ScriptEngine;

    import javax.script.ScriptEngineManager;

    import javax.script.ScriptException;

    public class NashornTest {

    public static void main(String[] args) {

    // 加载nashorn执行引擎

    ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");

    try {

    engine.eval("var str = 'Hello World';"

    + "print(str);");

    } catch (ScriptException e) {

    e.printStackTrace();

    }

    }

    }

    上述代码成功打印了“Hello World”, 现实场景中,script代码大多来自文件,编辑test.js

    var str = 'Hello World';

    print(str);

    将java读取方式改为从文件加载

    // 加载nashorn执行引擎

    ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");

    try {

    FileReader scriptFile = new FileReader("test.js");

    engine.eval(scriptFile);

    } catch (ScriptException e) {

    e.printStackTrace();

    } catch (FileNotFoundException e) {

    e.printStackTrace();

    }

    运行后,仍然能正常打印

    2.传递参数给javascript代码

    可以使用SimpleBindings类来实现参数传递,改写test.js

    var str = 'Hello ';

    print(str + name);

    上述代码name变量就可以使用SimpleBindings来传递,具体实现

    // 加载nashorn执行引擎

    ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");

    try {

    FileReader scriptFile = new FileReader("test.js");

    SimpleBindings simpleBindings = new SimpleBindings();

    simpleBindings.put("name", "Nashorn");

    engine.eval(scriptFile, simpleBindings);

    } catch (ScriptException e) {

    e.printStackTrace();

    } catch (FileNotFoundException e) {

    e.printStackTrace();

    }

    再次运行代码 打印

    Hello Nashorn

    这个参数在js中是全局可见的,比如将它放到函数作用域中也可以正常读取到

    var good = function() {

    return name + ' is Good';

    }

    print(good());

    打印结果

    Nashorn is Good

    3.指定调用的函数

    在加载js文件后,可以使用Invocable接口的invokeFunction方法, 修改js文件

    var good = function(name) {

    print(name + ' is Good');

    }

    在给函数传参直接在invokeFunction方法添加参数即可,不再需要使用SimpleBindings

    public static void main(String[] args) {

    // 加载nashorn执行引擎

    ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");

    try {

    FileReader scriptFile = new FileReader("test.js");

    engine.eval(scriptFile);

    Invocable in = (Invocable) engine;

    in.invokeFunction("good","Nashorn");

    } catch (ScriptException e) {

    e.printStackTrace();

    } catch (FileNotFoundException e) {

    e.printStackTrace();

    } catch (NoSuchMethodException e) {

    e.printStackTrace();

    }

    }

    如果要传递对象也是妥妥的

    var good = function(person) {

    print( 'name: ' + person.name);

    }

    Map person = new HashMap<>();

    person.put("name", "nashorn");

    in.invokeFunction("good",person);

    4.获取js返回值

    同样调用invokeFunction

    test.js

    var getPerson = function() {

    var person = {

    name : "Zhan San",

    age: 18

    }

    return person;

    }

    public static void main(String[] args) {

    // 加载nashorn执行引擎

    ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");

    try {

    FileReader scriptFile = new FileReader("test.js");

    engine.eval(scriptFile);

    Invocable in = (Invocable) engine;

    JSONObject personJson =(JSONObject)JSONObject.toJSON(in.invokeFunction("getPerson"));

    System.out.println(personJson.toJSONString());

    } catch (ScriptException e) {

    e.printStackTrace();

    } catch (FileNotFoundException e) {

    e.printStackTrace();

    } catch (NoSuchMethodException e) {

    e.printStackTrace();

    }

    }

    这里json引用了fastjson包,执行之后获得结果

    {"name":"Zhan San","age":18}

    展开全文
  • Java中直接调用js代码不能调用浏览器中定义的js函数,会抛出异常提示ReferenceError: “alert” is not defined。package com.sinaapp.manjushri;import javax.script.ScriptEngine;import javax.script.Sc...

    JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码。

    在Java中直接调用js代码

    不能调用浏览器中定义的js函数,会抛出异常提示ReferenceError: “alert” is not defined。

    package com.sinaapp.manjushri;

    import javax.script.ScriptEngine;

    import javax.script.ScriptEngineManager;

    import javax.script.ScriptException;

    /**

    * 直接调用js代码

    * */

    public class ScriptEngineTest {

    public static void main(String[] args) {

    ScriptEngineManager manager = new ScriptEngineManager();

    ScriptEngine engine = manager.getEngineByName("javascript");

    try{

    engine.eval("var a=3; var b=4;print (a+b);");

    // engine.eval("alert(\"js alert\");"); // 不能调用浏览器中定义的js函数,会抛出alert引用不存在的异常

    }catch(ScriptException e){

    e.printStackTrace();

    }

    }

    }

    输出结果:7

    在Java中绑定js变量

    在调用engine.get(key);时,如果key没有定义,则返回null

    package com.sinaapp.manjushri;

    import javax.script.Bindings;

    import javax.script.ScriptContext;

    import javax.script.ScriptEngine;

    import javax.script.ScriptEngineManager;

    import javax.script.ScriptException;

    public class ScriptEngineTest2 {

    public static void main(String[] args) {

    ScriptEngineManager manager = new ScriptEngineManager();

    ScriptEngine engine = manager.getEngineByName("javascript");

    engine.put("a", 4);

    engine.put("b", 3);

    Bindings bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE);

    try {

    // 只能为Double,使用Float和Integer会抛出异常

    Double result = (Double) engine.eval("a+b");

    System.out.println("result = " + result);

    engine.eval("c=a+b");

    Double c = (Double)engine.get("c");

    System.out.println("c = " + c);

    } catch (ScriptException e) {

    e.printStackTrace();

    }

    }

    }

    输出:

    result = 7.0

    c = 7.0

    在Java中调用js文件中的function,传入调用参数,并获取返回值

    js文件中的merge函数将两个参数a,b相加,返回结果

    // expression.js

    function merge(a, b) {

    return a + b;

    }

    在Java代码中读取js文件,传入两个参数,获得返回值。

    package com.sinaapp.manjushri;

    import java.io.FileReader;

    import javax.script.Invocable;

    import javax.script.ScriptEngine;

    import javax.script.ScriptEngineManager;

    /**

    * Java调用并执行js文件,传递参数,并活动返回值

    **/

    public class ScriptEngineTest {

    public static void main(String[] args) throws Exception {

    ScriptEngineManager manager = new ScriptEngineManager();

    ScriptEngine engine = manager.getEngineByName("javascript");

    String jsFileName = "expression.js"; // 读取js文件

    FileReader reader = new FileReader(jsFileName); // 执行指定脚本

    engine.eval(reader);

    if(engine instanceof Invocable) {

    Invocable invoke = (Invocable)engine;

    // 调用merge方法,并传入两个参数

    Double c = (Double)invoke.invokeFunction("merge", 2, 3);

    System.out.println("c = " + c);

    }

    reader.close();

    }

    }

    输出结果:

    c = 5.0

    展开全文
  • java调用javascript

    2021-02-25 20:22:55
    介绍jdk1.6提供了对JavaScript的支持,使用的js引擎为Rhino,jdk1.8替换成了Nashorn。使用public class Client {public static void main(String[] args) throws IOException,ScriptException, ...

    介绍

    jdk1.6提供了对JavaScript的支持,使用的js引擎为Rhino,jdk1.8替换成了Nashorn。

    使用

    public class Client {

    public static void main(String[] args) throws IOException,

    ScriptException, NoSuchMethodException {

    //获取javascript引擎

    ScriptEngineManager engineManager = new ScriptEngineManager();

    ScriptEngine scriptEngine = engineManager.getEngineByName("javascript");

    System.out.println(scriptEngine);

    invokeJsWithString(scriptEngine);

    }

    private static void invokeJsWithString(ScriptEngine scriptEngine)

    throws ScriptException, NoSuchMethodException {

    String code = "12 + 34";

    //执行javascript语句

    Object result = scriptEngine.eval(code);

    System.out.println(result);

    //绑定变量

    Bindings bindings = scriptEngine.createBindings();

    bindings.put("name", "lisi");

    scriptEngine.setBindings(bindings, ScriptContext.ENGINE_SCOPE);

    //name为外部变量

    code = "function print(num1,num2) { return num1 + num2 + name; }";

    scriptEngine.eval(code);

    //执行javascript函数

    result = ((Invocable) scriptEngine).invokeFunction("print", 4, 5);

    System.out.println(result);

    }

    }

    输出结果为

    jdk.nashorn.api.scripting.NashornScriptEngine@61f8bee4

    46

    9lisi

    spring对java中的API进行了一些简单的封装

    public class Client {

    public static void main(String[] args) {

    StandardScriptEvaluator evaluator = new StandardScriptEvaluator();

    evaluator.setLanguage("javascript");

    Object result = evaluator.evaluate(new StaticScriptSource("12 + 34"));

    System.out.println(result);

    }

    }

    46

    展开全文
  • By using Java Scripting API, I am able to execute JavaScript within Java. However, can someone please explain what I would need to add to this code in order to be able to call on functions that are in...
  • javascript代码调用Java方法

    千次阅读 2021-03-15 11:54:00
    创建一个Web服务(例如,使用Tomcat)从JavaScript调用其URL(例如,使用JQuery或dojo)当Java代码位于applet中时,你可以使用JavaScript桥。JavaJavaScript编程语言之间的桥梁(非正式地称为LiveConnect)是在Java插件...
  • 1、JS调用Java代码:格式language="JavaScript">function window_onload(){//输出传过来的参数parent.HiddFrame.location.href = ""+d003+"&d002="+d002+"&forwardName=d003onchange";zggmgyzfglForm.action = ""+...
  • Java调用JavaScript示例

    2021-04-22 20:47:09
    /*** ScriptTest* java调用javascript示例代码* @author your name* Date: Nov 4, 2011*/package org.sun.script.js;import java.awt.Component;import java.awt.Container;import java.awt.EventQueue;import java....
  • function printInfo(){ var args... 而js是在客户端执行的,jsp等不到js执行,所以jsp里调用js的变量或代码是不行的 js可以直接嵌套java,因为服务器端得代码先于javascript解析 比如 完全可以,所以可以直接写到js代码
  •  // 不能调用浏览器中定义的js函数 // 错误,会抛出alert引用不存在的异常 engine.put("a", 4); engine.put("b", 3); Bindings bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE); try { // ...
  • JS调用Java代码

    2021-02-12 13:35:49
    1、JS调用Java代码:格式function window_onload(){//输出传过来的参数parent.HiddFrame.location.href = "" +d003+"&d002="+d002+"&forwardName=d003onchange";//取得request.setAttribute("gmgyzfsqList",...
  • 轻松实现javascript调用Java代码

    千次阅读 2021-02-27 14:48:35
    轻松实现javascript调用Java代码来源:爱站网时间:1970-01-01编辑:网友分享将java翻译成javascript,然后利用回调机制,轻松实现javascript调用Java代码,需要了解的小伙本们,一起看看吧。将java翻译成javascript...
  • java调用js脚本

    2021-02-12 09:11:30
    有些情况下,需要java调用js,groovy等脚本语言,传入参数获取脚本运行的结果。js脚本例子:function add(a,b){return a + b + number;}java代码的例子:import java.io.FileReader;import java.util.Scanner;...
  • java调用javascript

    2021-02-12 14:16:45
    脚本语言的强大不用说,但是在...java的开发者也很难确定支持哪种语言,于是JCP(java Conmunity Process) 提出了JSR223规范,只要符合该规范的语言都可以在java平台上运行如下给出一个java调用javascript的例子fun...
  • Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true,,然后通过loadUrl就可以直接进行调用,如下所示:mWebView.getSettings().setJavaScriptEnabled...
  • 代码如下:public static void main(String[] args)throws NoSuchMethodException, ScriptException {String name = "faliang";ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript");String...
  • } 我想知道如何使用JavaScript代码中的参数访问此方法。 public String getCountry(@PathVariable String latitude, @PathVariable String longitude, Model model); 最佳答案 如果要以JSON格式获取结果,则可以按...
  • 标签:前段时间,在浏览javaeye论坛,看见有人征集如何在java中运行数学表达式。结果方案五花八门:1.jakarta commons JEXL.2.Beanshell3.Java Math Expression Parser jep4.parse combinator jparsec5.jdk 6.0的 ...
  • 2.4 创建支持JS调用的服务器端的Java类 package com.csii.dwr.service; public class HelloWorldService { public String sayHello(String username) { return "Hello World!" + username; } } 在HelloWorldService...
  • java调用js脚本语言

    2021-02-12 12:54:08
    在我们开发的过程中,可能有这么一种情况,在java中需要取调用js方法完成一些事情。那么什么时候可能出现这种情况呢。比如我们使用爬虫模拟登录别的网站,但有些网站前台使用js对密码进行了加密处理,那么就需要在...
  • 本文将介绍如何实现Java代码和Javascript代码的相互调用。如何实现实现Javajs交互十分便捷。通常只需要以下几步。WebView开启JavaScript脚本执行WebView设置供JavaScript调用的交互接口。客户端和网页端编写调用...
  • // baiduMap.prototype.eventOccur // {action:String,lat:Num,lon:Num,zoom:Num,overlook:Num,rotate:Num} JSONObject js = new JSONObject(); js.put("action", "click"); js.put("lat", point.latitude); js.put...
  • //下面是被网页里javascript调用的方法,即demo是前面是定义匿名内的类名,里面实现网页里javascript //要调用的方法 web.addJavascriptInterface(new Object(){//在web控件里为javascript代码提供使用接口 @...
  • import java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.URL;import javax.script.Invocab...
  • 其实就是js代码java代码的相互调用,下面我们就来实现这样的需求。设置,给添加js接口=()();mWebView.getSettings().setJavaScriptEnabled(true);mWebView.getSettings().setSupportZoom(true);WebSetti...
  • JSjava相互调用

    2021-03-05 12:29:59
    WebView的使用WebView webView= (WebView) findViewById(R.id.webview);...我们可以通过将WebView内嵌在App界面中,来装载网页,通过loadUrl,给予一个本地或者远程的地址,程序执行即可装载...这里代码演示的是在asset...
  • 在android平板上用webview打开一个网页,调用里面的javascript方法,同时相互传参。网上例子很少啊,基本都不能获取返回值,贴一个自己最后调试完的代码如下:Java:protected void onCreate(Bundle ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 289,076
精华内容 115,630
关键字:

java调用js代码速度

java 订阅