问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何把java代码嵌入到javascript中

发布网友 发布时间:2022-04-23 07:47

我来回答

2个回答

热心网友 时间:2022-04-23 02:56

随着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<args.length;i++){ String arg = args[i]; if(arg.startsWith("-D")){//如果参数是以“-D”开头,则进行处理 int pos = arg.indexOf('='); if(pos == -1) usage(); String name=arg.substring(2,pos); String value= arg.substring(pos+1); //注意:我们定义的所有的变量是字符串,如果必要的话,我们可以通过java.lang.Number ,一个java.lang.Boolean,任何Java对象或NULL,将脚本转换为其他类型。 bindings.put(name, value);//脚本中的变量存入bindings实例中 }else{ if(filename!=null)usage(); filename=arg; } } //这里是为了确保我们得到了一个文件的参数。 if(filename==null){ usage(); } //增加一个具有约束力的使用特殊的保留变量名称,告诉脚本引擎的文件的名称将执行。这使它能够提供更好的错误信息 bindings.put(ScriptEngine.FILENAME, filename); //读取文件的流 Reader in = new FileReader(filename); try{ //执行脚本并取得结果。注意in就相当于js中的脚本,而bindings是脚本执行所需要的变量 Object result = js.eval(in,bindings); System.out.println(result); }catch(ScriptException ex){ //执行过程中出异常则显示一个错误信息 System.out.println(ex); } } static void usage(){ System.err.println("Usage: java RunScript[-Dname=value...] script.js"); System.exit(1);//异常退出程序。如果正常退出程序用System.exit(0); } } 这段代码中所创建的Bindings对象不是静态的,JavaScript脚本所创建的所有的变量都存储在这里。下面是一个脚本化Java的更加实用的例子。它将它的Bindings对象存储在一个具有较高的作用域的ScriptContext对象中,以便可以读取其变量,但是新的变量就不存储到Binhdings对象中。这个例子实现了一个简单的配置文件工具,即一个文本文件,用来定义名字/值对,可以通过这里定义的Configuration类来查询它们。值可能是字符串、数字或布尔值,并且,如果一个值包含在花括号中,那么它就会传递给一个JavaScript解释器去计算。java.util.Map对象保存了这些包装在一个SimpleBindings对象中的值,这样一来,JavaScript解释器也可以访问同一个文件中定义的其他变量的值。

例:一个解释JavaScript表达式的Java配置文件工具
import javax.script.*; import java.util.*; import java.io.*; //这个类像java.util.Properties ,但是允许属性值执行javascript表达式 public class Configuration { Map<String,Object> defaults = new HashMap<String,Object>(); //在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<Map.Entry<String, Object>> entryset = defaults.defaults.entrySet(); for(Map.Entry<String, Object> entry:entryset){ System.out.printf("%s:%s%n",entry.getKey(),entry.getValue()); } } } 资料来源:javaeye,参考: http://www.javaeye.com/topic/348160

热心网友 时间:2022-04-23 04:14

这是不可以的。javascript是在客户端运行的。JAVA是运行于服务器端的。但是你可以使用AJAX向服务器发送请求。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
君主立宪制有哪些特点 ?君主立宪制的特点是什么君主立宪制国家有几个 谁能帮我下载昵图网的一张图片? 300-600÷5的脱式计算图片? 交过几个男朋友算多?男的进! 25岁交过三个男朋友算多吗?现在都不敢再交男朋友了,好害怕的感觉_百度... 在领结婚证前买的房,房产证是2个人的名字,现在想买第二套房,领了结婚... 笔记本电脑使用中卡住,等恢复后无法连接网络 如何将未分配的200多G合并到C盘?请各位大侠详细指导,感激万分!!! 50G的C盘剩下多少空间的好 年利率百分之9.98是多少 java 嵌入技术的历史 年利率10.8%日利息是多少 java中可以嵌入哪些语言啊?? 年利率百分之10.700000是多少? 年利息率10.8%很高吗? JAVA语言的优缺点有哪些?嵌入式的JAVA开发平台是什么? 年利息10.80%是高还是低 java算是嵌入式语言吗?什么是嵌入式语言~ 年利率10.80%是多少利息 贷款8万 年利率10.8%怎么算,利息有多少 wps 如何删除未打印完但不想打印的文件? 年利率10.8%是多少 wps office如何取消系统打印任务? 年利率10.8%怎么算利息 在居委会登记了社保,但户口要转到另一个城市可以吗? WPS取消高级打印设置怎么取消? 年利率10.8%是多少利息 社区工作者月薪最高18k,3年期满定向转编,能去入职吗? 年利率10.8%是几分 JAVA嵌入数据库:用java代码实现像数据库表中插入信息,怎么写? java:嵌入式HTML详解 Java语言能做什么?应用范围是 ? Java语言一般应用在哪些方面呢? java和嵌入式比较那个前景更好一点 Java能做嵌入式吗? 阿里巴巴怎么开 阿里巴巴是怎么来的? 在阿里巴巴上怎么下单? 阿里巴巴怎么样?价格如何? 手机微信登陆时总是说,“服务器繁忙,错误(8,8)”。是怎么回事啊?? 背上有黑色菱形,菱形里有黄点的蛇叫什么名字 登录微信总提示服务器繁忙怎么办? 背上有黑色棱形,中间是黄色是什么蛇?带图 黄色背部呈黑色菱形花纹,尾部两侧是黑色的蛇是什么蛇? ppt中,“动画完成后隐藏”怎么做? ppt中,“动画完成后隐藏”怎么做? 登录微信显示服务器繁忙是怎么回事? 背后菱形黄色花纹蛇腹部白色和黑色请问这是什么蛇? Miss、MS.、Mrs.三者有什么区别?