有些情况下,需要java去调用js,groovy等脚本语言,传入参数获取脚本运行的结果。

js脚本例子:

function add(a,b){
return a + b + number;

  java代码的例子:

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; public class ExecuJs {
public static void main(String[] args) throws Exception { // 获取JS执行引擎
ScriptEngine se = new ScriptEngineManager().getEngineByName("javascript");
// 获取变量
Bindings bindings = se.createBindings();
bindings.put("number", 3);
se.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
Scanner sc = new Scanner(System.in);
while (sc.hasNextInt()) {
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println("输入的参数【" + a + "】 + 【" + b + "】");
se.eval(new FileReader("D:\\desk\\test.js"));
// 是否可调用
if (se instanceof Invocable) {
Invocable in = (Invocable) se;
Integer result = (Integer) in.invokeFunction("add", a, b);
System.out.println("获得的结果:" + result); } }

出于安全的考虑,最好是把js脚本中的内容先读取出来。判断内容中不能包含文件操作如move,delete等,不能执行activex等。 

这里边还有一个小的技巧。

     (Integer) in.invokeFunction("add", a, b),这里的add是js脚本的方法名子,a和b是参数。invokeFunction方法第二个参数是可变参数,如果我们写了一个通用方法,参数的个数也是不确定的,是由外部传入的。怎么才能把外部传入的参数作为invokeFunction的可变参数呢?

可变参数本质上就是数组,我们可以把外部传入的参数组成一个object数组,作为invokeFunction的可变参数传入即可。

import java.util.Arrays;

public class Main {

    public static void f(int... is ) {
System.out.println(Arrays.toString(is));
} public static void g(int[] is) {
System.out.println(Arrays.toString(is));
} public static void main(String... args) { //可以把String[] 变成String...
int[] a = new int []{1,2,3,4};
f(1,2,3,4);
f(a);
g(a);
} }

  运行的结果是一样的。

java调用js脚本的更多相关文章

  1. java调用js脚本语言

    在我们开发的过程中,可能有这么一种情况,在java中需要取调用js方法完成一些事情.那么什么时候可能出现这种情况呢.比如我们使用爬虫模拟登录别的网站,但有些网站前台使用js对密码进行了加密处理,那么就 ...

  2. Java调用Lua脚本(LuaJava使用、安装及Linux安装编译)

    依赖包(附件有下载): 包名 类型 操作系统 luajava-1.1.jar jar ALL libluajava-1.1.so .so linux luajava-1.1.dll .dll wind ...

  3. java调用python脚本并向python脚本传递参数

    1.安装Eclipse 先安装jdk,再安装Eclipse,成功后开始建立py_java项目,在这个项目的存储目录SRC下建立test包,在test包中New-Class,新建MyDemo类,建好完成 ...

  4. Java 调用 shell 脚本详解

    这一年的项目中,有大量的场景需要Java 进程调用 Linux的bash shell 脚本实现相关功能. 从之前的项目中拷贝的相关模块和网上的例子来看,有个别的“陷阱”造成调用shell 脚本在某些特 ...

  5. (转)java调用python脚本

    这篇博客旨在吐血分享今天遇到的java调用python脚本遇到的坑,折腾了3个多小时终于可以跑通了,代码超级短,但网上的好多资料都是抄来抄去的,很少有能够直接跑通的,尤其是针对你的python文件中用 ...

  6. iOS:在OC中调用JS脚本

    示例一:在webView中调用js脚本进行搜索 1.首先导入JavaScriptCore.framework这个框架 2.创建webView.设置代理.请求手机端百度 #import "Vi ...

  7. 通过Java调用Python脚本

    在进行开发的过程中,偶尔会遇到需要使用Java调用Python脚本的时候,毕竟Python在诸如爬虫,以及科学计算等方面具有天然的优势.最近在工作中遇到需要在Java程序中调用已经写好的Python程 ...

  8. java调用shell脚本小demo

    复制指定文件cpp.sh: [root@localhost soft]# vim cpp.sh#!/bin/bash name="$1"\cp /home/soft/test/${ ...

  9. java中调用js脚本

    JDK1.6加入了对Script(JSR223)的支持.这是一个脚本框架,提供了让脚本语言来访问Java内部的方法.你可以在运行的时候找到脚本引擎,然后调用这个引擎去执行脚本.这个脚本API允许你为脚 ...

随机推荐

  1. python之分支和循环

    Day 1-night 三元操作符 语法:a=x if 条件 else y  即:当条件为True时,a的值赋值为x,否则赋值为y eg:small=x if x<y else y <=& ...

  2. centos7防火墙相关

    selinux(保护文件安全) 安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统. SE ...

  3. 读HTTP权威指南的体会

    国庆期间,我读了HTTP权威指南一书,现在我把总节为大家讲一下: Web 浏览器.服务器和相关的Web 应用程序都是通过HTTP 相互通信的.HTTP 是 现代全球因特网中使用的公共语言. 是对HTT ...

  4. hibernate配置和映射文件

    映射文件 <?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping ...

  5. axios 设置接口retry次数与间隔时间

    /设置全局的请求次数,请求的间隙 axios.defaults.retry = 3; axios.defaults.retryDelay = 2000; axios.interceptors.resp ...

  6. Linux配置Tomcat8080端口 远程无法访问解决办法

    是因为Linux的防火墙没有开放8080端口 解决办法: /sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT #开启8080端口  /sbin/ ...

  7. 【LeetCode-86】分隔链表

    [题目描述] 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前. 你应当保留两个分区中每个节点的初始相对位置. 示例: 输入: head = 1-& ...

  8. Qt读写Json格式配置文件

    头文件Config.h #pragma once #include <QVariantMap> class Config { public: Config(const QString &a ...

  9. 2019巅峰极客CTF-web1(LOL英雄联盟)

    今晚有空 以后随缘写博客了 好好沉淀 web1当天做出的队伍很少 其实不难    折腾到最后就差一步  可惜    0x01 读取文件 截图没留了 只留了代码部分. 有个页面  有上传和下载功能 起初 ...

  10. elasticsearch文档冲突

    https://www.elastic.co/guide/cn/elasticsearch/guide/current/optimistic-concurrency-control.html当我们之前 ...