HIJK - 自动化JavaScript WebAPI开发包


MIT
跨平台
Java

软件简介

HIJK是一个自动化的WebAPI ALL-in-ONE开发工具包,使用了JDK8中新加入的执行命令Nashorn jjs 启动,
从服务器端到客户端都使用统一的JavaScript语言, 所有修改都会在访问时自动加载,不需要再编译.

HIJK包括了完整的Web服务器,能直接存取非结构JSON数据的数据库引擎,多个常用Web功能的JavaScript封装。开发效率高,
无配置,开发完的系统直接复制到另一台机器就能以一致的方式运行。所有代码都是标准JavaScript,兼容全部JavaScript开发工具,使用简单的几行代码就能完成复杂的功能。运行效率高,单机处理每秒几千次的HTTP数据查询请求无压力。

基本用法:

新建一个javascript文件,写入两个HelloWorld

hijk.api.helloworld = function() {
    return  "Hello World!";
};
hijk.api.helloworld2 = function() {
    return {MSG: 'Hello World!'};
};

然后把文件复制到 js 目录下,这两个函数就会自动作为WebAPI执行,支持文本及JSON数据,也可以使用
http://localhost:8080/edit/js/demo.js 直接在线开发 WebAPI 或者在线编写html页面.

支持最新WebSocket WebAPI,可以通过 send(), onmessage()
与客户端进行双向的数据通讯,使用这个功能只需要30行JavaScript代码就能完成一个聊天室的服务器端开发。

hijk.api.ws_helloname = function(socket, request, response) {
    socket.send("Name: ")
          .onmessage(function(name) { 
                send_all("Welcome " + name); 
          });
};

通过标准HTTP及WebSocket协议提供的API能非常方便被Windows, Linux, Android, iOS, Windows
Phone等各类终端机的应用程序调用。同时HIJK开发包内置了Web服务器,同时支持HTTP及HTTPS,只需要把 *.html 复制到 html
目录就可以使用http(s)访问了。

支持动态HTML函数,可以在HTML页面返回客户端前进行附加处理,例如替换自定义标签,扩展标准标签,也可以在页面中插入JSON数据,再调用JSON-
HTML模板引擎,这个函数可以跟各种HTML扩展引擎结合。下面是一个简单的例子,在中动态插入搜索引擎会读取的关键字部分

hijk.api["/table1_template.html"] = function(file, map, request) { 
    function demo_server_template_processor(html, json) {
        html = html.replaceFirst("<head>",
                "<head><title>Server Process -" + json.record.name + "</title>" +
                "<meta name='keywords' content='HIJK JavaScript WebAPI " + json.record.id + "' />" +
                "<meta name='Description' content='HIJK HTML WebAPI Demo for template' />");
        return html;
    }
    var html = file.html;
    var json = hijk.api.table1_template_json(map, request);
    html = demo_server_template_processor(html, json);
    return html;
}

带有JSON HTML 模板引擎库,使用标准HTML创建模板,可以绑定JSON数据,非常方便直接地使用从WebAPI中返回的数据。绑定语法简单
“{{name}}” 绑定JSON的一个属性, “{{#names}}内容{{/names}} “
绑定一个数组,并且foreach生成内容。引入的是JavaScript引擎库,可以放到客户端中进行模板处理,不费服务器的CPU,放心加载50000条数据,不影响服务器。

支持多线程。把一个普通function作为参数传入sys.thread()就会转到后台线程中运行, 通过 sys.threadreturn
返回运算结果给主线程, 主线程中使用 take() 就能取得后台线程运行结果同时自动完成线程同步。支持使用 sys.threadvar()
创建线程本地变量。

hijk.api.multi_thread = function() {
    var results = sys.threadreturn(2);

    //Thread 1
    sys.thread(function() {
        for (var i = 1; i <= 10000; i++) {}
        results.put("T01-" + c);
    });

    //Thread 2
    sys.thread(function() { 
        for (var i = 10001; i <= 20000; i++) {}
        results.put("T02-" + c);
    });

    var rs = []; 
    rs.push(results.take());
    rs.push(results.take()); 
    return rs;
};

支持分布式编程,直接使用JavaScript就能进行可读性高的分布式开发,同时控制多台Web服务器,只需要把远程机器地址及需要在远程执行的function传入
start_remote_process 就可以了.

start_remote_process("ws://remotehost:9090/api/ws_eval",
            function() { 
                print("Hello World");
            })

支持数据库操作,在/js/目录下的任何.js文件的任何位置写入如下脚本指定主键及索引,自动加载时就会自动创建表table1, 智能化编程。

hijk.table.table1 = {
    data: {"id": 0, "name": ""},
    key: ["id"],
    index: [["name"]]
};

数据库可以直接存取非结构化的JSON数据

hijk.api.table1_insert = function() { 
    var tid = hijk.db.id();
    var v = {
        id: tid,
        name: "name" + tid,
        fieldA: "fieldA" + tid,
        fieldB: "fieldB" + tid
    };
    if (hijk.db.insert("table1", v)) {
        return tid;
    } else {
        return -1;
    }
};
hijk.api.table1_select_sum = function() {
    var r = 0;
    hijk.db.select("from table1", [],
            function(v) {
                r += v.id;
                return true;
            });
    return r;
};

快捷系统备份,HIJK基于文件夹目录设计,包括数据库文件都位于同一个目录内,备份只需要复制整个文件夹,可以使用操作系统自带的zip工具,一条命令完成压缩加备份,系统还原只需要解压缩文件夹。

HIJK的代码全部是JavaScript,并对Java调试器有很好的兼容性,代码能快速阅读,自由修改及测试。