js中可以调用java代码吗

JavaScript017

js中可以调用java代码吗,第1张

js不能直接调用java代码。

可以通过页面提交后台的方式,间接调用后台的服务java代码。

也可以通过ajax的方式,调用后台的服务java代码。

两种方式稍有差别,不过都是前后台的通信交互。

package p1

import java.util.Arrays

import java.util.LinkedList

public class Guy

{

public static void recursionSub ( LinkedList<int[]>list, int count, int[] array, int ind, int start, int... indexs )

{

start++

if (start >count - 1)

{

return

}

if (start == 0)

{

indexs = new int[array.length]

}

for ( indexs[start] = indindexs[start] <array.lengthindexs[start]++ )

{

recursionSub (list, count, array, indexs[start] + 1, start, indexs)

if (start == count - 1)

{

int[] temp = new int[count]

for ( int i = count - 1i >= 0i-- )

{

temp[start - i] = array[indexs[start - i]]

}

list.add (temp)

}

}

}

public static void main ( String[] args )

{

int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }

LinkedList<int[]>list = new LinkedList<int[]>()

recursionSub (list, 3, array, 0, -1)

for ( int[] strings : list )

{

System.out.println (Arrays.toString (strings))

}

}

}

要在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引用不    }

}