最近研发BDC 云开发部署平台的数据路由及服务管理器
意外作出了一个javascript的服务器,可以通过js调用并执行任何java(包括 所有java 内核基本库)及C#类库,并最终由 C# 执行你提交的javascript代码!
整体解决方案http://pan.baidu.com/share/link?shareid=2118966359&uk=201606611
不敢藏私,特与大家分享!

部分代码如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using org.mozilla.javascript;

using javax.net;

//org.mozilla.javascript包:该包内的对象是实现javascript的主要对象。

//org.mozilla.javascript.ast包:rhino中语法分析器生成的ast表示类都在该包内。

//org.mozilla.javascript.debug包:该包实现了javascript的debug功能。

//org.mozilla.javascript.optimizer包:该包实现了javascipt生成代码的代码优化。

//org.mozilla.javascript.regexp包:该包实现了javascript正侧表达式的功能。

namespace javascriptServer

{

class MainClass

{

private const string script =

@"

var swingNames = JavaImporter();

swingNames.importPackage(Packages.java.lang);

swingNames.importPackage(java.io);

swingNames.importPackage(Packages.System);

swingNames.importPackage(Packages.System.Text);

swingNames.importPackage(Packages.TestRhino);

//swingNames.importClass(ClassLibrary.dll);

function Add()

{

return '123';

}

function foo(me)

{

return fromCSharp(me) + me + ""!!!"";

}

function output(str)

{

return str + ""结果"";

}

var str = foo(2000);

PrintLn(str);

java.lang.System.out.println('测试调用 javascript 系统函数');

var hello = Hello.getInstance();

var sh = Hello.sHello();

PrintLn(sh);

";

public static java.lang.Integer FromCSharp(java.lang.Integer i) //, java.lang.Integer j)

{

return i; // string.Format("  {0} the ", i); //, j);

}

public static void PrintLn(String s) //, java.lang.Integer j)

{

//return i; // string.Format("  {0} the ", i); //, j);

Console.WriteLine(s);

return;

}

public static void Main(string[] args)

{

Context cx = Context.enter();  //获取环境设置

//cx.setClassShutter(new ClassShutter());

Scriptable scope = cx.initStandardObjects(); //初始化本地对象

//scope.put("x", scope, new java.lang.Integer(20));    //输入参数设置

Hello hello = new Hello();

scope.put("Hello", scope, hello);  // typeof(Hello)); // 对象放入全局对象中

ContextFactory cf = new ContextFactory();

//注册 c# 方法

java.lang.Class myJClass = typeof(MainClass);

java.lang.reflect.Member method = myJClass.getMethod("FromCSharp", typeof(java.lang.Integer)); //new java.lang.Class[] { typeof(java.lang.Integer) }); //, typeof(java.lang.Integer) });

Scriptable function = new FunctionObject("fromCSharp", method, scope);

scope.put("fromCSharp", scope, function);

method = myJClass.getMethod("PrintLn", typeof(java.lang.String)); //new java.lang.Class[] { typeof(java.lang.Integer) }); //, typeof(java.lang.Integer) });

function = new FunctionObject("PrintLn", method, scope);

scope.put("PrintLn", scope, function);

int ix = 1; int iy = 2;

//执行脚本

cx.evaluateString(scope, script, "myjs", 1, null);

//Console.WriteLine("从执行结果中获取结果"+ scope.get("result", scope));     //结果输出

//编译脚本

Script s = cx.compileString(script, "myjs", 1, null);

s.exec(cx, scope);

ScriptableObject.putProperty(scope, "ix", ix);

ScriptableObject.putProperty(scope, "iy", iy);

object fooFunctionObj = scope.get("foo", scope);

if (!(fooFunctionObj is Function))

Console.WriteLine("foo 不是函数");

else

{

Function fooFunction = (Function)fooFunctionObj;

//调用 js 方法

object result = fooFunction.call(cx, scope, scope, new object[] { new java.lang.Integer(100) });

Console.WriteLine(result);

}

Console.ReadLine();

}

/// <summary>

/// 实现类在javascript中使用的安全性验证

/// </summary>

private class ClassShutter : org.mozilla.javascript.ClassShutter

{

public bool visibleToScripts(string str)

{

Console.WriteLine("类在javascript中被使用: {0}", str);

return false;

}

}

}

}

意外作出了一个javascript的服务器,可以通过js调用并执行任何java(包括 所有java 内核基本库)及C#类库,并最终由 C# 执行你提交的javascript代码! 不敢藏私,特与大家分的更多相关文章

  1. NodeJS服务器:一行代码 = 一个的HTTP服务器

    从这一篇开始,我们进入技术讲解的话题,逐步实现用NodeJS实现文件的传送共享服务. 前文我们讲过,NodeJS是最擅长做网络服务器的,今天我们就来用NodeJS做一个最简单的服务器. 先看一幅图: ...

  2. javascript与服务器3

    一, 带参数的XMLHTTP请求 1, 进行get请求 get请求最常见的是在浏览器地址栏中输入URL并打开页面时,这就是向服务器发送一个get请求. 它的限制是URL最大长度不能超过2048字符(2 ...

  3. javascript与服务器1

    A. 通过在客户端设置Cookie,然后在服务器端读取它. 关于Cookie只说明一点, 它是存储在客户端机器上的一小块信息, 可以有客户端程序或服务器程序创建,并通过http传递.常用于跟踪用户在客 ...

  4. 高性能javascript学习笔记系列(1) -js的加载和执行

    这篇笔记的内容主要涉及js的脚本位置,如何加载js脚本和脚本文件执行的问题,按照自己的理解结合高性能JavaScript整理出来的 javascript是解释性代码,解释性代码需要经历转化成计算机指令 ...

  5. 搭建一个Flv视频播放服务器

    搭建一个Flv视频播放服务器 热度 15已有 11511 次阅读2009-11-2 22:27 |关键词:服务器 视频 flv 播放 文档 错漏 经过一天的努力,查了好多资料,终于搞定了Flv视频服务 ...

  6. JavaScript语法详解:JS简介&变量

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. JavaScript简介 Web前端有三层: HTML:从语义的角度,描 ...

  7. JavaScript(第二十九天)【js处理XML】

    随着互联网的发展,Web应用程序的丰富,开发人员越来越希望能够使用客户端来操作XML技术.而XML技术一度成为存储和传输结构化数据的标准.所以,本章就详细探讨一下JavaScript中使用XML的技术 ...

  8. django搭建一个小型的服务器运维网站-拿来即用的bootstrap模板

    目录 项目介绍和源码: 拿来即用的bootstrap模板: 服务器SSH服务配置与python中paramiko的使用: 用户登陆与session; 最简单的实践之修改服务器时间: 查看和修改服务器配 ...

  9. <深入理解JavaScript>学习笔记(4)_立即调用的函数表达式

    前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行.(小菜理解:的确看到好多,之前都不知道这是自执行匿名函数) 在详细了解这个之前,我们来谈了解一下 ...

随机推荐

  1. mac 下 chrome 语言环境 设置

    当然,如果把系统语言更改为英文,Chrome.QQ 等一系列软件会自动变成英文界面,而且没有提供切换语言的设置. 啪了下 Google,找到了方法,直接在终端运行后重启 Chrome 即可更改. 英文 ...

  2. teamviewer现在无法捕捉屏幕,这可能是由于快速的用户切换或远程桌面会话已经断开

    解决方法:      不用远程连接过去开启teamview,直接在在电脑本机上手动开启teamview就可以了 即:如果是mstsc远程过去开启,则会有这个错误提示,需要让服务器连接显示器,手动去登录 ...

  3. eclipse与myeclipse恢复已删除的文件和代码

    1.类文件的恢复 选择项目后右键-->选择Restore from Local history-->出现下面的界面: 勾选后按Restore就恢复了,真的很强大很方便:但我没有就此罢手,我 ...

  4. delphi TEdit设为下横线,类似填表格

    delphi TEdit设为下横线,类似填表格效果,无需第三方控件就可以实现. 无须编写代码,只要设置一下控件属性 需要修改这些属性: BorderStyle改为bsNone BevelKind改为b ...

  5. 转:MVC单表多按钮提交

    有时候会遇到这种情况:在一个表单上需要多个按钮来完成不同的功能,比如一个简单的审批功能. 如果是用webform那不需要讨论,但asp.net mvc中一个表单只能提交到一个Action处理,相对比较 ...

  6. 使用WCF 测试客户端测试你的WCF服务

    wcftestclient.exe是一个GUI的工具用于测试WCF,只需在Visual studio command line 窗口中键入 wcftestclient,就启动这个程序.如下图: 然后通 ...

  7. Devexpress VCL Build v2015 vol 15.2 开始测试

    增加了几个小玩意,与大版本变化根本无法匹配. 具体可以官网了解 https://www.devexpress.com/Subscriptions/New-2015.xml?product=vcl

  8. 英语语法 It all started the summer before second grade when our moving van pulled into her neighborhood

    It all started the summer before second grade when our moving van pulled into herneighborhood It all ...

  9. jqeury datatable

    1.自定义列信息    "aoColumnDefs":[                               {                               ...

  10. python json学习之路1-认识json格式数据

    JSON 语法规则 JSON 语法是 JavaScript 对象表示语法的子集. 数据在键值对中 数据由逗号分隔 花括号保存对象 方括号保存数组JSONJSON 名称/值对 JSON 数据的书写格式是 ...