Java中通过脚本引擎调用js函数
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函数的更多相关文章
- java 脚本引擎执行js
为用到时,使用方便直接保存一下代码 package com.xzlf.reflectTest; import java.io.BufferedReader; import java.io.FileIn ...
- 在动态THML语句中调用JS函数传递带空格参数的问题
刚刚遇到一个问题,调用js函数的参数里带空格,造成调用失败的问题. 部分代码如下: html+="<div><a href=javascript:confirm(&qu ...
- VC与JavaScript交互(二) --- 调用JS函数
这一章,我们来动手实践VC调用JS函数. 我们动手写一个HTML,其中包含这样一段JS代码: //[html] <script type="text/javascript"& ...
- 转:在 C# 中使用 P/Invoke 调用 Mupdf 函数库显示 PDF 文档
在 C# 中使用 P/Invoke 调用 Mupdf 函数库显示 PDF 文档 一直以来,我都想为 PDF 补丁丁添加一个 PDF 渲染引擎.可是,目前并没有可以在 .NET 框架上运行的免费 PDF ...
- <a>标签中的href如何调用js代码
在HTML中,<a>标签的href属性用于指定超链接的目标的URL.在所有浏览器中,链接的默认外观是: 未被访问的链接带有下划线而且是蓝色的 已被访问的链接带有下划线而且是紫色的 活动链接 ...
- js,JavaScript,a标签onclick传递参数不对,A标签调用js函数写法总结
错误示例: <a href="javascript:waterLineEdit(${goods.goods_id})" >修改 </a> <!-- 浏 ...
- 转:标签中的href如何调用js
在HTML中,<a>标签的href属性用于指定超链接的目标的URL.在所有浏览器中,链接的默认外观是: 未被访问的链接带有下划线而且是蓝色的 已被访问的链接带有下划线而且是紫色的 活动 ...
- java中URL 的编码和解码函数
java中URL 的编码和解码函数java.net.URLEncoder.encode(String s)和java.net.URLDecoder.decode(String s);在javascri ...
- [模拟回调] demo1模拟用字符串调用js函数 demo2模拟springmvc controller回调页面js函数
demo1. 模拟用字符串调用js 函数 function dataQuery() { var strFun = "testCallBack"; var strParam = &q ...
随机推荐
- DB9 ------ 接口定义
下图是母座和公座的接口定义: 特别提醒:以上是公座和母座的接口定义,如果是串口线,RXD就变成TXD,以此类推.
- 【优秀的Sketch插件】PaintCode for Sketch for Mac 1.1
[简介] PaintCode for Sketch 是一款结合了PaintCode和Sketch两款软件强大功能的插件,今天和大家分享最新的1.1版本,支持Sketch 40+版本,这个插件能够让你的 ...
- 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 ...
- HDFS 上文件块的副本数设置
一.使用 setrep 命令来设置 # 设置 /javafx-src.zip 的文件块只存三份 hadoop fs -setrep /javafx-src.zip 二.文件块在磁盘上的路径 # 设置的 ...
- netty的数据通信之心跳检测
问题1:我们想实现客户端和服务端建立连接之后,5秒钟之后如果没有数据传输就关闭与客户端的连接. 解决办法:在服务端加上下面一条代码 ch.pipeline().addLast(new ReadTime ...
- Hadoop记录-Hadoop集群重要监控指标
通用监控指标 对于每个RPC服务应该监控 RpcProcessingTimeAvgTime(PRC处理的平均时间) 通常hdfs在异常任务突发大量访问时,这个参数会突然变得很大,导致其他用户访问hdf ...
- c/c++gdb下和发布版本下输出地址不同
相差4字节 相差8个字节 原因: 这4个字节是优化掉了,64位操作系统,函数传参通过寄存器,减少了栈的使用 debug模式下,abc的地址都存下来了.
- Shell编程(八)每隔N分钟执行某脚本
sudo crontab -e
- 流媒体技术学习笔记之(十八)互联网草案HTTP直播流2017年5月
原文地址:https://tools.ietf.org/html/draft-pantos-http-live-streaming-23 1.HTTP直播流介绍 HTTP实时流媒体提供了一个可靠的,成 ...
- HTTP.SYS远程执行代码漏洞分析 (MS15-034 )
写在前言: 在2015年4月安全补丁日,微软发布了11项安全更新,共修复了包括Microsoft Windows.Internet Explorer.Office..NET Framework.S ...