如何把java代码嵌入到javascript中

怎么能javascript中的值放在java中用啊,高手指点下
2025-04-13 10:38:46
推荐回答(2个)
回答1:

随着java6.0的出现,向java嵌入javascript脚本变的特别容易。java6引入了一个新的javax.script包,为脚本化语言提供了一个通用接口。

java中嵌入javascript脚本的思路:
1.取得脚本解释器的管理器Manager
2.从管理器中取得js的解释器实例ScriptEngine
3.取得存储javascript变量的Bindings实例
4.把一个java.io.Reader流及Bindings传递给ScriptEngine的eval()方法,从而运行存储在外部文件中的脚本。eval()方法返回脚本运行结果,如果执行中发生错误,会抛出ScriptException异常。
例:运行javascript脚本的一个java程序import java.io.*; import javax.script.Bindings; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class RunScript { public static void main(String[] args) throws IOException{ ScriptEngineManager scriptManager = new ScriptEngineManager();//得到解释器的管理器,里面有很多种脚本解释器 ScriptEngine js = scriptManager.getEngineByExtension("js");//从管理器中获取js的解释器 //定义我们要运行的脚本文件 String filename = null; //通过解释器来获得存储javascript变量的Bindings的实例,使它们提供给脚本。 Bindings bindings = js.createBindings(); //处理参数,参数是定义的脚本的变量。参数可能包括-Dname/value对。我们要进行处理,任何参数不能以‘-D’为文件名开始 for(int i = 0;i
例:一个解释JavaScript表达式的Java配置文件工具
import javax.script.*; import java.util.*; import java.io.*; //这个类像java.util.Properties ,但是允许属性值执行javascript表达式 public class Configuration { Map defaults = new HashMap(); //在map中获取和设置值的方法 public Object get(String key){ return defaults.get(key); } public void put(String key,Object value){ defaults.put(key, value); } //从map的name/value对中获取初始化内容。如果一个值在大括号内,表示是一个javascript脚本,计算它 public void load(String filename) throws IOException,ScriptException{ //获得javascript编译器 ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByExtension("js"); //使用我们的name/value对(即javascript变量) Bindings bindings = new SimpleBindings(defaults); //创建一个变量,用于存放脚本执行的内容 ScriptContext context = new SimpleScriptContext(); //设置那些Bindings 在Context 中,使它们可读。但这样的变量定义的脚本不要放入我们的Map中 context.setBindings(bindings, ScriptContext.GLOBAL_SCOPE); BufferedReader in = new BufferedReader(new FileReader(filename)); String line; while((line=in.readLine())!=null){ line = line.trim(); if(line.length()==0) continue;//跳过空行 if(line.charAt(0)=='#')continue;//跳过命令 int pos = line.indexOf(":"); if(pos == -1){ throw new IllegalArgumentException("syntax:"+line); } String name = line.substring(0,pos).trim(); String value= line.substring(pos+1).trim(); char firstchar = value.charAt(0); int len = value.length(); char lastchar = value.charAt(len-1); if(firstchar=='"'&&lastchar=='"'){ //双引号引用的值为字符串 defaults.put(name, value.substring(1,len-1)); }else if(Character.isDigit(firstchar)){ //如果开始是一个数字 try{ double d = Double.parseDouble(value); defaults.put(name, value); }catch (NumberFormatException e) { //没有数字,是一个string defaults.put(name, value); } }else if("true".equals(value)){//处理布尔值 defaults.put(name,Boolean.TRUE); }else if("false".equals(value)){ defaults.put(name, Boolean.FALSE); }else if("null".equals(value)){//处理null值 defaults.put(name, null); }else if(firstchar=='{'&&lastchar=='}'){ //如果值是在一对大括号之内,则执行javascript代码 String script = value.substring(1,len-1); Object result = engine.eval(script,context); defaults.put(name, result); }else{ //其它情况,刚好是一个字符串 defaults.put(name, value); } } } //一个简单的类的测试程序 public static void main(String[] args) throws IOException,ScriptException{ Configuration defaults = new Configuration(); defaults.load(args[0]); Set> entryset = defaults.defaults.entrySet(); for(Map.Entry entry:entryset){ System.out.printf("%s:%s%n",entry.getKey(),entry.getValue()); } } } 资料来源:javaeye,参考: http://www.javaeye.com/topic/348160

回答2:

这是不可以的。javascript是在客户端运行的。JAVA是运行于服务器端的。但是你可以使用AJAX向服务器发送请求。