兄弟,这个挺简单的,因为Java6里边引入的脚本支持,其架构本身就很清晰简单,总的说来就那么几个接口和一个工厂实用类。Java的脚本主要有以下三个重要概念:
ScriptEngine:负责编译执行具体的脚本。
ScriptContext:脚本执行的上下文环境。
Bindings:与Java环境之间的参数绑定。
其构架关系,见下图:
对于你的需求,我简单写了一个例子,如下:
String script = "for(i=0i<names.lengthi++){print(names[i]+'\\n')}" //打印数组的JS代码
//jdk6自带了一个javascript脚本实现,是来自Mozilla的一个开源实现
ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript")
Compilable compilable = (Compilable) engine //这一步可以省略,某些脚本实现可能不支持
String[] names = new String[]{"pig","tiger","piger","family"}
Bindings bindings = engine.createBindings() //Local级别的Binding,Binding分为两种,局部和全局
bindings.put("names", names) //通过Bindings加入参数
CompiledScript compiledScript = compilable.compile(script) //解析编译脚本
compiledScript.eval(bindings) //执行脚本
输出结果:
pig
tiger
piger
family
----说明一下-----
也许你不是这个意思,但依我之见,在java里提到javascript,应该就是指Java的脚本支持。Java本身并没有脚本特性,它只写了一个框框,使用中需要具体的脚本引擎实现。因此,除了JavaScript, 理论上,Java可以支持任何脚本语言,只要有相应的实现。
但如果你指的客户端的JavaScript,即WEB页面上的JS,那就更简单了,只需要在JSP页面上生成相应的JS代码就行了,毕竟JSP最终只是一个Servlet类,用它来生成页面文件的HTML源码,同时,相应的JS代码也是用它来生成的。这个,你懂的。我觉得你的问题应该不是指这个,因为这个实在是太简单了。
public final class Java2JS{
public Java2JS()
{
}
public String getString()
{
String value = "Hi, Java2JS!"
return value//在JS中typeof value结果为string
}
public int getInt()
{
int value = 1
return value//在JS中typeof value结果为number
}
}
public class MainActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
WebView wv = (WebView) this.findViewById(R.id.webView1)
wv.addJavascriptInterface(new Java2JS(), "j2js")
WebSettings ws = wv.getSettings()
ws.setJavaScriptEnabled(true)
wv.loadUrl("http://ip:port/xx.html")
}
}
。。将list转换为json数据后直接赋值给js数组就可以。
json的格式可以是这样的
[0,1,2,3,4,5]
<%
stirng
str
=
"["
for(integer
i
:
list){
str
+=string.valueof(i)
}
str+="]"
%>
data
=
<%=str%>