前言
JDK6加入对JSR233-Java平台脚本的支持(JSR 223: Scripting for the Java Platform ),可以用来在Java程序中调用脚本。
1.支持的脚本类型
import javax.script.ScriptEngineFactory; import javax.script.ScriptEngineManager; import java.util.List; public class TestSupport { public static void main(String[] args) { ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); List<ScriptEngineFactory> engineFactories = scriptEngineManager.getEngineFactories(); if (engineFactories.size() == 0) { System.out.println("本JVM尚不支持任何脚本引擎"); return; } System.out.println("本JVM支持的脚本引擎有:"); for (ScriptEngineFactory engineFactory : engineFactories) { System.out.println("引擎名称:" + engineFactory.getEngineName()); System.out.println("\t可被ScriptEngineManager识别的名称:" + engineFactory.getNames()); System.out.println("\t该引擎支持的脚本语言名称:" + engineFactory.getLanguageName()); System.out.println("\t是否线程安全:" + engineFactory.getParameter("THREADING")); } } }
2.DEMO
import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class TestScript1 { public static void main(String[] args) throws Exception { ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("javascript"); String exp = "c=a+b;if(c<0){'负数'}else if(c==0){'零'}else{c};"; scriptEngine.put("a", Math.random()*(-10)); scriptEngine.put("b", Math.random()*10); Object result = scriptEngine.eval(exp); System.out.println(exp + " === " + result); } }
2.commons-jexl
Apache commons-jexl是基于JSR233的扩展库,只需添加依赖就可以使用。
(1)Maven Dependency
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-jexl</artifactId> <version>2.1.1</version> </dependency>
(2)DEMO
import java.util.Date; public class Pojo { private String str; private Integer inte; private Boolean bool; private Date date; public Pojo(String str, Integer inte, Boolean bool, Date date) { this.str = str; this.inte = inte; this.bool = bool; this.date = date; } public String getStr() { return str; } public void setStr(String str) { this.str = str; } public Integer getInte() { return inte; } public void setInte(Integer inte) { this.inte = inte; } public Boolean getBool() { return bool; } public void setBool(Boolean bool) { this.bool = bool; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } }
import com.google.common.collect.Lists; import com.google.common.collect.Maps; import org.apache.commons.jexl2.Expression; import org.apache.commons.jexl2.JexlContext; import org.apache.commons.jexl2.JexlEngine; import org.apache.commons.jexl2.MapContext; import java.util.Date; import java.util.List; import java.util.Map; public class TestJexl { public static void main(String[] args) { /** * 新建或取回JexlEngine */ JexlEngine jexl = new JexlEngine(); /** * 初始化一个JexlContext对象,它代表一个执行JEXL表达式的上下文环境 */ JexlContext context = new MapContext(); // 准备并设置JEXL表达式上下文环境 Pojo pojo = new Pojo("Pojo", 123, true, new Date()); List<String> list = Lists.newArrayList("a1", "", "c3"); Map<String, Object> map = Maps.newHashMap(); map.put("key", "value"); map.put("pojo", pojo); context.set("pojo", pojo); context.set("list", list); context.set("map", map); // 准备表达式 List<String> jexlExps = Lists.newArrayList("pojo.str", "pojo.inte", "pojo.bool", "pojo.date" , "size(list)", "list[0].length()", "list[0].toUpperCase()", "empty(list[1])" , "map['key']", "map['pojo'].str"); // 执行表达式 for (String jexlExp : jexlExps) { // 建立表达式对象 Create expression object Expression expression = jexl.createExpression(jexlExp); // 传入上下文环境并执行 Object obj = expression.evaluate(context); System.out.println(expression.getExpression() + " = " + obj); } } }
相关推荐
标签:javax、jsr311、api、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心...
webservice中用到的jar,xfire-jsr181-api-1.0-M1.jar,xfire-jsr181-api-1.0-M1.jar
以下是一个简单的例子,展示如何使用JSR 303/349/380注解进行参数校验: ```java public class User { @NotNull(message = "名称不能为空") private String name; @Min(value = 18, message = "年龄不能小于18岁...
标签:javax、jsr311、api、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请...
标签:fasterxml、jackson、datatype、jsr310、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明...
标签:fasterxml、jackson、datatype、jsr310、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和...
标签:findbugs、jsr305、google、jar包、java、中英对照文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译...
标签:jackson、jsr310、datatype、fasterxml、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明...
标签:fasterxml、jackson、datatype、jsr310、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明...
标题 "xfire-jsr181-api-1.0-实例化webservic" 指的是使用XFire框架结合JSR 181规范来创建和实例化Web服务的过程。XFire是一款早期的Java Web服务实现,它提供了一种简单、高性能的方式来创建和消费SOAP服务。JSR ...
标签:fasterxml、jackson、datatype、jsr310、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明...
标签:jackson、jsr310、datatype、fasterxml、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,...
标签:jackson、jsr310、datatype、fasterxml、jar包、java、API文档、中英对照版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变...
标签:findbugs、jsr305、google、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请...
标签:fasterxml、jackson、datatype、jsr310、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和...
标签:fasterxml、jackson、datatype、jsr310、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和...
总的来说,JSR 250 API 1.0 是Java EE平台中不可或缺的一部分,它提供的注解极大地简化了企业级应用的开发。通过学习和使用JSR 250,开发者可以更好地理解和实践依赖注入原则,编写出更加模块化、易于维护的代码。对...
标签:jackson、jsr310、datatype、fasterxml、jar包、java、中英对照文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和...
java.lang.ClassNotFoundException: javax.measure.converter.ConversionException所需的jar
jsr311-api-1.0.jar的jar包,与以前的版本不同,且使用广泛点