java执行js

1.开始

本文使用J2V8来在java代码中执行js文件

1.1引入pom

<!-- https://mvnrepository.com/artifact/com.eclipsesource.j2v8/j2v8_win32_x86_64 -->
<dependency>
  <groupId>com.eclipsesource.j2v8</groupId>
  <artifactId>j2v8_win32_x86_64</artifactId>
  <version>4.6.0</version>
  <scope>runtime</scope>
</dependency>

备注:如果是其他版本则需要j2v8版本

否则报错,如

1.2代码示例

import cn.hutool.core.io.IoUtil;
import com.eclipsesource.v8.V8;
import com.eclipsesource.v8.V8Array;
import com.eclipsesource.v8.V8Object;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.nio.charset.Charset;

public class JsTest {

    private V8 v8;

    @Before
    public void getV8(){
        this.v8 = V8.createV8Runtime();
    }
    @After
    public void close(){
        this.v8.release();
    }

    /**
     * 简单执行js
     */
    @Test
    public void test1() {
//        V8 runtime = V8.createV8Runtime();
        int result = v8.executeIntegerScript(""
                + "var hello = 'hello, ';\n"
                + "var world = 'world!';\n"
                + "hello.concat(world).length;\n");
        System.out.println(result);
//        runtime.release();
    }

    /**
     * 获取js对象中的值
     */
    @Test
    public void test2(){
        v8.executeVoidScript(""
                + "var person = {};\n"
                + "var hockeyTeam = {name : 'WolfPack'};\n"
                + "person.first = 'Ian';\n"
                + "person['last'] = 'Bull';\n"
                + "person.hockeyTeam = hockeyTeam;\n");
        V8Object person = v8.getObject("person");
        V8Object hockeyTeam = person.getObject("hockeyTeam");
        System.out.println(hockeyTeam.getString("name"));
        person.release();
        hockeyTeam.release();
    }

    /**
     * 执行js方法
     */
    @Test
    public void testFunction(){
        v8.executeScript("function c(a,b){return a+b}");
        Object result = v8.executeJSFunction("c", 1, 2);
        System.out.println(result);
    }

    /**
     * 获取变量和给变量赋值
     */
    @Test
    public void objSetVal(){
        v8.executeScript("var obj = 12;");
        System.out.println(v8.getInteger("obj"));
        v8.add("obj",999);
        System.out.println(v8.getInteger("obj"));
    }


    /**
     * 执行js文件
     * @throws FileNotFoundException
     */
    @Test
    public void readJSFile() throws FileNotFoundException {
        String jsStr = IoUtil.read(new FileInputStream("E:\\test.js"), Charset.defaultCharset());
        v8.executeScript(jsStr);
        Object str = v8.executeJSFunction("md5", "123456");
        System.out.println(str);
    }
}
function _(t, i) {
  var r = (t & 65535) + (i & 65535),
    f = (t >> 16) + (i >> 16) + (r >> 16);
  return f << 16 | r & 65535
}
function x(t, i) {
  return t << i | t >>> 32 - i
}
function R(t, i, r, f, j, O) {
  return _(x(_(_(i, t), _(f, O)), j), r)
}
function S(t, i, r, f, j, O, $) {
  return R(i & r | ~i & f, t, i, j, O, $)
}
function d(t, i, r, f, j, O, $) {
  return R(i & f | r & ~f, t, i, j, O, $)
}
function g(t, i, r, f, j, O, $) {
  return R(i ^ r ^ f, t, i, j, O, $)
}
function v(t, i, r, f, j, O, $) {
  return R(r ^ (i | ~f), t, i, j, O, $)
}
function o(t, i) {
  t[i >> 5] |= 128 << i % 32;
  t[(i + 64 >>> 9 << 4) + 14] = i;
  var r, f, j, O, $, s = 1732584193,
    c = -271733879,
    m = -1732584194,
    n = 271733878;
  for (r = 0; r < t.length; r += 16) {
    f = s;
    j = c;
    O = m;
    $ = n;
    s = S(s, c, m, n, t[r], 7, -680876936);
    n = S(n, s, c, m, t[r + 1], 12, -389564586);
    m = S(m, n, s, c, t[r + 2], 17, 606105819);
    c = S(c, m, n, s, t[r + 3], 22, -1044525330);
    s = S(s, c, m, n, t[r + 4], 7, -176418897);
    n = S(n, s, c, m, t[r + 5], 12, 1200080426);
    m = S(m, n, s, c, t[r + 6], 17, -1473231341);
    c = S(c, m, n, s, t[r + 7], 22, -45705983);
    s = S(s, c, m, n, t[r + 8], 7, 1770035416);
    n = S(n, s, c, m, t[r + 9], 12, -1958414417);
    m = S(m, n, s, c, t[r + 10], 17, -42063);
    c = S(c, m, n, s, t[r + 11], 22, -1990404162);
    s = S(s, c, m, n, t[r + 12], 7, 1804603682);
    n = S(n, s, c, m, t[r + 13], 12, -40341101);
    m = S(m, n, s, c, t[r + 14], 17, -1502002290);
    c = S(c, m, n, s, t[r + 15], 22, 1236535329);
    s = d(s, c, m, n, t[r + 1], 5, -165796510);
    n = d(n, s, c, m, t[r + 6], 9, -1069501632);
    m = d(m, n, s, c, t[r + 11], 14, 643717713);
    c = d(c, m, n, s, t[r], 20, -373897302);
    s = d(s, c, m, n, t[r + 5], 5, -701558691);
    n = d(n, s, c, m, t[r + 10], 9, 38016083);
    m = d(m, n, s, c, t[r + 15], 14, -660478335);
    c = d(c, m, n, s, t[r + 4], 20, -405537848);
    s = d(s, c, m, n, t[r + 9], 5, 568446438);
    n = d(n, s, c, m, t[r + 14], 9, -1019803690);
    m = d(m, n, s, c, t[r + 3], 14, -187363961);
    c = d(c, m, n, s, t[r + 8], 20, 1163531501);
    s = d(s, c, m, n, t[r + 13], 5, -1444681467);
    n = d(n, s, c, m, t[r + 2], 9, -51403784);
    m = d(m, n, s, c, t[r + 7], 14, 1735328473);
    c = d(c, m, n, s, t[r + 12], 20, -1926607734);
    s = g(s, c, m, n, t[r + 5], 4, -378558);
    n = g(n, s, c, m, t[r + 8], 11, -2022574463);
    m = g(m, n, s, c, t[r + 11], 16, 1839030562);
    c = g(c, m, n, s, t[r + 14], 23, -35309556);
    s = g(s, c, m, n, t[r + 1], 4, -1530992060);
    n = g(n, s, c, m, t[r + 4], 11, 1272893353);
    m = g(m, n, s, c, t[r + 7], 16, -155497632);
    c = g(c, m, n, s, t[r + 10], 23, -1094730640);
    s = g(s, c, m, n, t[r + 13], 4, 681279174);
    n = g(n, s, c, m, t[r], 11, -358537222);
    m = g(m, n, s, c, t[r + 3], 16, -722521979);
    c = g(c, m, n, s, t[r + 6], 23, 76029189);
    s = g(s, c, m, n, t[r + 9], 4, -640364487);
    n = g(n, s, c, m, t[r + 12], 11, -421815835);
    m = g(m, n, s, c, t[r + 15], 16, 530742520);
    c = g(c, m, n, s, t[r + 2], 23, -995338651);
    s = v(s, c, m, n, t[r], 6, -198630844);
    n = v(n, s, c, m, t[r + 7], 10, 1126891415);
    m = v(m, n, s, c, t[r + 14], 15, -1416354905);
    c = v(c, m, n, s, t[r + 5], 21, -57434055);
    s = v(s, c, m, n, t[r + 12], 6, 1700485571);
    n = v(n, s, c, m, t[r + 3], 10, -1894986606);
    m = v(m, n, s, c, t[r + 10], 15, -1051523);
    c = v(c, m, n, s, t[r + 1], 21, -2054922799);
    s = v(s, c, m, n, t[r + 8], 6, 1873313359);
    n = v(n, s, c, m, t[r + 15], 10, -30611744);
    m = v(m, n, s, c, t[r + 6], 15, -1560198380);
    c = v(c, m, n, s, t[r + 13], 21, 1309151649);
    s = v(s, c, m, n, t[r + 4], 6, -145523070);
    n = v(n, s, c, m, t[r + 11], 10, -1120210379);
    m = v(m, n, s, c, t[r + 2], 15, 718787259);
    c = v(c, m, n, s, t[r + 9], 21, -343485551);
    s = _(s, f);
    c = _(c, j);
    m = _(m, O);
    n = _(n, $)
}
return [s, c, m, n]
}
function u(t) {
var i, r = "";
for (i = 0; i < t.length * 32; i += 8) {
    r += String.fromCharCode(t[i >> 5] >>> i % 32 & 255)
}
return r
}
function b(t) {
var i, r = [];
r[(t.length >> 2) - 1] = void 0;
for (i = 0; i < r.length; i += 1) {
    r[i] = 0
}
for (i = 0; i < t.length * 8; i += 8) {
    r[i >> 5] |= (t.charCodeAt(i / 8) & 255) << i % 32
}
return r
}
function L(t) {
return u(o(b(t), t.length * 8))
}
function h(t, i) {
var r, f = b(t),
j = [],
O = [],
$;
j[15] = O[15] = void 0;
if (f.length > 16) {
    f = o(f, t.length * 8)
}
for (r = 0; r < 16; r += 1) {
    j[r] = f[r] ^ 909522486;
    O[r] = f[r] ^ 1549556828
}
$ = o(j.concat(b(i)), 512 + i.length * 8);
return u(o(O.concat($), 512 + 128))
}
function y(t) {
var i = "0123456789abcdef",
r = "",
f, j;
for (j = 0; j < t.length; j += 1) {
    f = t.charCodeAt(j);
    r += i.charAt(f >>> 4 & 15) + i.charAt(f & 15)
}
return r
}
function I(t) {
return unescape(encodeURIComponent(t))
}
function E(t) {
return L(I(t))
}
function D(t) {
return y(E(t))
}
function q(t, i) {
return h(I(t), I(i))
}
function l(t, i) {
return y(q(t, i))
}
function md5(t, i, r) {
if (!i) {
    if (!r) {
        return D(t)
    } else {
        return E(t)
    }
}
if (!r) {
    return l(i, t)
} else {
    return q(i, t)
}
}

参考:官网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值