在jdk6.0中已经引入了对脚本语言开发的支持,这已经不是什么新鲜事儿,在网上一搜一堆的介绍和使用方法。下面这篇博客对jdk6新特性介绍的很详细:http://blog.csdn.net/stevexk/archive/2008/03/26/2219158.aspx,针对“脚本语言支持”这一特性,在环境是jdk6的开发环境中非常好实现,但是有些项目必须jdk5的环境下开发,又要遵循jsr223标准,支持通用的脚本引擎调用,使目前的项目今后能平滑的移植到jdk6上,不是件容易的事。实际上jdk6中已经内嵌集成了Rhino的javascript脚本解析执行引擎,作为其自身的默认脚本引擎。

记录一下我的解决方式,网上的这篇文章给我了不小的启示《Java 5.0中实现JSR-223的方法》,分析了一下,在实际项目中直接使用从 jdk6 的 rt.jar 中提取的子jar包,其实并不太可取,可用性和可维护行太差。随后,开始费牛劲儿在网上找现成的三方厂商或是开源的jsr223支持,最终找到了这篇文章的介绍http://www.ibm.com/developerworks/cn/java/j-javascripting1/#resources,并在jsr223官方网站(http://jcp.org/en/jsr/detail?id=223)下载到“JSR-223: Scripting for the Java Platform”的实现,此版本执行脚本可以正常运行,但是jsr223-1.0与jdk6中的jsr223实现有很大的差异,并不兼容jdk6,所以还是决定放弃使用,最后决定结合jsr223标准为项目搞出一个自维护的包,要实现在jdk5.0中对脚本语言开发支持方式同jdk6.0一样的话,需要分为三个部分
(1)  准备jsr223标准接口部分;
(2)  找到自己合适Rhino版本包,(jdk5中没有集成Rhino引擎,需要从其官方网站或从maven库中下载,我用的版本是js-1.7R2.jar);
(3)  对rhino引擎做jsr223标准的适配。
**********************
第 1 部分都比较好解决,开发过jbpm4的人可能会知道,在jbpm4有一个依赖livetribe-jsr223.jar,这是一个第三方对jsr223标准接口的最新实现,可以直接引用。
第 2 部分直接从Rhino的官网下载,或是maven索引库下载(这个非常方便,如果用maven做持续集成,可以直接在add dependency的对话框中输入rhino,然后选择自己适用的版本即可)。
第 3 部分则需要手工建java项目例如XXX-jsr223.jar,并整理com.sun.script.javascript 、com.sun.script.util下的所有类了,其实并不多,网上很多地方提供这两个包的所有类,下载下来,包路径不要改,与jdk6里面的结构一样,然后修改相关*.java中的import,
把“import sun.org.mozilla.javascript.internal.*;
修改为“import org.mozilla.javascript.*;
在META-INF/services/ 下创建javax.script.ScriptEngineFactory文件,内容是
#list of ScriptEngineFactory's in this package
com.sun.script.javascript.RhinoScriptEngineFactory #javascript
今后如果要支持其它脚本语言也可以在这里增加,例如:
#list of ScriptEngineFactory's in this package
com.sun.script.javascript.RhinoScriptEngineFactory #javascript
com.sun.script.groovy.GroovyScriptEngineFactory #groovy
com.sun.script.php.PHPScriptEngineFactory #PHP stateless
然后,打成XXX-jsr223.jar就可以用了,在项目里需要引用如下jar包:
XXX-jsr223.jar、livetribe-jsr223.jar、js-1.7R2.jar
就可以使jdk5的项目支持javascript的边写和运行了。
再进一步,既然jsr223是标准,那如果要在项目中同时支持javascript和juel的脚本开发运行,怎么做?
很简单,把下面的包引入项目即可:
XXX-jsr223.jar、livetribe-jsr223.jar、js-1.7R2.jar、juel-api.jar、juel-imp.jar、juel-engine.jar
代码调用juel和javascript的执行方式与jdk6中的调用完全一样:
/* javascript脚本的运行方式*/
ScriptEngineManager factory = new ScriptEngineManage();
ScriptEngine engine = factory.getEngineByName("js");
engine.put("string1", "Hello, Scripting");
         engine.eval("print(string1)");
/* juel表单式的运行方式 */
ScriptEngineManager factory = new ScriptEngineManage();
ScriptEngine engine = factory.getEngineByName("juel");
engine.put("string1", "Hello, Scripting");
         engine.eval("the string value is #{string1} !"); 
以上方法在jdk5环境下是一个可选的解决方案。最后建议,如果开发项目不用考虑兼容jdk5的相关环境,建议最好直接在jdk6上开发,避免上述自己动手过程。
做好了一个完成的jsr223实现包发布上来。
imp-jsr223-1.0.0-SNAPSHOT.jar    http://u.115.com/file/f53b5db3c1提取码:f53b5db3c1
其它依赖包:
livetribe-jsr223.jar  http://www.jar114.com/j/8016
js-1.7R2.jar   http://jar.fyicenter.com/523_JavaScript_rhino-js.1.7.2.jar_Rhino_JavaScript_for_Java_1.html
juel-api.jar、juel-imp.jar、juel-engine.jar 这三个网上自行下载吧。

转载于:https://blog.51cto.com/jiajun/405898

jdk5.0下支持JSR-223的方法相关推荐

  1. FLV视频在IIS6.0下不能播放 处理的方法

    FLV视频在IIS6.0下不能播放  Flash视频由于其较高的压缩率和优越的下载速度,前景普遍看好,同时也为Flash课件增色不少.然而,在FLV视频播放中,却有两个头痛的问题      一.FLV ...

  2. CE5.0/CE6.0下支持手写输入

    CSDN相关文章::http://topic.csdn.net/u/20090531/10/d3a80026-06a1-4139-85dc-b7b0282224df.html 在环境变量里面设置SYS ...

  3. 整理 .Net 2.0 下 WinForms中常用的方法(更新中...)

    using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; /**// ...

  4. JDK5.0环境下配置PKCS#11

    JDK5.0环境下配置PKCS#11 发表日期:2008-1-5 新浪微博 QQ空间 QQ微博 百度搜藏 腾讯朋友 QQ收藏 百度空间 人人网 开心网 这篇文章不介绍具体的编程方法,而是针对PKCS# ...

  5. IIS6.0不支持ASP的解决办法

    Win2003安装IIS6.0不支持ASP的解决方法 ASP脚本在目前的网页开发方面使用的很广泛, 但Windows 2003中自带的IIS 6.0默认情况下不支持ASP脚本,但可以运行aspx程序, ...

  6. python3.7.2怎么用不了pillow_python 3.7.0 下pillow安装方法

    PIL(Python Imaging Library)是Python中一个强大的图像处理库,但目前其只支持到Python2.7 pillow是PIL的一个分支,虽是分支但是其与PIL同样也具有很强的图 ...

  7. java pathinfo,nginx下支持PATH_INFO的方法实例详解

    本文实例分析了nginx下支持PATH_INFO的方法.分享给大家供大家参考,具体如下: 要想让nginx支持PATH_INFO,首先需要知道什么是pathinfo,为什么要用pathinfo? pa ...

  8. CE6.0 下获得 SD 卡序列号的方法

    经常在坛子里看到讨论软件加密的帖子,纯软件加密与读取硬件序列号加密是经常讨论到的. 两种方法各有优缺点. 在通过读取硬件序列号的方法来加密的方法,受硬件的限制. 一般来说,CPU和T-Flash可能存 ...

  9. linux tomcat apr安装,Linux下Tomcat8.0.44配置使用Apr的方法

    听说Apr可以提高tomcat很多的性能,配置具体如下 1.安装apr 1.5.2 [root@ecs-3c46 ]# cd /usr/local/src [root@ecs-3c46 src]# w ...

  10. android webview权限申请_Android应用开发之android 6.0下webview的定位权限设置方法

    本文将带你了解Android应用开发android 6.0下webview的定位权限设置方法,希望本文对大家学Android有所帮助. 如下所示: WebView webView =   (WebVi ...

最新文章

  1. 机器学习发现了地下上千公里处的热岩床
  2. JAVA(IO流)知识整理
  3. JS原始类型:数值的运用技巧
  4. python循环报数游戏_python经典面试题之一:猴子报数
  5. python函数式编程思想_以python为例,浅谈函数式编程思想
  6. 某些小技巧的技术分享
  7. pymysql安装_pymysql 模块简单使用
  8. [建议]我对博客园的发展的一点想法
  9. IIS Express局域网访问配置
  10. ansys linux17.2 字体,ubuntu16.04安装Ansys17.2教程,及遇到的问题(安装非完美)
  11. java bartender_BarTender Web Print Server可用的打印方法
  12. 定风波·三月七日(苏轼)
  13. 宫颈癌预测--随机森林
  14. 数据结构与算法80道
  15. 非常精美的唐诗,无与伦比哦
  16. 5个月的精华:Spring/SpringBoot扩展点手册:手册在手,编码无忧:全网独一份 - 第451篇
  17. Window系统中Hosts文件介绍
  18. 什么是二维数组以及二维数组传参
  19. 2014年元旦放假安排,又一个坑爹的假日
  20. CHIL-ORACLE-修改密码

热门文章

  1. bootstrap datetimepicker日期插件使用方法
  2. FreeType需要libpng的说明(编译时可以用参数去掉,2.12已支持svg)
  3. 龙芯提供的jna-4.5.2,没有libjnidispatch.so,也能用
  4. VC如何打开代码对应的界面编辑窗口
  5. Ubuntu用Apache2快速搭建一个HTTP文件服务器
  6. mysql集群脑裂问题_redis集群怎么解决脑裂问题
  7. python判断中文函数_如何判断(或如何编写)一个没有副作用的python函数?
  8. python cursor游标_python 使用sqlite需要使用游标cursor?
  9. n个人围成一圈指针c语言,C语言N个人围成一圈报数用二级指针实现,不用数组!...
  10. Keil代码自动对齐 VS对齐功能