符合中小企业对网站设计、功能常规化式的企业展示型网站建设
本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...
商城网站建设因基本功能的需求不同费用上面也有很大的差别...
手机微信网站开发、微信官网、微信商城网站...
脚本对于大多数程序员来说应该不陌生了吧。
成都创新互联公司是一家集网站建设,零陵企业网站建设,零陵品牌网站建设,网站定制,零陵网站建设报价,网络营销,网络优化,零陵网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
今天我们就一起来了解一下,在使用java编程开发语言编写API脚本的时候都需要注意哪些问题。
Java脚本化API为谁准备?脚本语言的一些有用的特性是:方便:大多数脚本语言都是动态类型的。
您通常可以创建新的变量,而不声明变量类型,并且您可以重用变量来存储不同类型的对象。
此外,脚本语言往往会自动执行许多类型的转换,例如,必要时将数字10转换为“10”。
开发快速原型:您可以避免编辑编译运行周期,只使用“编辑运行”!应用扩展/定制:你可以“具体化”的部分应用程序,例如一些配置脚本,业务逻辑/规则和财务应用中的数学表达式。
为应用添加命令行模式,用于调试、运行时配置/部署时间。
现在大多数应用程序都有一个基于Web的GUI配置工具。
但是系统管理员/部署人员常常喜欢命令行工具。
一个“标准”的脚本语言可以用来实现这个目的,而不是发明特设的脚本语言。
Java脚本API是一种独立于框架的脚本语言,使用来自于Java代码的脚本引擎。
通过java脚本API,可以使用Java语言编写定制/可扩展的应用程序并将自定义脚本语言选择留给终用户。
Java应用程序开发者不需要在开发过程中选择扩展语言。
如果你使用JSR-223API来编写应用,那么你的用户可以使用任何JSR-223兼容的脚本语言。
脚本包Java脚本功能是在javax.script包中。
这是一个比较小的,简单的API。
脚本的出发点是ScriptEngineManager类。
一个ScriptEngineManager对象可以通过jar文件的服务发现机制发现脚本引擎。
它也可以实例化脚本引擎来解释使用特定的脚本语言编写的脚本。
脚本变量当你的java应用程序嵌入脚本引擎和脚本,你可能希望将您的应用程序对象为全局变量暴露于脚本中。
这个例子演示了如何将您的应用程序对象作为全局变量暴露于脚本中。
我们在应用程序中创建一个java.io.File对象作为全局变量,名称是file。
陕西电脑培训发现该脚本可以访问变量,例如,它可以调用它的公共方法。
注意访问java对象、领域和方法的语法依赖于脚本语言。
JavaScript支持“自然”的类似java的语法。
如何在Java中使用Lua脚本语言是本文要介绍的内容,主要是来学习LUA脚本语言在JAVA中如何来使用,Lua就不说了, 现在比较热门, 语法也很简单. 为了在Java中调用, 折腾了比较长的时间, 就把一些东西记在下面.来看详细内容讲解。
Lua是支持内嵌在C程序中的, 但是官方不支持Java. 在网上查了下, 有LuaJava开源库, 拿来试用了一下, 发现这个库还算比较完善的.
这个LuaJava实际上就是按照Lua官方文档, 把Lua的C接口通过JNI包装成Java的库. 下载, 里面是一个.dll, 一个.jar. 把.dll放到java.library.path下, 再把.lib放到classpath中, helloworld运行OK.
但是, 测试的时候, 很快发现了第一个问题: 在调用LuaJava中提供的LuaState.pushInteger 方法的时候, 出现了错误 : Unsatisfied Link Error. 其他的LuaState.pushNumber方法倒是没有问题. 用Depends工具看了下, 这个.dll居然没有导出pushInteger这个函数. 晕....
下载LuaJava的源代码, 查看了下Luajava.c 和 Luajava.h, 发现果然里面有点问题, 在.h里面定义了JNI中对应Java函数的C函数
JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1pushInteger
但是.c中没有实现这个函数. 无语, 看来大马虎哪都有啊. 幸亏有源代码, 照猫画虎在Luajava.c中加上这个函数的实现,
JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1pushInteger (JNIEnv * env, jobject jobj, jobject cptr, jint i) { lua_State * L = getStateFromCPtr( env , cptr ); lua_pushinteger(L, i); }
然后编译. 编译也出现了问题了, 官方文档中说可以用VC++来Build, 但是没有说官方用的是什么版本. 我用VC2005就不行. 好在Luajava比较小, 就一个.h 一个 .c , 在VC中新建一个.dll项目, 把文件加进去, 修改一下build参数 (Include 需要加上lua的头文件, lib中需要加上lua的.lib文件, 另外要选上 Compile as C Code (/TC) ) Build, 通过了.
这时再在Java中调用pushInteger方法就没有问题了.
在测试中, 发现Luajava提供的文档中, 对于Lua脚本怎么调用Java对象/方法很详细, 但是在Java中怎么调用Lua函数/取得返回值 就没有. 参考了 的Lua C文档, 实现了传递对象到Lua中并取得返回值的代码:
Test1: 测试传递简单类型, 并取得返回值:
Lua 脚本(test.lua):
function test(a,b) return a+b end
Java代码:
static { //加载Lua5.1.dll, 因为LuaJava最后还是要调用Lua的东西 System.loadLibrary("lua5.1"); } public static void main(String[] argu) throws LuaException { LuaState L = LuaStateFactory.newLuaState(); L.openLibs(); //读入Lua脚本 int error = L.LdoFile("test.lua"); if (error != 0) { System.out.println("Read/Parse lua file error. Exit."); return; } //找到函数test L.getField(LuaState.LUA_GLOBALSINDEX, "test"); //参数1压栈 L.pushInteger(1); //参数2压栈 L.pushInteger(2); //调用!! 一共两个参数, 1个返回值 L.call(2, 1); //保存返回值, 到a中 L.setField(LuaState.LUA_GLOBALSINDEX, "a"); //读入a LuaObject l = L.getLuaObject("a"); //打印结果. System.out.println("Result is " + l.getString()); L.close(); }
测试2: 传递Java对象
class Value { public int i; public void inc() { i++; } public int get() { return i; } public String toString() { return "Value is " + i; } }
Lua脚本: (该脚本中调用两次对象的inc方法, 并调用get方法输出结果)
function test1(v) v:inc(); v:inc(); print("In lua: " .. v:get()); return v end
Java 代码: (前面都一样, 略)
//找到函数test1 L.getField(LuaState.LUA_GLOBALSINDEX, "test1"); //生成新的对象供测试 Value v = new Value(); //对象压栈 L.pushObjectValue(v); //调用函数test1, 此时1个参数, 1个返回值 L.call(1, 1); //结果放在b中. L.setField(LuaState.LUA_GLOBALSINDEX, "b"); LuaObject l = L.getLuaObject("b"); System.out.println("Result is " + l.getObject());
运行结果:
Result is Value is 2 In lua: 2
和预期的一致.
实现一个怪物的创建,把lua里的设定当作初始状态传给monstor,名字为sample monstor,防御10,攻击10,生命100
1.先导入lib--luajava-1.1.jar
import org.keplerproject.luajava.LuaState; import org.keplerproject.luajava.LuaStateFactory; public class Load{ LuaState luaState; /** * Constructor * @param fileName File name with Lua . */ Load(final String fileName) { this.luaState = LuaStateFactory.newLuaState(); this.luaState.openLibs(); this.luaState.LdoFile(fileName); } /** * Ends the use of Lua environment. */ void close() { this.luaState.close(); } /** * Call a Lua inside the Lua to insert * data into a Java object passed as parameter * @param Name Name of Lua . * @param obj A Java object. */ void run(String Name, Object obj) { this.luaState.getGlobal(Name); this.luaState.pushJavaObject(obj); this.luaState.call(1,0); } } public class Monster{ /* Info */ protected String race; protected int defense; protected int attack; protected int life; /* */ private Load ; public Monster(String race) { /* Loads Lua for this race.*/ this. = new Load(race+".lua"); /*Call Lua create .*/ .run("create", this); } public void setRace(String race) { this.race = race; } public String getRace() { return race; } public int getDefense() { return this.defense; } public void setDefense(int defense) { this.defense = defense; } public int getLife() { return this.life; } public void setLife(int life) { this.life = life; } public void setAttack(int attack) { this.attack = attack; } public int getAttack() { return this.attack; } } monstor.lua--- create(monster) monster:setRace("Sample Monster") monster:setDefense(10) monster:setAttack(10) monster:setLife(100) end
但总是抛出这个错误:
PANIC: unprotected error in call to Lua API (Invalid method call. No such method.)
不知为何,以后用到的时候再research.
已经查出来,原来在Monster类中少了个方法:
public void setRace(String race) { this.race = race; }
怪不得会找不到,
要在一lua文件a.lua里导入其他的lua文件b.lua,用require "b"
如果要从lua中运算后得到返回参数,则需要做一下修改:在lua文件中改成:
create(monster) monster:setRace("Sample Monster") monster:setDefense(10) monster:setAttack(10) monster:setLife(100) return monster end
在Load.java中的run改成如下:
void run(String Name, Object obj) { this.luaState.getGlobal(Name); this.luaState.pushJavaObject(obj); this.luaState.call(1, 1);// 一个参数,0个返回 try { Object object =luaState.getObjectFromUserdata(1); } catch (LuaException e) { e.printStackTrace(); } }
转载仅供参考,版权属于原作者。祝你愉快,满意请采纳哦
Java脚本语言就是JavaScript
JavaScript,是一种基于对象的脚本语言。网景通讯公司最初在它的Navigator 2.0产品上设计并实现的,原名LiveScript。目前已经在WWW上广泛用于动态Web页面的编程语言。
Java脚本语言的目的是增加HTML的互动性
Java脚本语言是一种轻量级的编程语言,
Java脚本语言通常直接嵌入HTML页
Java脚本语言是一种解释性语言(脚本的执行无需翻译)
让网页上的图片作某种曲线运动
打开一个包含图片的网页
删除地址栏中的地址
把这段代码复制到地址栏后按回车键试试!
javascript:
R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200;
DI=document.images; //取得网页上的图片数组的引用
DIL=DI.length; //取得图片数组的长度
function A()
{
for(i=0; iDIL; i++) //通过循环操作每一张图片
{
DIS=DI[i].style; //取得图片样式的引用
DIS.position='absolute'; //图片的left和top用绝对坐标
DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5; //计算图片的left
DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5; //计算图片的top
}
R++;
}
setInterval('A()',5); //每5ms调用A()一次
void(0); //让当前代码保留窗口显示的内容
java的脚本语言就是jsp(Java Server Page)服务器动态页面语言
jsp语言是嵌入在Html文档中的java代码
jsp语言语法格式如下:
% Java代码 %
%
//1 定义变量 2 编写语句
%
%!
//2 定义全局变量 2 方法 3 类
%
% =输出变量或字符串常量 %
你明白了吗?