使用javax.script包实现Java设置JS脚本中的变量

下面例子中,我们通过javax.script包ScriptEngine.put()方法设置JS脚本中的变量,JS把所有在线用户输出。

package ajava.code.javase;
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
import java.util.Date;
public class AjavaAccessJavaObjectFromScript {
   public static void main(String[] args) {
       //创建用户数组,共5个用户
       String[] users = {"mark", "道长", "笨笨", "13810", "way"};
       Date now = new Date();
       //脚本代码,输出所有在线用户及当前时间
       String script =
               "var index; " +
               "var users = userArray; " +
               "for (index in users) { " +
               "    println(users[index]); " +
               "}" +
               "println(‘----------‘); " +
               "println(‘当前时间 (‘ + date+‘)‘); ";
       //获得JS脚本引擎
       ScriptEngineManager manager = new ScriptEngineManager();
       ScriptEngine engine = manager.getEngineByExtension("js");
       //设置JS脚本中的userArray、date变量
       engine.put("userArray", users);
       engine.put("date", now);
       try {
           engine.eval(script);//执行JS脚本
       } catch (ScriptException e) {
           e.printStackTrace();
       }
   }
}

运行结果:

mark

道长

笨笨

13810

way

----------

当前时间 (Tue Apr 03 14:35:13 CST 2012)

使用javax.script包实现Java设置JS脚本中的变量

时间: 2024-07-29 20:43:09

使用javax.script包实现Java设置JS脚本中的变量的相关文章

每天一个JavaScript实例-从js脚本中访问object元素中的SVG

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>每天一个JavaScript实例-从js脚本中访问object元素中的SVG</title> <style> </style> </head> &l

css文件中的样式类被覆盖,js文件中的变量未定义问题问题

Extjs控件中css样式表中的样式类部分被莫名其妙的覆盖 问题原因: 为什么呢? 因为在调用组件W的css样式时,我们自己写了css样式A,Ext组件又自带css样式B,A是我们用cls:'A'放进去.那么这个W到底是用两个样式重复的哪一个种呢? 这就要看css样式表的引入顺序了,如果先引入自己写的,再引入Ext自带的,那么浏览器先读自己写的css样式,然后再读Ext自带的样式.结果我们的自己写的css样式就被覆盖了. 解决办法: 这样就对了. js文件中的变量未定义问题 问题描述: read

Java执行js脚本

aaa package cn.sniper.spider.utils; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringReader; import java.net.URL; import javax.script.Invocable; import j

java的js引擎中关键字context的问题

一开始,js中有个参数名为context,js脚本为 var myobj = eval(context);var len = myobj.length; 无论如何都获取不到len,提示未定义len=sun.org.mozilla.javascript.internal.Undefined 折腾了好久,更种尝试,最后才发现context是关键字 context为js的关键字或者保留字

用闭包解决 js 循环中函数变量暂存问题

需求:有一个数组,根据数组的值渲染对应的数字div,单击对应的div 在控制台打印对应的数字.如点击1,控制台打印1. 问题: 不管点击哪个值 打出来都是4 代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>testFor</title> </head> <body> &l

Java入门系列-04-java中的变量

这篇文章为你搞懂三个问题 什么是变量? 如何使用变量? 变量命名有哪些规范? 变量 计算机的内存类似于人的大脑,电脑使用内存来存储计算所需要的数据. 内存像旅馆一样,不同的房间类型对应不同的数据类型,内存存储数据时会根据数据的需求为它申请一块合适的空间.用于存储数据的这个空间就是变量. 变量名 内存地址 值 name 0x5c2a0c3f.. 张三 age 0xcd4d72a... 10 变量名.内存和存储的值如上表↑ 可以看到内存地址长而不方便记忆,但是变量名可以像给一个人起外号一样,方便记忆

java 和 JS(javaScript)中的反斜杠正则转义

首先说下为什么要转义.在正则中有些字符有特殊含义的,比方说 * 可以前一子表达式的任意次,. 表示除"\r\n"之外的任何单个字符,+ 表示前一子表达式的一次或多次,等.而在有些情况下,需要正则验证这些字符,比方说要验证加减乘除四个运算符号,为了告诉编译器,你要验证的是一个字符而不是正则表达式,就要对这些有特殊含义的字符进行转义,这样就有了转义这一操作. 在java 和javascipt中,都是用反斜杠"\"进行转义,然后两种语言的用法不尽相同,下面举例说明: 1.

python例子-Django之传递json到js脚本中。

一.有两种方法传递sjon到页面中,一种是ajax使用,另一种是直接渲染在页面中: views.py #coding:utf-8 from django.shortcuts import render import json # Create your views here. def addjson(request): list_ = ['list集合','渲染Json到模板'] dict_ = {'site':'字典地址','author':'自学者'} return render(reque

ScriptEngineManager类(Java和JS互相调用)

Java和Js之间的调用时基于ScriptEngineManager类,这个类是jdk8新增的: import java.io.File; import java.util.ArrayList; import java.util.List; import javax.script.Bindings; import javax.script.Invocable; import javax.script.ScriptContext; import javax.script.ScriptEngine;