HIJK自动化JavaScript WebAPI开发包
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扩展引擎结合。下面是一个简单的例子,在<head>中动态插入搜索引擎会读取的关键字部分
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调试器有很好的兼容性,代码能快速阅读,自由修改及测试。