天天看点

Java: FreeMarker的配置和使用

freemarker是什么

非常的简单明了。freemarker是一个java包。实现了mvc模式,分离开发者和设计师。也就是分离html也java的代码。

freemarker是如何工作的

Java: FreeMarker的配置和使用

这是官网的图。非常明确的说明了freemarker是如何运作的。首先需要有一个template模板,在那里就是一堆的html标签和一些专属freemarker的标签,这些标签之后会被具体的数据代替。这些数据就是有左下的java objects提供。<freemarker>就是工程中的jar包。他把这些模板和java objects的数据加工组合之后输出html页面。所以,freemarker的功能,就如官网中一直强调的,不是别的而是一个模板引擎。

在工程中最后把这些捏合在一起,让他们彼此知道、协同工作的是web.xml配置文件。这里先介绍web.xml的配置,之后具体说明如何一步一步的添加配置文件中涉及到的模板、java objects等。这样有利于读者从总体出发逐步把握每一个相关的细节。

Java: FreeMarker的配置和使用
Java: FreeMarker的配置和使用

配置依次说明了:有一个叫test的servlet,对应在代码的example包的test类。这个类的名字可以随便起,其他的节点在配置的时候使用的知识servlet-name,然后他会找到这个类。下面的servlet-mapping在url中访问*.do的时候会访问这个servlet-name为test的节点配置的类。之后,在index.jsp中添加一个指向*.do的超链接。整个的整个测试项目就可以run起来了。

按照mvc的方式理解。在servlet-name中配置的类就是controller。view就是模板。model就是之后在hashmap中的数据。下面依次创建在配置文件中直接或者间接需要用到的代码。

添加可运行的代码

这里假设你已经创建了一个web project,这个project的名字叫做test。首先创建模板。一定要在webroot目录下创建一个templates目录。然后在里面添加后缀为ftl(freemarker template的缩写),名称为test的模板。在配置文件中没有出现模板叫什么,所以这里你可以随便命名这个模板文件。这个文件之后会在controller中明确指定。不会出现找不到的问题。

代码:

Java: FreeMarker的配置和使用
Java: FreeMarker的配置和使用

这个模板非常简单。只在h1标签中方了一个需要数据“user”的freemarker标签。这个“user”数据就是在之后的hashmap提供的。

然后添加controller,也就是在web.xml配置文件中指定的example.test类。首先在项目的根目录下,创建一个“example”的包,然后在里面添加一个servlet。servlet的名称设定为test。名字可以随意起,但是在配置文件中的必须和这个类的名称是一致的。

Java: FreeMarker的配置和使用
Java: FreeMarker的配置和使用

代码_config.setservletcontextfortemplateloading(this.getservletcontext(), "templates");指定了模板文件所在的目录,以后的全部的controller的模板文件都是从这个地方找了,也就是前文指定的在webroot下创建的templates目录。在后面的代码template t = _config.gettemplate("test.ftl");中指定了具体的模板文件是哪一个。map root = new hashmap(); root.put("user", "jack");指定了具体的数据model。这个key值必须和在模板中设定的${user}一致。最后在方法t.process(root, out);中,把数据添加到模板中。通过这几步以后,mvc的几个部分就结合到了一起。

最后在index.jsp中添加一个超链接:<a href="hello.do">freemarker first page</a>。整个例子就可以运行了。看那看效果吧。

freemarker是一个功能十分强大的模板引擎。不只有文中介绍的简单的数据的替换,还有指令、宏等功能。非常好用。

参考:

http://freemarker.org/docs/

http://gqsunrise.iteye.com/blog/1659118

欢迎加群互相学习,共同进步。qq群:ios: 58099570 | android: 330987132 | go:217696290 | python:336880185 | 做人要厚道,转载请注明出处!http://www.cnblogs.com/sunshine-anycall/p/4241260.html