`
流浪鱼
  • 浏览: 1682991 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Script Engine使用

    博客分类:
  • java
 
阅读更多

Java SE 6最引人注目的新功能之一就是内嵌了脚本支持。在默认情况下,Java SE 6只支持JavaScript,但这并不以为着Java SE 6只能支持JavaScript。在Java SE 6中提供了一些接口来定义一个脚本规范,也就是JSR223。通过实现这些接口,Java SE 6可以支持任意的脚本语言(如PHP或Ruby)。

public class ScriptProcessor implements PageProcessor {

    private ScriptEnginePool enginePool;

    private String defines;

    private String script;

    private final Language language;

    private Site site = Site.me();

    public ScriptProcessor(Language language, String script, int threadNum) {
        if (language == null || script == null) {
            throw new IllegalArgumentException("language and script must not be null!");
        }
        this.language = language;
        enginePool = new ScriptEnginePool(language, threadNum);
        InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream(language.getDefineFile());
        try {
            defines = IOUtils.toString(resourceAsStream);
        } catch (IOException e) {
            throw new IllegalArgumentException(e);
        }
        this.script = script;
    }

    @Override
    public void process(Page page) {
        ScriptEngine engine = enginePool.getEngine();
        try {
            ScriptContext context = engine.getContext();
            context.setAttribute("page", page, ScriptContext.ENGINE_SCOPE);
            context.setAttribute("config", site, ScriptContext.ENGINE_SCOPE);
            try {
                switch (language) {
                    case JavaScript:
                        engine.eval(defines + "\n" + script, context);
//                        NativeObject o = (NativeObject) engine.get("result");
//                        if (o != null) {
//                            for (Object o1 : o.getIds()) {
//                                String key = String.valueOf(o1);
//                                page.getResultItems().put(key, NativeObject.getProperty(o, key));
//                            }
//                        }
                        break;
                    case JRuby:
                        RubyHash oRuby = (RubyHash) engine.eval(defines + "\n" + script, context);
                        Iterator itruby = oRuby.entrySet().iterator();
                        while (itruby.hasNext()) {
                            Map.Entry pairs = (Map.Entry) itruby.next();
                            page.getResultItems().put(pairs.getKey().toString(), pairs.getValue());
                        }
                        break;
                    case Jython:
                        engine.eval(defines + "\n" + script, context);
                        PyDictionary oJython = (PyDictionary) engine.get("result");
                        Iterator it = oJython.entrySet().iterator();
                        while (it.hasNext()) {
                            Map.Entry pairs = (Map.Entry) it.next();
                            page.getResultItems().put(pairs.getKey().toString(), pairs.getValue());
                        }
                        break;
                }
            } catch (ScriptException e) {
                e.printStackTrace();
            }
        } finally {
            enginePool.release(engine);
        }
    }


    @Override
    public Site getSite() {
        return site;
    }

}

 

 

 

分享到:
评论

相关推荐

    l2j-server-script-engine_l2j-server_script-engine_

    《Lineage II 服务器脚本引擎——l2j-server-script-engine 深度解析》 在游戏开发领域,特别是大型多人在线角色扮演游戏(MMORPG)中,Lineage II(简称L2J)是一款备受欢迎的游戏服务器端框架。"l2j-server-...

    ErikBasic Script Engine-开源

    协议内容将规定用户可以如何使用、修改和分发ErikBasic Script Engine的源代码,对于开发者来说,理解这些条款非常重要,以确保他们的使用符合法律要求。 ErikBasicScriptEngine.sln是Visual Studio的解决方案文件...

    rhino-script-engine:Java中捆绑的RhinoScriptEngine的替代品,以使用新闻版Rhino

    使用在您的Maven POM中包括rhino-script-engine。 <dependency> <groupId>de.christophkraemer</groupId> <artifactId>rhino-script-engine</artifactId> <version>1.1.0</version></dependency> ScriptEngine应该由...

    script engine-开源

    YASSE旨在用作Simutronics游戏的其他配件中的脚本引擎,但可以轻松修改以适应几乎所有其他MUD游戏系统。 它的大部分是为DragonRealms游戏设计的,网址为http://www.dragonrealms.net/

    Nibble Script Engine-开源

    由于是基于Java VM(Java虚拟机)的,Nibble Script Engine能够无缝地与Java环境集成,动态查找并使用类库,同时具备在运行时编译.java源文件的能力。这样的设计极大地增强了脚本的灵活性和可扩展性。 在开源社区中...

    超强大、好用的Pascal语言解释器(RemObjects Pascal Script)

    Pascal Script is a free scripting engine that allows you to use most of the Object Pascal language within your Delphi or Free Pascal projects at runtime. Written completely in Delphi, it is composed...

    Browser Script Engine Zero Days in 2018.zip

    JavaScript作为最广泛使用的浏览器脚本语言,其零日漏洞可能允许攻击者实现跨站脚本攻击(XSS)、跨站请求伪造(CSRF)或其他形式的网络钓鱼攻击。V8引擎作为Chrome的核心,任何针对它的零日漏洞都可能影响全球数亿...

    Browser Script Engine Zero Days in 2018.pdf

    这一过程中可能触发漏洞利用的代码被使用,导致创建了额外的对象。当这些操作被错误处理或者被攻击者以特殊方式触发时,就可能会导致安全问题。 在攻击者利用这些漏洞时,首先需要创建对象,然后是对象操作,最后...

    Cheat Engine6.7汉化补丁

    2. **脚本语言支持**:Cheat Engine支持其内置的ASE(Cheat Engine Script)脚本语言,允许用户编写自定义脚本来实现更复杂的修改功能,如自动化的数据追踪和修改。 3. **反作弊检测**:Cheat Engine还提供了反作弊...

    CheatEngine5全中文

    4. **脚本语言**:CheatEngine5内置了一种脚本语言,名为"CE Script",用户可以通过编写脚本来实现更复杂的修改功能,如自动化修改、条件判断等。 5. **教程与社区**:由于是中文版本,CheatEngine5带有训练教程,...

    Innerfuse Pascal Script 1.04 stable

    Pascal Script 解释器IFPS3是一个用Delphi编写的脚本引擎,它使得你能够在程序的运行中使用大多数的Object Pascal语言特性,这些程序单元可以被编译到你的应用程序中,发布时不需要其它额外的文件,它具有以下特性:...

    script-engine:脚本引擎是一种命令行工具,其中包含不同类别的不同脚本,并且可以使用终端轻松执行

    脚本引擎这是一个命令行工具...如何使用要使用此命令行工具,请在将存储库克隆到本地计算机后运行以下命令./script_engine.sh 注意:-此命令行工具仍在开发中,可以随意提出建议。 您可以在 , ,或上与我分享您的想法

    Cheat+Engine+6.7

    3. 脚本语言:Cheat Engine有自己的脚本语言,名为“CE汇编语言”,基于ASL(Cheat Engine Script Language)。通过编写脚本,用户可以实现复杂的游戏修改逻辑,比如自动跟踪和修改游戏状态。 4. 进程管理:Cheat ...

    Angel Script 手册中文版

    通过对本手册的学习,不仅可以了解如何使用 Angel Script 编写简单的脚本程序,还可以深入理解其面向对象编程的支持和其他高级特性。这对于希望利用脚本语言增强软件功能的开发者来说是非常有价值的。

    Cheat Engine 61

    8. ASL(Cheat Engine的脚本语言):ASL全称为Cheat Engine Script Language,是一门专为Cheat Engine设计的语言,它提供了丰富的函数库,用于处理内存、进程、网络和其他游戏相关的操作。 9. 兼容性:Cheat Engine...

    Java Weapon Script Engine-开源

    Java Weapon Script Engine是一款开源的Java库,专门设计用于在游戏开发或者其他需要动态武器逻辑的场景中实现复杂的武器系统。这个引擎允许开发者通过编写脚本来定义和控制武器的行为,提供了高度的灵活性和定制性...

    CheatEngine683.zip

    6. **脚本语言**:Cheat Engine支持其特有的ASE(Cheat Engine Script)脚本语言,用户可以编写自定义脚本来实现各种功能,增强游戏体验。 7. **教程与社区**:CE有一个活跃的社区,用户可以分享和学习各种修改教程...

    .NET V8Engine Wrapper

    总之,`.NET V8Engine Wrapper`为.NET开发者提供了一个强大且易于使用的工具,通过它,你可以充分利用V8引擎的高性能特性,同时享受.NET平台的便利性。通过学习和实践,你可以更好地融合两种语言的特长,提升项目的...

    Cheat Engine 6.8.2 中文汉化版 完美汉化中文 ce 6.8.2 汉化中文版 完美中文汉化

    4. ASL脚本语言:Cheat Engine支持ASL(Cheat Engine Script)编写,用户可以通过编写脚本来自动化修改过程,实现更高级的自定义功能。 5. 非游戏应用支持:除了游戏,Cheat Engine还可以用于修改一些非游戏应用...

    C++ state-event script engine-开源

    要在项目中使用C++ State-Event Script Engine,首先需要下载并编译源代码,然后通过提供的API接口将脚本引擎集成到C++应用中。开发者可以编写脚本文件,定义状态和事件处理函数,再通过引擎加载和执行这些脚本。 ...

Global site tag (gtag.js) - Google Analytics