如何用java执行指定页面中的js代码

JavaScript020

如何用java执行指定页面中的js代码,第1张

要在java中执行js代码,首先明白,java不支持浏览器本身的方法。支持自定义的js方法,否则会报错

先新建一个js文件:jsss.js

内容如下:

function aa(a,b){    return a+b

}

然后在java中写代码:

public class ZipTest {

public static void main(String[] args) throws Exception {

ScriptEngineManager manager = new ScriptEngineManager()

ScriptEngine engine = manager.getEngineByName("js")

String jsFileName="G:\\javaPro\\zmwmcc\\WebRoot\\jsss.js"

FileReader reader = new FileReader(jsFileName)  // 执行指定脚本             engine.eval(reader)

if(engine instanceof Invocable) {

Invocable invoke = (Invocable)engine   // 调用merge方法,并传入两个参数

Double c = (Double)invoke.invokeFunction("aa", 2, 3)//调用了js的aa方法

System.out.println(c)

}

// engine.eval("alert(\"js alert\")")   // 不能调用浏览器中定义的js函数 // 错误,会抛出alert引用不    }

}

答:jsp中java代码可以写在js中。

示例如下:

<script type="text/javascript">

function check(){

var username=document.getElementById("username")

var username=document.getElementById("password")

//java代码块

<%

String sql="select * from Manger"

String user

String pass

ResultSet rs=DBHelper.query(sql)//sql代码已经写好在被的类中,此处为直接调用!!

while(rs.next()){

user=rs.getString("username")

pass=rs.getString("password")%>

if(username.value=="<%=user %>" &&passsword.value=="<%=pass%>")

{

return true

}else if(username.value==""|| password.value==""){

username.setCustomValidity("账号或密码不能为空")

return false

}else{

username.setCustomValidity("账号或密码错误,请从新输入")

return false

}

<%

}

%>

}

</script>

我们要在Java中执行JavaScriptMethods.js中的execute(s1,s2)方法,JavaScriptMethods.js文件内容如下:

function execute(s1, s2){

return s1 + s2

}

首先需要定义一个接口,这个接口中给出与要执行的JavaScript方法一样的方法签名,我们定义接口Methods,它的内容如下:

/**

* 接口中的方法签名必须与要执行的JavaScript方法一致

* @author yuncong

*

*/

public interface Methods {

public String execute(String s1,String s2)

}

然后,就可以用脚本引擎执行JavaScriptMethods.js中execute(s1,s2)方法了,具体内容写在下面的ExecuteScript类中的:

import java.io.FileReader

import javax.script.Invocable

import javax.script.ScriptEngine

import javax.script.ScriptEngineManager

public class ExecuteScript {

public static void main(String[] args) {

ScriptEngineManager manager = new ScriptEngineManager()

ScriptEngine engine = manager.getEngineByName("js")

try {

String path = ExecuteScript.class.getResource("").getPath()

System.out.println(path)

// FileReader的参数为所要执行的js文件的路径

engine.eval(new FileReader(path + "JavaScriptMethods.js"))

if (engine instanceof Invocable) {

Invocable invocable = (Invocable) engine

Methods executeMethod = invocable.getInterface(Methods.class)

System.out.println(executeMethod.execute("li", "yuncong"))

}

} catch (Exception e) {

e.printStackTrace()

}

}

}

运行ExecuteScript类,输出如下:

?

1

2

/C:/Users/yuncong/git/login/target/classes/executescript/

liyuncong