要在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