Java调用某一js文件中的方法,执行并返回结果
来源:互联网 发布:种族歧视知乎 编辑:程序博客网 时间:2024/06/07 02:01
Java 调用某一 js 文件中的方法,获得执行结果
import javax.script.Invocable;import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;import java.net.ConnectException;import java.net.HttpURLConnection;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;/** * 调用js文件中的某一函数,处理数据 * * @param code 需要处理的数据 * @param JsURL js文件的url * @param functionName 调用的js文件中的函数名 * * @return newCode 被js文件中的函数处理后的新的数据 * */ public static String processDataViaJs(String code ,String JsURL,String functionName ) throws Exception { ScriptEngineManager manager = new ScriptEngineManager(); String newCode = ""; InputStreamReader inputStreamReader = null; ScriptEngine engine = manager.getEngineByName("javascript"); try { URL url = new URL(JsURL); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestProperty("Content-Type", "text/html"); inputStreamReader = getInputContent("GET", null, conn);//获取js内容 } catch (ConnectException ce) { ce.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } engine.eval(inputStreamReader); if (engine instanceof Invocable) { Invocable invoke = (Invocable) engine; newCode = (String) invoke.invokeFunction(functionName, code);// 调用对应方法,并传入 //1个参数:需要处理的 字符串符串 } inputStreamReader.close(); return newCode; }/** * * 通过流获取返回内容 */private static InputStreamReader getInputContent(String requestMethod, String outputStr, HttpURLConnection conn) throws ProtocolException, IOException, UnsupportedEncodingException { // (封装的http请求方法) 需要调用的方法 conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false); // 设置请求方式(GET/POST) conn.setRequestMethod(requestMethod); // 当outputStr不为null时向输出流写数据 if (null != outputStr) { OutputStream outputStream = conn.getOutputStream(); // 注意编码格式 outputStream.write(outputStr.getBytes("UTF-8")); outputStream.close(); } // 从输入流读取返回内容 InputStream inputStream = conn.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader( inputStream, "UTF-8"); return inputStreamReader; }
例子:
下面说一个我在实际开发中遇到的例子,在做模拟登陆时,某网站需要进行对姓名,密码,验证码等的加密,加密后的数据作为参数才能进行登录。而加密方法写在某一js文件中,现需要调用该发方法处理需要加密的字符串。具体如下所示:
注:具体url的ip部分已用*代替,涉及到隐私,不影响阅读
/** * 执行md5.js文件中的MD5函数 * * @param code * 原始字符串 * @return 进行加密操作后的字符串 * */ public static String md5Special(String code) throws Exception { ScriptEngineManager manager = new ScriptEngineManager(); String newCode = ""; InputStreamReader inputStreamReader = null; ScriptEngine engine = manager.getEngineByName("javascript"); try { URL url = new URL("http://211.***.***.193/*****/js/md5.js"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestProperty("Content-Type", "text/html"); inputStreamReader = getInputContent("GET", null, conn); } catch (ConnectException ce) { ce.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } engine.eval(inputStreamReader); if (engine instanceof Invocable) { Invocable invoke = (Invocable) engine; newCode = (String) invoke.invokeFunction("md5", code);// 调用md5方法,并传入1个参数 } inputStreamReader.close(); return newCode; } /** * * 通过流获取返回内容 */private static InputStreamReader getInputContent(String requestMethod, String outputStr, HttpURLConnection conn) throws ProtocolException, IOException, UnsupportedEncodingException { // (封装的http请求方法) 需要调用的方法 conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false); // 设置请求方式(GET/POST) conn.setRequestMethod(requestMethod); // 当outputStr不为null时向输出流写数据 if (null != outputStr) { OutputStream outputStream = conn.getOutputStream(); // 注意编码格式 outputStream.write(outputStr.getBytes("UTF-8")); outputStream.close(); } // 从输入流读取返回内容 InputStream inputStream = conn.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader( inputStream, "UTF-8"); return inputStreamReader; }
1 0
- Java调用某一js文件中的方法,执行并返回结果
- java调用linux中的shell脚本并返回执行结果
- Java调用cmd命令行并返回执行结果
- C#反射动态调用dll中的方法,并返回结果
- C#反射动态调用dll中的方法,并返回结果
- C#反射动态调用dll中的方法,并返回结果
- JavaScript中远程级联调用(RPC)java对象中的方法并返回结果
- java 执行命令行并打印返回结果
- Java调用命令行并获取执行结果
- Java调用命令行并获取执行结果
- Java调用命令行并获取执行结果
- Oracle存储过程中执行查询返回的结果集,并使用java代码调用【转】
- 如何在js调用java方法并取回返回值
- java 中调用window系统中的文件,或者执行命令(shell、.CMD、.EXE)并获取返回值
- java执行器框架执行任务并返回结果
- 安卓Service组件使用系列4:绑定service并调用service中的方法返回结果
- java 定时调用方法,有结果返回
- C#中添加三个线程同时启动执行某一方法,并依次调用某方法中的循环打印输。
- Machine learning-------------SVM(support vector machines)
- 练习1-12 编写一个程序,以每行一个单词的形式打印其输入
- asp.net AJAX控件“Sys未定义”之怪问题
- 深入理解计算机系统(三)之程序的机器级表示
- UVa 297 Quadtrees
- Java调用某一js文件中的方法,执行并返回结果
- java 进程 线程 线程状态转换
- html练习Flex布局
- Not-null property references a transient value - transient instance must be saved before current ope
- 自动化测试万能论
- spring error at ::0 can't find referenced pointcut解决办法
- C Tricks(八)—— 硬币和骰子的模拟
- Weka 3.8 无法打开package manager解决方法
- 第15课:spark streaming源码解读之No Receives彻底思考