Freemarker一般是通过writer输出到文件的处理过程,但是这个过程不是很优化的,大量的IO操作使程序变的很慢。尤其是生成对应的文件后,再做一些处理,更是慢上加慢。
废话少说,先看看改造前的代码。
cfg.setClassForTemplateLoading(this.getClass(), "/");
cfg.setObjectWrapper(new DefaultObjectWrapper());
cfg.setNumberFormat("################");
Questionnaire questionnaire = questionnaireDAO.findById(input.getDialogId());
Map root = new HashMap();
root.put("questionnaire", questionnaire);
Template template = cfg.getTemplate("soapRequest.ftl");
OutputStream os = conn.getOutputStream();
Writer out = new BufferedWriter(new OutputStreamWriter(os, "utf-8"));
template.process(root, out);
out.flush();
out.close();
修改后的。
cfg.setClassForTemplateLoading(this.getClass(), "/");
cfg.setObjectWrapper(new DefaultObjectWrapper());
cfg.setNumberFormat("################");
Questionnaire questionnaire = questionnaireDAO.findById(input.getDialogId());
Map root = new HashMap();
root.put("questionnaire", questionnaire);
/**
* StringWriter instead of Writer
* Class StringWriter contains a StringBuffer which can be rendered toString
* modify by heweiya
*/
StringWriter stringWriter = new StringWriter();
BufferedWriter writer = new BufferedWriter(stringWriter);
template.setEncoding("UTF-8");
template.process(root, writer);
StringReader reader = new StringReader(stringWriter.toString());
writer.flush();
writer.close();
说白了就是使用StringWriter代替了writer,我在代码里直接转换成了StringReader,同样,如果你没有必要做这个的话,你可以把StringWriter转换成String.
分享到:
相关推荐
FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:格式部分,不会输出 3,插值:即${...}或#{...}格式的部分,将使用数据模型中的部分替代输出 4,...
的如parse=true,而不是parse="true" 用例 /common/copyright.ftl 包含内容 Ftl代码 Copyright 2001-2002 ${me} All rights reserved. Copyright 2001-2002 ${me} All rights reserved. 模板...
一篇很全面的freemarker教程reeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:格式部分,不会输出 3,插值:即${...}或#{...}格式的部分,将使用数据模型中的部分替代输出 4,FTL指令:...
其它的运行符可以作用于数字和日期,但不能作用于字符串,大部分的时候,使用gt等字母运算符代替>会有更好的效果,因为 FreeMarker会把>解释成FTL标签的结束字符,当然,也可以使用括号来避免这种情况,如:(x>y)> ...
也就是说,不要在word里首先打完 ${ } 之后,又从其它地方把 string 字符串粘贴至 { } 之间,这样在 word 转化为 xml时,解析会有问题,freemarker解析时,会报错。 /** * @Desc:生成word文件 * @Author:张轮...
上面的输出字符串都是hello,annlee!,可以看出这两种语法的效果完全一样. 值得注意的是,${..}只能用于文本部分,不能用于表达式,下面的代码是错误的: ${isBig}>Wow! ${isBig}">Wow! 应该写成:<#if isBig>Wow! 截取...
FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出,用FreeMarker判断对象是否为空的方法大家知道吗,这篇文章就针对这个知道点做介绍,需要的朋友可以参考下
设定字符串为“张三,你好,我是李四” 产生张三的密钥对(keyPairZhang) 张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节 通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到...
设定字符串为“张三,你好,我是李四” 产生张三的密钥对(keyPairZhang) 张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节 通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到...
它传往后台的字符串是添加了标签的字符串. SimpleCaptcha-1.1.1.jar 验证码所使用的包 spring-test.jar 与 junit 测试可以利用spring的注入功能,引入spring的事物管理,而且对于测试的数据还可以支持回滚,保存...
Apache Commons包中的一个,java.io.*的扩展,输入输出,支持文件上传 commons-fileupload.jar Apache Commons包中的一个,是一个通过Http接收上传的文件并处理结果文件的库 dom4j-1.4.jar 和 jaxen-1.1.1.jar ...
JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...
JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...
JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...
JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...
JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...
JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...
JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...
JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的...