最近研发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. web项目启动报错Unknown character set: 'utf8mb4' in mysql

    网上一查,有的说是mysql驱动的问题,有的说创建数据库的时候指定utf8编码,换了各种mysql版本,最后换了5.1.6版本的mysql驱动后成功启动!问题解决!OMG

  2. Python自动化 【第八篇】:Python基础-Socket编程进阶

    本节内容: Socket语法及相关 SocketServer实现多并发 1. Socket语法及相关 sk = socket.socket(socket.AF_INET,socket.SOCK_STR ...

  3. 远程操控软件 TeamViewer for MAC 官方中文版11.0.55321

    百度云:https://pan.baidu.com/s/1o77ol2y 提取密码:3tsx windows: http://download.pchome.net/internet/server/r ...

  4. animate.css配合wow.min.js实现各种页面滚动效果

    有的页面在向下滚动的时候,有些元素会产生细小的动画效果.虽然动画比较小,但却能吸引你的注意.比如刚刚发布的 iPhone 6 的页面(查看).如果你希望你的页面也更加有趣,那么你可以试试 WOW.js ...

  5. Bootstrap导航点击菜单跳转与点击缩放菜单折叠按钮缓冲效果插件jquery.singlePageNav.min.js

    引入步骤: <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></scrip ...

  6. 解决多网卡SNMP获取不到数据的问题

    前言 前几天,公司的某个平台突然访问不了,我以为是网站挂了,于是想连接服务器查看,谁知道连服务器都连不上,然后我尝试PING,结果一直PING不通,此时我有点慌了,但我的头脑还是保持清醒的,我马上连接 ...

  7. cs0006 未能找到元数据文件 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files

    翻阅了一些资料后发现是需要重新注册IIS服务扩展,在“开始”-“运行”里输入如入命令,回车,搞定 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspne ...

  8. CSS详细样式

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  9. C#控件根据窗体改变大小

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  10. 关于jquery判断对象是否为空

    1. jquery对象分为两种,一种是dom对象,dom对象会自带一个length属性,所以这种情况: obj.length == 0 可以判断对象为空 2. jquery也可以自定义对象,如 var ...