`

使用JDK6的ScriptEngine动态调用freemarker模板

阅读更多

Java 6 Script Engine
  Java SE 6最引人注目的新功能之一就是内嵌了脚本支持。在默认情况下,Java SE 6只支持JavaScript,但这并不以为着Java SE 6只能支持JavaScript。在Java SE 6中提供了一些接口来定义一个脚本规范,也就是JSR223。通过实现这些接口,Java SE 6可以支持任意的脚本语言(如PHP或Ruby)。
http://blog.csdn.net/garybrother/archive/2009/03/13/3988730.aspx


什么是FreeMarker
  FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写.FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序.虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由 FreeMarker生成页面,通过模板显示准备的数据


使用JDK6的ScriptEngine动态调用freemarker
  Freemarker最新版本已经支持JSR223标准,可以使用java6的标准脚本接口进行调用,大大简化了freemarker模板的使用.
这种模板方式在系统的中可以有较好的应用, 特别是在建立灵活的报警信息模板(短信,邮件)方面有很大的应用.
Freemarker2.4版本才支持JSR223标准,目前maven库中还没有提供该版本.

折叠 Java 代码复制内容到剪贴板
  1. //生成引擎   
  2. ScriptEngineManager manager = new ScriptEngineManager();   
  3. ScriptEngine engine = manager.getEngineByName("FreeMarker");   
  4.            
  5. //获取模板   
  6. String template=" the 学生 is ${name} ,and 他今年${age}岁,身高:${height}cm!\n"+   
  7.         "他的朋友包括:\n"+   
  8.         "<#list friends as friend>朋友 ${friend}\n</#list>";   
  9.               
  10. try {   
  11.         //注入参数   
  12.         Bindings params= engine.createBindings();   
  13.         params.put(FreeMarkerScriptConstants.STRING_OUTPUT, Boolean.TRUE);   
  14.         params.put("name""tom");   
  15.         params.put("age"11);   
  16.         params.put("height"175.2);   
  17.         params.put("friends"new String[]{"jack","linda","better"});   
  18.   
  19.         //执行模板渲染   
  20.         Object result =engine.eval(template,params);   
  21.            
  22.         //输出结果   
  23.         System.out.println(result);   
  24. catch (ScriptException e) {   
  25.     e.printStackTrace();   
  26. }   
  27.   



输出
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
the 学生 is tom ,and 他今年11岁,身高:175.2cm!
他的朋友包括:
朋友 jack
朋友 linda
朋友 better

分享到:
评论

相关推荐

    freemarker.jar用于jdk1.8下使用

    6. **性能优化**:Freemarker有缓存机制,能够缓存编译后的模板,提升重复渲染的效率。此外,还可以通过配置调整其行为,比如设置模板的编码方式,或者开启错误报告等。 7. **与Spring Framework集成**:在Spring ...

    jdk1.8下可以使用的freemarker.jar

    这个"jdk1.8下可以使用的freemarker.jar"文件是专门为Java 8环境优化的Freemarker库,使得开发者能够在Java 8平台上无缝地集成和使用Freemarker进行动态内容渲染。 Freemarker的核心概念是模板(Template),它是一...

    适用jdk1.8的freemarker

    7. 文件列表"jdk1u8-freemarker"可能包含了与Java 1.8环境下的Freemarker相关的示例模板文件、配置文件或其他辅助资源,用于演示或学习如何在Java 1.8中使用Freemarker。 综上所述,Freemarker是一个强大的模板引擎...

    freemarker各种版本的jar包

    Freemarker是一个强大的模板引擎,主要用于生成动态HTML、XML或其他文本格式的输出。它在Java平台上广泛使用,尤其是在Web开发中,与Spring框架等结合,为服务器端渲染提供灵活的模板语言支持。以下是对给定的...

    基于MAVEN的spring boot 环境搭建,已配置好freemarker 需要jdk 1.8

    本教程将详细介绍如何使用MAVEN作为构建工具来搭建一个基于Spring Boot的环境,并集成FreeMarker模板引擎,同时需要Java Development Kit (JDK) 1.8版本。 1. **Spring Boot基础知识**: Spring Boot是由Pivotal...

    jdk6免安装下载 免费下载

    4. **动态代理增强**:通过java.lang.reflect.Proxy类,JDK6支持接口方法的默认实现,使得动态代理更加灵活。 5. **脚本语言支持**:JDK6通过JSR 223引入了对JavaScript和其他脚本语言的支持,使得Java平台可以嵌入...

    jdk6免安装版本, 解压直接使用

    使用JDK6时,需要注意的是由于它已停止安全更新,可能存在安全风险。如果可能,应尽量升级到最新版本,以获得最新的安全补丁和性能优化。不过,对于那些依赖JDK6特性的项目,理解其工作原理和如何正确配置与使用这个...

    JDK动态代理_JDK动态代理

    下面是一个简单的示例,演示了如何使用JDK动态代理为一个接口创建代理对象,并在方法调用前后添加日志记录功能。 ```java /** * 业务接口 */ public interface IHello { void hello(String name); } /** * ...

    windows64位jdk6、jdk7、jdk8安装包

    总之,JDK6、JDK7和JDK8在Windows 64位环境下安装和使用,是Java开发者的必备工具,它们各自具备独特的特性和改进,为开发者提供了广泛的功能和支持。正确安装和配置这些JDK,可以确保Java应用程序的顺利开发和运行...

    java的jdk6安装包

    2. 动态代理:JDK6引入了`java.lang.reflect.Proxy`类,允许动态创建代理对象,实现接口方法的调用。 3. 注解(Annotation):增强了代码的元数据功能,可以用于编译时检查、运行时处理等。 4. 自动装箱与拆箱:简化...

    苹果电脑安装jdk1.6 mac for jdk1.6 jdk6 安装版

    mac for jdk1.6 jdk6 安装版 里面有两个jdk1.6的安装包,都可以用 如果电脑上安装有1.7,1.8等高版本jdk就不要再下安装包了,安装包安装会报错 命令是这个:brew install java6或 brew install homebrew/cask-...

    Professional Java JDK 6 Edition

    动态语言支持是JDK 6的另一大亮点。JRuby、Jython等脚本语言可以直接在Java平台上运行,大大扩展了Java的使用场景。ScriptEngine接口的引入为在Java应用程序中嵌入和执行脚本提供了便利。 JDK 6还引入了改进的垃圾...

    Jdk6解压打包版本

    2. **动态语言支持**:JDK 6添加了`invokedynamic`指令,为运行时绑定和动态语言提供了更好的支持,这为Groovy、Ruby等动态语言在Java平台上的运行奠定了基础。 3. **Swing增强**:JDK 6对Swing组件进行了大量优化...

    jdk6-linux

    对于开发者来说,能够在Ubuntu上安装并使用JDK6意味着他们可以利用这个平台的稳定性和安全性来开发Java应用。 【标签】"jdk6-linux"和"linux-jdk"是对这个压缩包内容的简洁概括。"jdk6-linux"强调了这是JDK6的Linux...

    jdk6,jdk7,jdk8,jdk9,jdk10 windox、linux版本 百度云

    官网 jdk6,jdk7,jdk8,jdk9,jdk10 windox 32位、64位、linux 32位、64位 百度云。

    Spring框架中JDK动态代理和cglib动态代理

    在 JDK 动态代理中,我们可以使用 InvocationHandler 来处理方法的调用。InvocationHandler 是一个接口,它定义了 invoke 方法,该方法将被代理对象的方法调用转发到 InvocationHandler 的 invoke 方法中。在 invoke...

    浅谈JDK动态代理与CGLIB代理去区别

    然而,如果目标类的方法很多,CGLIB可能会更高效,因为它只需创建一次子类,而JDK动态代理每次调用都需要通过InvocationHandler。在内存占用上,两者差别不大,但CGLIB生成的代理类可能略微增加内存负担。 在工具...

    jce_policy用于解决jdk1.6,1.8https调用

    此时,可以通过替换JCE的政策文件(例如,将`jce_policy-66666`和`jce_policy-8888`解压并替换到JDK的`jre\lib\security`目录下)来解除这些限制,使得应用能够使用更强大的加密算法和更大的密钥长度,从而增强通信...

    JDK6 免安装版

    4. **动态代理(Dynamic Proxy)**:JDK6增强了动态代理功能,可以更方便地创建接口的动态实现类,用于AOP(面向切面编程)等场景。 5. **Swing组件更新**:JDK6对Swing GUI库进行了升级,包括新的LookAndFeel和更...

    执行篇:解析JDK 7的动态类型语言支持

    在Java SE 6及以前,JVM主要使用invokestatic、invokevirtual、invokeinterface和invokespecial等指令来调用方法。然而,这些指令在处理动态绑定时效率较低,因为它们在编译期间就确定了方法调用的目标。...

Global site tag (gtag.js) - Google Analytics