首先我要说的是...
这个只是个简单的演示而已..用GSE调用groovy脚本时间也够呛
这个解析很简单 但调用返回这个过程代价却很高 总共时间有400多毫秒(而我单独写个脚本来运行这个是连10ms页不需要的) 这是无法接受的
借用一句话吧 这种要实用还必须是"小消息,大计算"的情况下...
好了不废话了
jdk版本是7u40
groovy版本是2.1.7
为了简单处理 目录结构如下:
使用到的是h2.groovy
h2中的代码如下:
def writer=new StringWriter() def xml = new groovy.xml.MarkupBuilder(writer) xml.person(name:person.name){ age person.age for(def f : person.favor){ "favor" f } } writer.toString()
Person类:
import java.util.List;
public class Person {
private String name;
private int age;
private List<String> favor;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public List<String> getFavor() {
return favor;
}
public void setFavor(List<String> favor) {
this.favor = favor;
}
}
Main类:
import groovy.lang.Binding;
import groovy.util.GroovyScriptEngine;
import groovy.util.ResourceException;
import groovy.util.ScriptException;
import java.io.IOException;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) throws IOException,
ResourceException, ScriptException {
GroovyScriptEngine gse = new GroovyScriptEngine(Main.class
.getClassLoader().getResource("").getPath().substring(1));
Binding binding = new Binding();
Person p = new Person();
p.setName("cc");
p.setAge(21);
ArrayList<String> list = new ArrayList<>();
list.add("上网");
list.add("玩游戏");
list.add("coding");
p.setFavor(list);
binding.setVariable("person", p);
long begin=System.currentTimeMillis();
Object result = gse.run("h2.groovy", binding);
long end=System.currentTimeMillis();
System.out.println(result);
System.out.println("耗时:"+(end-begin));
}
}
最后的输出:
<person name='cc'> <age>21</age> <favor>上网</favor> <favor>玩游戏</favor> <favor>coding</favor> </person> 耗时:438
--------------------分割线--------------------------
以上groovy代码中有个疑问
for(def f : person.favor){ "favor" f }
这一段中 如果写成
"f" f 就会报错 这个在groovyConsole中也是一样的 也就是 ""内的必须不是和参数一样的名字 例如参数变成i 那么 "i" i是不允许的
此外写成 f f 也会错 要实现f f的效果 要写成 "${f}" f 这样才行
红字的补救方法也有:
tmp="i" print(["上网", "玩游戏", "coding"]) xml.info(id:a){ for(def i : ["上网", "玩游戏", "coding"]){ "${tmp}" i } }
红字的错误感觉怪怪的...
错误信息如下:
groovy.lang.MissingMethodException: No signature of method: java.lang.String.call() is applicable for argument types: (java.lang.String) values: [上网]
Possible solutions: wait(), any(), wait(long), split(java.lang.String), each(groovy.lang.Closure), count(java.lang.String)
Possible solutions: wait(), any(), wait(long), split(java.lang.String), each(groovy.lang.Closure), count(java.lang.String)
有谁知道为什么吗? 麻烦解答一下^_^