使用类加载器加载JS文件需要吧JS文件放到resources目录下
1 package test;
2
3 import org.json.JSONObject;
4
5 import javax.script.Invocable;
6 import javax.script.ScriptEngine;
7 import javax.script.ScriptEngineManager;
8 import java.io.FileReader;
9 import java.io.InputStream;
10 import java.io.InputStreamReader;
11 import java.util.HashMap;
12 import java.util.Iterator;
13 import java.util.Map;
14
15 public class ExecuteJS {
16
17 public static void main(String[] args) {
18 try {
19 // 调用提取的方法
20 String url = "https://xxxxx";
21 String param = "a=13122222222&b=21000";
22 Map
23
24 // 处理结果27 System.out.println(result);
28
29 } catch (Exception e) {
30 e.printStackTrace();
31 }
32 }
33
34 /**
35 * 执行 JavaScript 文件中的函数并返回结果
36 *
37 * @param url 请求的 URL
38 * @param param 请求的参数
39 * @return 包含结果的 JSONObject
40 * @throws Exception 如果执行过程中出现异常
41 */
42 public static Map
43 // 获取 JavaScript 引擎
44 String jsFileName = "hlsParameterEncryption.js";
45 ScriptEngineManager manager = new ScriptEngineManager();
46 ScriptEngine engine = manager.getEngineByName("JavaScript");
47
48 // 使用类加载器加载 JS 文件
49 InputStream inputStream = ExecuteJS.class.getClassLoader().getResourceAsStream(jsFileName);
50 if (inputStream == null) {
51 throw new RuntimeException("File not found: " + jsFileName);
52 }
53 engine.eval(new InputStreamReader(inputStream));
54
55 // 创建参数对象(使用 Map 模拟 JS 对象)
56 Map
57 params.put("url", url);
58 params.put("param", param);
59
60 // 转换为 Invocable 调用函数
61 Invocable invocable = (Invocable) engine; // ajaxDirect 是js文件内的方法,params是该方法接受的参数
62 String result = (String) invocable.invokeFunction("ajaxDirect", params);
63
64 // 将结果转换为 JSONObject
65 JSONObject jsonObject = new JSONObject(result);
66
67 // 将 JSONObject 转换为 Map
68 Map
69 Iterator
70 while (keys.hasNext()) {
71 String key = keys.next();
72 map.put(key, jsonObject.optString(key, null));
73 }
74
75 return map;
76 }
77 }