Java调用js方法
java调用js方法分三种:(从jdk1.6开始java支持了调用脚本)
一.调用java代码内部编写的js方法
简单示例:
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class js {
public static void main(String[] args) throws Exception { // 获得一个JavaScript脚本引擎
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
//执行脚本
engine.eval("function test(p){return 'this is test js in java,'+p}");
//转化成父类(Invocable),因为ScriptEngine中没有调用js的方法
Invocable inv = (Invocable) engine;
//调用脚本得到返回值
String value = (String)inv.invokeFunction("test","我是一个参数");
System.out.println(value);
}
}
二.调用外部js文件中的方法
又细分为:调用本地js文件
外网j s文件(也就是网页中嵌入的j s脚本文件)
简单示例:
1.调用本地js文件
实现原理:通过File文件得到js的文件流,然后放入engine.eval()方法中,其他的都和第一种原理一致;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class js2 {
public static void main(String[] args) throws Exception { ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
//加载一个文件
File f=new File("./WebRoot/js/t.js");
Reader r=new InputStreamReader(new FileInputStream(f));
//把Reader放入eval中(读者可以去API看一下,重载了很多的eval()方法)
engine.eval(r);
Invocable inv = (Invocable) engine;
String value = (String)inv.invokeFunction("test","我是一个参数");
System.out.println(value);
}
}
注:外部的js(./WebRoot/js/t.js)文件内容为:
function test(p){
return'调用了外部js方法 '+p;
}
简单示例:
2.调用外网js文件
实现原理:通过解析HttpUrlConnection类得到JSP页面内容,然后通过正则表达式匹配js 脚本路径,然后通过HttpUrlConnection访问js文件,得到Reader,其他原理同上import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import https://www.wendangku.net/doc/5c13416322.html,.HttpURLConnection;
import https://www.wendangku.net/doc/5c13416322.html,.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class js3 {
public static void main(String[] args) throws Exception { //构造一个脚本器
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
String url="http://localhost/Test";
String html=UrlUtil.getHtml(url);
//使用正则匹配js文件路径
String js=getTextZZ(html, "