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 ...
随机推荐
- phpmyadmin拿webshell
思路:就是利用mysql的一个日志文件.这个日志文件每执行一个sql语句就会将其执行的保存.我们将这个日志文件重命名为我们的shell.php然后执行一条sql带一句话木马的命令.然后执行菜刀连接之! ...
- Shiro简介(一)
1.shiro是一个安全验证框架,可以完成认证.授权.加密.会话管理.与Web集成.缓存等. Authentication:身份认证/登入 Authorization:权限验证.粗粒度权限指对某一 ...
- BZOJ2815 拓扑排序 + LCA
https://www.lydsy.com/JudgeOnline/problem.php?id=2815 作为一个DAG图,结点之间又有这么明显的等级之分,很容易想到的是拓扑排序. 但是不管是正向的 ...
- SQL语法基础之ALTER语句
SQL语法基础之ALTER语句 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看ALTER的帮助信息 mysql> ? ALTER Many help items fo ...
- slave have equal MySQL server UUIDs
在部署MySQL主从复制架构的时候,碰到了"Last_IO_Error: Fatal error: The slave I/O thread stops because master and ...
- 【JS】JavaScript中Null和undefind区别
1.undefined:只有一个值,及特殊的undefined.在使用var声明变量但未对其初始化时,这个变量的值是undefined,简言之,undefined就是表示变量申明了但未初始化时的值. ...
- js静态方法与实例方法定义,js回调方法定义
主要为了回调方法,随便把静态言法和实例方法也回顾一下. <script type="text/javascript"> var fun = { //下面是静态方法(第一 ...
- Spring boot中使用Mongodb
安装 使用Idea新建Spring boot工程时需要选择Mongodb 或者在工程中加入依赖 Maven: <dependency> <groupId>org.springf ...
- 如何在Mac上搭建自己的服务器——Nginx
1.安装Homebrew 打开终端,输入: ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/ ...
- vue-if与vue-show的区别
两者都是动态显示DOM元素 不同点: 1.使用方式 v-if是根据后面数据的真假,来判断DOM的添加删除等操作 v-show只是在修改元素的css样式(display属性值) 2.实现过程 v ...