import java.io.*;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.ppcredit.common.util.file.FileUtil; /**
* 公共的JS脚本引擎工具类
*/
public class CommonScriptEngineUtil {
private static Logger log = LoggerFactory.getLogger(CommonScriptEngineUtil.class); // 日志 private static ScriptEngine engine = (new ScriptEngineManager()).getEngineByName("javascript"); private static Invocable invoke = null; /**
* 调用js中的函数
* @param jsName js文件名称
* @param functionName 调用的函数名称
* @param param 调用js函数的参数
* @return
*/
public static String invokeJSFuntion(String jsName, String functionName, String param){
initJS(jsName);
synchronized (invoke) {
  String result = param;
  if(invoke != null){
  try {
   long startTime = System.currentTimeMillis();
  String c = (String)invoke.invokeFunction(functionName, param);
  long endTime = System.currentTimeMillis();
  log.info("invokeJSFuntion 耗时 >>>>" + (endTime-startTime));
  result = c;
  } catch (NoSuchMethodException e) {
   log.error(e.getMessage());
  } catch (ScriptException e) {
   //如果出错就重新加载
   initJS(jsName);
   log.error(e.getMessage());
   }
  }
  return result;
}
} private static void initJS(String jsName){
String basePath = FileUtil.getAppPath(CommonScriptEngineUtil.class);
String jsFileName = basePath + "/resources/" + jsName; // 读取js文件
InputStreamReader reader = null;
try {
reader =new InputStreamReader(new FileInputStream(jsFileName),"UTF-8");
engine.eval(reader);
if(engine instanceof Invocable) {
invoke = (Invocable)engine;
}
} catch (FileNotFoundException e) {
log.error(e.getMessage());
} catch (ScriptException e) {
log.error(e.getMessage());
} catch (UnsupportedEncodingException e) {
log.error(e.getMessage());
} finally {
if(reader != null){
try {
reader.close();
} catch (IOException e) {
log.error(e.getMessage());
}
}
}
} public static void main(String[] args){
String enc = invokeJSFuntion("aes.js","valAesEncryptSet","123456");
System.out.println(enc);
}
}

Java中通过脚本引擎调用js函数的更多相关文章

  1. java 脚本引擎执行js

    为用到时,使用方便直接保存一下代码 package com.xzlf.reflectTest; import java.io.BufferedReader; import java.io.FileIn ...

  2. 在动态THML语句中调用JS函数传递带空格参数的问题

    刚刚遇到一个问题,调用js函数的参数里带空格,造成调用失败的问题.   部分代码如下: html+="<div><a href=javascript:confirm(&qu ...

  3. VC与JavaScript交互(二) --- 调用JS函数

    这一章,我们来动手实践VC调用JS函数. 我们动手写一个HTML,其中包含这样一段JS代码: //[html] <script type="text/javascript"& ...

  4. 转:在 C# 中使用 P/Invoke 调用 Mupdf 函数库显示 PDF 文档

    在 C# 中使用 P/Invoke 调用 Mupdf 函数库显示 PDF 文档 一直以来,我都想为 PDF 补丁丁添加一个 PDF 渲染引擎.可是,目前并没有可以在 .NET 框架上运行的免费 PDF ...

  5. <a>标签中的href如何调用js代码

    在HTML中,<a>标签的href属性用于指定超链接的目标的URL.在所有浏览器中,链接的默认外观是: 未被访问的链接带有下划线而且是蓝色的 已被访问的链接带有下划线而且是紫色的 活动链接 ...

  6. js,JavaScript,a标签onclick传递参数不对,A标签调用js函数写法总结

    错误示例: <a href="javascript:waterLineEdit(${goods.goods_id})" >修改 </a> <!-- 浏 ...

  7. 转:标签中的href如何调用js

      在HTML中,<a>标签的href属性用于指定超链接的目标的URL.在所有浏览器中,链接的默认外观是: 未被访问的链接带有下划线而且是蓝色的 已被访问的链接带有下划线而且是紫色的 活动 ...

  8. java中URL 的编码和解码函数

    java中URL 的编码和解码函数java.net.URLEncoder.encode(String s)和java.net.URLDecoder.decode(String s);在javascri ...

  9. [模拟回调] demo1模拟用字符串调用js函数 demo2模拟springmvc controller回调页面js函数

    demo1. 模拟用字符串调用js 函数 function dataQuery() { var strFun = "testCallBack"; var strParam = &q ...

随机推荐

  1. DB9 ------ 接口定义

    下图是母座和公座的接口定义: 特别提醒:以上是公座和母座的接口定义,如果是串口线,RXD就变成TXD,以此类推.

  2. 【优秀的Sketch插件】PaintCode for Sketch for Mac 1.1

    [简介] PaintCode for Sketch 是一款结合了PaintCode和Sketch两款软件强大功能的插件,今天和大家分享最新的1.1版本,支持Sketch 40+版本,这个插件能够让你的 ...

  3. jvm_tool jconsole/ jprofiler/ JProbe/ VirtualVm/ TPV/ YourKit/ ITCAM/ MAT/ MDD4J

    S 学习jvm,关于MAT an internal error occurred during:"Parsing heap dump" from问题 https://www.cnb ...

  4. HDFS 上文件块的副本数设置

    一.使用 setrep 命令来设置 # 设置 /javafx-src.zip 的文件块只存三份 hadoop fs -setrep /javafx-src.zip 二.文件块在磁盘上的路径 # 设置的 ...

  5. netty的数据通信之心跳检测

    问题1:我们想实现客户端和服务端建立连接之后,5秒钟之后如果没有数据传输就关闭与客户端的连接. 解决办法:在服务端加上下面一条代码 ch.pipeline().addLast(new ReadTime ...

  6. Hadoop记录-Hadoop集群重要监控指标

    通用监控指标 对于每个RPC服务应该监控 RpcProcessingTimeAvgTime(PRC处理的平均时间) 通常hdfs在异常任务突发大量访问时,这个参数会突然变得很大,导致其他用户访问hdf ...

  7. c/c++gdb下和发布版本下输出地址不同

    相差4字节 相差8个字节 原因: 这4个字节是优化掉了,64位操作系统,函数传参通过寄存器,减少了栈的使用 debug模式下,abc的地址都存下来了.

  8. Shell编程(八)每隔N分钟执行某脚本

    sudo crontab -e

  9. 流媒体技术学习笔记之(十八)互联网草案HTTP直播流2017年5月

    原文地址:https://tools.ietf.org/html/draft-pantos-http-live-streaming-23 1.HTTP直播流介绍 HTTP实时流媒体提供了一个可靠的,成 ...

  10. HTTP.SYS远程执行代码漏洞分析 (MS15-034 )

    写在前言:   在2015年4月安全补丁日,微软发布了11项安全更新,共修复了包括Microsoft Windows.Internet Explorer.Office..NET Framework.S ...