意外作出了一个javascript的服务器,可以通过js调用并执行任何java(包括 所有java 内核基本库)及C#类库,并最终由 C# 执行你提交的javascript代码! 不敢藏私,特与大家分
最近研发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代码! 不敢藏私,特与大家分的更多相关文章
- NodeJS服务器:一行代码 = 一个的HTTP服务器
从这一篇开始,我们进入技术讲解的话题,逐步实现用NodeJS实现文件的传送共享服务. 前文我们讲过,NodeJS是最擅长做网络服务器的,今天我们就来用NodeJS做一个最简单的服务器. 先看一幅图: ...
- javascript与服务器3
一, 带参数的XMLHTTP请求 1, 进行get请求 get请求最常见的是在浏览器地址栏中输入URL并打开页面时,这就是向服务器发送一个get请求. 它的限制是URL最大长度不能超过2048字符(2 ...
- javascript与服务器1
A. 通过在客户端设置Cookie,然后在服务器端读取它. 关于Cookie只说明一点, 它是存储在客户端机器上的一小块信息, 可以有客户端程序或服务器程序创建,并通过http传递.常用于跟踪用户在客 ...
- 高性能javascript学习笔记系列(1) -js的加载和执行
这篇笔记的内容主要涉及js的脚本位置,如何加载js脚本和脚本文件执行的问题,按照自己的理解结合高性能JavaScript整理出来的 javascript是解释性代码,解释性代码需要经历转化成计算机指令 ...
- 搭建一个Flv视频播放服务器
搭建一个Flv视频播放服务器 热度 15已有 11511 次阅读2009-11-2 22:27 |关键词:服务器 视频 flv 播放 文档 错漏 经过一天的努力,查了好多资料,终于搞定了Flv视频服务 ...
- JavaScript语法详解:JS简介&变量
本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. JavaScript简介 Web前端有三层: HTML:从语义的角度,描 ...
- JavaScript(第二十九天)【js处理XML】
随着互联网的发展,Web应用程序的丰富,开发人员越来越希望能够使用客户端来操作XML技术.而XML技术一度成为存储和传输结构化数据的标准.所以,本章就详细探讨一下JavaScript中使用XML的技术 ...
- django搭建一个小型的服务器运维网站-拿来即用的bootstrap模板
目录 项目介绍和源码: 拿来即用的bootstrap模板: 服务器SSH服务配置与python中paramiko的使用: 用户登陆与session; 最简单的实践之修改服务器时间: 查看和修改服务器配 ...
- <深入理解JavaScript>学习笔记(4)_立即调用的函数表达式
前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行.(小菜理解:的确看到好多,之前都不知道这是自执行匿名函数) 在详细了解这个之前,我们来谈了解一下 ...
随机推荐
- 计算hashCode的常见方法
把某个非零常数值,比如说17,保存在一个叫result的int类型的变量中. 2.对于对象中每一个关键域f(值equals方法中考虑的每一个域),完成以下步骤: a.为该域计算int类型的散列吗c: ...
- Git 版本控制 在 WIN 下的一些使用方法
这里记录一些 Git 在 Windows 操作系统下使用方法: 安装完毕后,先让Git 记录自己的名字: $ git config --global user.name "Your Name ...
- 在数学建模中学MATLAB
为期三周的数学建模国赛培训昨天正式结束了,还是有一定的收获的,尤其是在MATLAB的使用上. 1. 一些MATLAB的基础性东西: 元胞数组的使用:http://blog.csdn.net/z1137 ...
- smarty模板的安装配置
第一步:下载Smarty模版源码包了 百度一下“Smarty下载”,下载最新版本的Smarty模版第二部:解压缩,将下载好的Smarty包解压缩 右键->解压到当前文件夹...你懂的 ...
- 深入理解js——prototype原型
之前(深入理解js--一切皆是对象)中说道,函数也是一种对象.它也是属性的集合,你也可以对函数进行自定义属性.而JavaScript默认的给了函数一个属性--prototype(原型).每个函数都有一 ...
- linux 的 samba 实现共享文件夹
samba Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成. service XXX start 失败多是权限不够,使用管理员权限尝试
- struts1 html: textarea 不换行,变形
<html:textarea property="summary" style="word-wrap:break-word;word-break:break-all ...
- Selenium2+python自动化6-八种元素元素定位(Firebug和firepath)
前言 自动化只要掌握四步操作:获取元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告.本篇主要讲如何用firefox辅助工具进行元素定位. 元素定位在这四个环节中是至 ...
- Codeforces Round #382 (Div. 2) 继续python作死 含树形DP
A - Ostap and Grasshopper zz题能不能跳到 每次只能跳K步 不能跳到# 问能不能T-G 随便跳跳就可以了 第一次居然跳越界0.0 傻子哦 WA1 n,k = map ...
- Python全栈之路-----基础篇
Python诞生 Python是著名的”龟叔“Guido van Rossum(吉多·范罗苏姆)在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. Python语法很多来自C,但又受到 ...