标签: scriptengine

使用Rhino而不是ScriptEngine在Java中运行Javascript代码

基于讨论将未知日期格式的字符串表示转换为Java中的Date,我想Date在我的App-Engine项目中使用JavaScript 函数.但是,ScriptEngine不适用于App-Engine.所以我需要一点帮助才能转换成Rhino.这是我需要转换的ScriptEngine代码:

ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine engine = scriptEngineManager.getEngineByName("JavaScript");
String script = "var date = new Date('" + dateInUnknownFormat + "'); var timestamp = date.getTime();";
engine.eval(script);
long timestamp = ((Double) engine.get("timestamp")).longValue();
Run Code Online (Sandbox Code Playgroud)

以下没有奏效

private static long parseDateUsingRhino(String dateInUnknownFormat){
    Context mozillaJsContext = Context.enter();
    Scriptable scope = mozillaJsContext.initStandardObjects();
    String script = "var date = new Date('" + dateInUnknownFormat + "'); var timestamp = date.getTime();";
    Object obj = mozillaJsContext.evaluateString( scope, script, "TestScript", 1, null );
    Double timeDouble = …
Run Code Online (Sandbox Code Playgroud)

javascript java google-app-engine rhino scriptengine

22
推荐指数
1
解决办法
1454
查看次数

通过C#解析并执行JS

我有简单的爬虫爬行和搜索页面.但现在我有问题如何从该页面执行和解析js链接.有没有人知道如何解析和执行js页面?

例:

  • some_url很容易用webhtmltoolktit解析
  • JAVASCRIPT:runmeat(1,7,0,2,7,9)是js链接,然后重定向到some_url2页面,我需要抓取此页面.但问题是如何在C#中执行此javascript以获得some_url2链接?

javascript c# scriptengine

19
推荐指数
2
解决办法
5万
查看次数

在 Java 17 中使用 Javascript 脚本引擎

我必须将项目从 Java 8 迁移到 Java 17。

我可以解决大多数问题,但它包含一个方法,在该方法中我使用 ScriptEngineManager 来评估数学术语。

 ScriptEngineManager mgr = new ScriptEngineManager();
 ScriptEngine e = mgr.getEngineByName("JavaScript");
 
 String t = "5*7";
 if (isMathTerm(t)) {
    System.out.println(e.eval(t).toString());
 }
Run Code Online (Sandbox Code Playgroud)

在 Java 8 中它按要求工作,但在 Java 17 中e始终为 null。

据谷歌称,Java 17 不再支持 JavaScript 引擎。

由于项目限制,我不允许使用第三方库。

Java 17 中有没有正确的方法来处理这个问题?

java eval scriptengine java-17

17
推荐指数
1
解决办法
2万
查看次数

与Java 7相比,Java 8 ScriptEngine的主要性能问题

我有一个Java程序(使用JDK 7u80编译),它广泛使用"JavaScript"ScriptEngine(JSR-223).我注意到,与Java 7运行时环境(JRE 7u80)相比,在Java 8运行时环境(JRE 8u65)下执行时,我的程序运行速度极慢.

我已经整理了以下SSCCE来演示问题,然后在同一台Windows PC上的Java 7和Java 8下执行它:

import javax.script.*;

public class SSCCE {
  public SSCCE() {
    ScriptEngineManager sem = new ScriptEngineManager();
    ScriptEngine js = sem.getEngineByName("JavaScript");
    long t = 0;
    int i = 0;

    String gJs = "function ip2long(ip) {";
    gJs += "var aIP = ip.split(\".\");";
    gJs += "return (aIP[0] * Math.pow(256, 3)) + (aIP[1] * Math.pow(256, 2)) + (aIP[2] * 256) + (aIP[3] * 1);";
    gJs += "}";
    gJs += "function long2ip(l) {";
    gJs += "if (!isNaN(l) …
Run Code Online (Sandbox Code Playgroud)

java performance scriptengine java-8

16
推荐指数
1
解决办法
4488
查看次数

Java ScriptEngine支持的语言

Java有一个ScriptEngine系统,允许您以不同的语言运行/评估语句.
我知道JavaScript支持的事实,但我找不到任何其他语言来使用它.
例如,Ruby实现了吗?

java built-in scriptengine

15
推荐指数
5
解决办法
1万
查看次数

通过Java ScriptEngine在JavaScript中使用jar

我需要使用JavaScript中的jar文件中的类.我正在通过Java ScriptEngine使用JavaScript,并希望做类似于我在这里使用Jython做的事情,

    import org.python.core.Py;
    import org.python.core.PySystemState;
    ...
    PySystemState engineSys = new PySystemState();
    engineSys.path.append(Py.newString("C:/GMSEC_API/bin/gmsecapi.jar"));
    Py.setSystemState(engineSys);
    ScriptEngine engine = new ScriptEngineManager().getEngineByName("python");
Run Code Online (Sandbox Code Playgroud)

当我使用Jython执行此操作时,它工作正常,python文件可以使用jar文件中的api类.

javascript java jython scriptengine

13
推荐指数
1
解决办法
4380
查看次数

使用Java ScriptEngine(Groovy),如何使其更高效?

我在我的应用程序中使用ScriptEngine来评估我的应用程序中的一些客户端代码.问题是它不够高效,我需要采取措施来改善执行时间.目前,最多可能需要1463毫秒(平均约300毫秒)来评估一个极其简单的脚本,这个脚本基本上是URL中的参数替换.

我正在寻找简单的策略来提高性能,而不会失去脚本编写能力.

我首先想到它集合ScriptEngine对象并重用它.我在规范中看到它意味着可以重复使用,但我没有找到任何实际做过的人的例子.

有任何想法吗?这是我的代码:

ScriptEngineManager factory = new ScriptEngineManager();
GroovyScriptEngineImpl engine = (GroovyScriptEngineImpl)factory.getEngineByName("groovy");
engine.put("state", state;
engine.put("zipcode", zip);
engine.put("url", locationAwareAd.getLocationData().getGeneratedUrl());
url = (String) engine.eval(urlGeneratorScript);
Run Code Online (Sandbox Code Playgroud)

对于任何反馈,我们都表示感谢!

java groovy scriptengine

10
推荐指数
1
解决办法
7144
查看次数

Java 11 的 Nashorn 替代品

Nashorn在 Java 11 中使用JavaScript 引擎,它工作正常,但很快就会被弃用。我尝试过GraalVM,我发现它更糟糕,因为执行一个简单的表达式(例如 2+3)需要 13-14 秒。有没有其他替代方法可以使用,或者我应该尝试GraalVM使用其他方法(如果有的话)?

ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("javascript");
engine.eval("2+3");
Run Code Online (Sandbox Code Playgroud)

java javascript-engine scriptengine nashorn graalvm

10
推荐指数
2
解决办法
7007
查看次数

在android中引用javax.script.ScriptEngine或者评估一个javascript表达式

在开发Android应用程序时是否可以引用javax.script.ScriptEngine库?如果没有,那么有可能在android中评估一个javascript表达式?

javascript android scriptengine

8
推荐指数
3
解决办法
1万
查看次数

如何强制Python ScriptEngine刷新导入模块的缓存?

我在Java应用程序中使用Python ScriptEngine来执行导入各种其他Python脚本的Python脚本.

一旦主脚本成功完成并且eval方法返回,我将引擎对象引用设置为null并调用垃圾收集器.

接下来,我将编辑主脚本导入的一个脚本并保存.

接下来我通过创建一个新的ScriptEngine对象并调用eval来运行该方法来执行主Python脚本,但是当主脚本运行时,它不会获取对我所创建的导入脚本的更改.

显然导入的脚本是通过某种东西缓存的(也许是Jython?).

我不想在Python脚本中调用reload.必须有一种方法可以告诉正在进行缓存的任何内容以刷新或清除自身.

有人找到了解决这个问题的方法吗?我在Windows 7上使用NetBeans 8.0.2,Java 1.8 update 45和Jython 2.7.这是java代码.除了import语句之外,python脚本包含什么并不重要.

ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine engine = scriptEngineManager.getEngineByName("python");
Object result = engine.eval();
engine = null;
System.gc();
Run Code Online (Sandbox Code Playgroud)

python java netbeans jython scriptengine

8
推荐指数
0
解决办法
496
查看次数