java调用js代码
jdk8里使用脚本引擎调用js
1.定义一个js方法:
function getRouteInfo(province){ //注意,参数不要带var。。在java里执行会报错。。
if (province=='henan')
return 'http://127.0.0.1/resweb';
else
return '未找到对应的省份信息,province='+province;
}
2. 写一个java 测试类来 调用上面的js方法
/**
* Created by codeya on 2018/3/2.
*/
import java.io.StringReader;
import javax.script.Invocable;
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
public class Test {
public static void main(String args[]){ //js function:getRouteInfo,入参为province
String routeScript="function getRouteInfo(province){ \n" + // 参数不要带var。。不然后面执行方法的时候会报错。。
" if (province=='henan') " +
" return 'http://127.0.0.1/resweb';\n" +
" else " +
" return '未找到对应的省份信息,province='+province;\n" +
"}"; String scriptResult ="";//脚本的执行结果 ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");//1.得到脚本引擎
try {
//2.引擎读取 脚本字符串
engine.eval(new StringReader(routeScript));
//如果js存在文件里,举例
// Resource aesJs = new ClassPathResource("js/aes.js");
// this.engine.eval(new FileReader(aesJs.getFile())); //3.将引擎转换为Invocable,这样才可以掉用js的方法
Invocable invocable = (Invocable) engine; //4.使用 invocable.invokeFunction掉用js脚本里的方法,第一個参数为方法名,后面的参数为被调用的js方法的入参
scriptResult = (String) invocable.invokeFunction("getRouteInfo", "henan"); }catch(ScriptException e){
e.printStackTrace();
System.out.println("Error executing script: "+ e.getMessage()+" script:["+routeScript+"]");
} catch (NoSuchMethodException e) {
e.printStackTrace();
System.out.println("Error executing script,为找到需要的方法: "+ e.getMessage()+" script:["+routeScript+"]");
}
System.out.println(scriptResult.toString());
}
}
3.运行测试结果为:
http://127.0.0.1/resweb
说明调用成功了。。
参考文档:
Java 8 Nashorn 教程 :https://segmentfault.com/a/1190000006041626 这篇文章里也写了js调用java
http://www.colabug.com/2380506.html Java爬虫入门篇(二)Java 8 Nashorn 动态执行js脚本
java调用js代码的更多相关文章
- 在Java中直接调用js代码(转载)
http://blog.csdn.net/xzyxuanyuan/article/details/8062887 JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码. 在Ja ...
- 在Java中直接调用js代码
JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码. 在Java中直接调用js代码 不能调用浏览器中定义的js函数,会抛出异常提示ReferenceError: “alert ...
- Java执行js代码
在做项目中有时候需要用到Java调用js文件执行相应的方法 在JDK1.6添加了新的ScriptEngine类,允许用户直接执行js代码. import org.junit.Test; import ...
- 通过JNI实现java调用C代码和C代码调用java的代码
一.java调用C代码 1)java中需要声明调用的函数,也就是native方法,并通过System.LoadLibrary来调用dll或者so(C代码).实例代码如下: public class H ...
- [原著]java或者Js 代码逻辑来处理 突破 oracle sql “IN”长度的极限的问题
注:本文出自:博主自己研究验证可行 [原著]java或者Js 代码逻辑来处理 突破 oracle sql "IN"长度的极限的问题 在很多的时候 使用 select ...
- windows和linux环境下java调用C++代码-JNI技术
最近部门做安卓移动开发的需要调C++的代码,困难重重,最后任务交给了我,查找相关资料,没有一个教程能把不同环境(windows,linux)下怎么调用说明白的,自己在实现的过程中踩了几个坑,在这里总结 ...
- java调用js脚本
有些情况下,需要java去调用js,groovy等脚本语言,传入参数获取脚本运行的结果. js脚本例子: function add(a,b){ return a + b + number; } jav ...
- java调用js脚本语言
在我们开发的过程中,可能有这么一种情况,在java中需要取调用js方法完成一些事情.那么什么时候可能出现这种情况呢.比如我们使用爬虫模拟登录别的网站,但有些网站前台使用js对密码进行了加密处理,那么就 ...
- java调用python代码
同样的我们需要安装jython,具体的步骤如下: 1. 去 http://sourceforge.net/projects/jython/ 下载最新的jython相关的jar包. 2. 下载下来的ja ...
随机推荐
- 基于Fisco-Bcos的区块链智能合约-简单案例实践
一.智能合约介绍 智能合约是指把合同/协议条款以代码的形式电子化地放到区块链网络上.FISCO BCOS平台支持两种智能合约类型:Solidity智能合约与预编译智能合约 Solidity与Java类 ...
- NetCDF格式.nc
netcdf sfc_pres_temp { dimensions: latitude = 6 ; //纬度轴 longitude = 12 ; //经度轴 variables: float lati ...
- STL——容器(Set & multiset) insert 的返回值 和 pair 的用法
1. 使用 insert 插入时的返回值: 将一个元素插入 (insert) 到 set 或 multiset 中时,如果插入失败返回的类型是一个 pair 的自定类型,insert 源码如下: in ...
- 十、TestNG分组测试
使用 groups 属性 package com.lc.tesgFenZu; import org.testng.annotations.AfterGroups; import org.testng. ...
- 安装xshell6
xshell作为一个强大的安全终端模拟软件,深受广大人民喜爱,本文将介绍如何在Windows环境下安装最新版本的xshell客户端. 一,下载 1,打开官网下载链接https://www.netsar ...
- 细品 Spring Boot+Thymeleaf,还有这么多好玩的细节!
@ 目录 1. Thymeleaf 简介 2. 整合 Spring Boot 2.1 基本用法 2.2 手动渲染 3. Thymeleaf 细节 3.1 标准表达式语法 3.1.1 简单表达式 3.1 ...
- vue第十八单元(单向数据流 vuex状态管理)
第十八单元(单向数据流 vuex状态管理) #课程目标 1.理解什么是数据管理模式 2.什么是vuex 3.什么时候使用vuex 4.vuex安装及工作原理 5.vuex语法 #知识点 1.首先来看下 ...
- [日常摸鱼]POJ2187 BeautyContest-旋转卡壳
原来这个念 旋转卡qia壳ke- 题意:求平面内给定点集里的最远点对,$n \leq 5e4$ 做法就是旋转卡壳啦,话说这题数据范围应该可以再大挺多的. #include<cstdio> ...
- PHP远程代码执行漏洞:CVE-2019-11043
漏洞详情: Nginx上fastcgi_split_path_info在处理带有 %0a 的请求时,会因为遇到换行符 \n 导致PATH_INFO为空.而php-fpm在处理PATH_INFO为空的情 ...
- C#中搜索xsd文件中的某个数据源
步骤 1.打开***.xsd文件. 2.数据源之间的空白处,右键->属性. 3.在VS右侧会跳出一个属性窗口. 4.有个名称为DataSet的下拉框,所有的数据源名称都在其中,单击即可定位到所选 ...