第一章 FreeMarker简单应用
一、简单实例
1、创建Web application:freeMarker,导入reemarker-2.3.16\lib\freemarker.jar
2、创建Servlet:ActionServlet.java
package com.zh.servlet;
import …………;
public class ActionServlet extends HttpServlet {
//声明Configuration对象
private Configuration cfg;
//在实例化Servlet时初始化Configuration
public void init() throws ServletException {
// Initialize the FreeMarker configuration;
// 初始化FreeMarker的Configuration
// - 创建Configuration实例
cfg = new Configuration();
// - 设置模板文件的目录路径
cfg.setServletContextForTemplateLoading
(getServletContext(), null); }
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
//Build a data-model:创建数据模型
Map root = new HashMap();
root.put("message", "hello world!");
//Get the templat object:取得一个模板
Template t = cfg.getTemplate("free.html");
//Get a out flow:取得输出流
Writer out = response.getWriter();
//Merge the data-model and Template
//:合并:数据模型+模板=输出
try {
t.process(root, out);
//t为模板,加入数据模型root
} catch (TemplateException e) {
throw new ServletException(
"Error while processing template", e);
}
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
}
3、创建模板:free.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
${message}
</body>
</html>
这样就正确的跳转到free.html页面并输出了:hello world!
简单总结:
1 初始化Configuration:Configuration cfg = new Configuration();
2 设置模板路径:此种方式是设置为应用程序根目录下:
cfg.setServletContextForTemplateLoading(getServletContext(), null);
可更改null为“xxDirectory/xxDirectory”某个目录下。
3 创建数据模型:Map root = new HashMap();
添加数据:root.put("message", "hello world!");
4 取得模板:Template t = cfg.getTemplate("free.html");
直接从cfg.set……设置的目录查找此“模板”,如果参数2为null,直接从根目录下查找,当然模板也可以写为:Template t = cfg.getTemplate("xxDirectory/free.html")
5 取得输出流:Write out = response.getWrite();
6 合并数据模型+模板:t.process(root, out);
此方法直接会使浏览器跳转到指定“模板”页面,而不是forward/sendRedirect等方式。
二、实例应用2
在前面实例了的基础上,进一步的操作。
1、创建Page.java,它对Template、Map进一步封装
package com.zh.servlet;
import java.util.HashMap;
import java.util.Map;
public class Page {
private String template; //模板路径及文件
private String forward; //跳转页面
private Map root = new HashMap(); //数据模型
//取得模板
public String getTemplate() {
return template;
}
public void setTemplate(String template) {
//设置模板,跳转页面为空
forward = null;
this.template = template;
}
//向数据模型添加数据
public void put(String name, Object value) {
root.put(name, value);
}
public void put(String name, int value) {
root.put(name, new Integer(value));
}
public void put(String name, double value) {
root.put(name, new Double(value));
}
public void put(String name, boolean value) {
root.put(name, new Boolean(value));
}
//取得跳转页面
public String getForward() {
return forward;
}
public void setForward(String forward) {//设置跳转页面
this.template = null;
this.forward = forward;
}
public Map getRoot() {//取得模型
return root;
}
public void setRoot(Map root) {
this.root = root;
}
}
2、创建src/com/zh/config/action.properties
#class name + method name
#请求路径/类名/方法名.page
#Test
test.driver = com.zh.action.Test
test.mm = mm
3、修改ActionServlet.java的doGet()方法
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
String action = request.getServletPath();//取得请求路径
String action1 = null; //类名
String action2 = null; //方法名
//从请求路径路径中取出类名
if (action == null) action = "index";
if (action.startsWith("/")) action = action.substring(1);
if (action.lastIndexOf(".") != -1) {
action = action.substring(0, action.lastIndexOf("."));
}
if (action.indexOf("/") != -1) {
String[] str = action.split("/");
action1 = str[0]; //取得类名
action2 = str[1]; //取得方法名
}
Properties pro = new Properties();
pro.load(Thread.currentThread().getContextClassLoader()
.getResourceAsStream("com/zh/config/action.properties"));
String driver = pro.getProperty(action1 + ".driver");
String me = pro.getProperty(action1 + "." + action2);
//通过反射调用方法,传递参数request/page
Page page = new Page();
if(!(driver == null && me == null)) {
try {
Class<?> c = Class.forName(driver);
Method mehtod = c.getMethod(me,
new Class[]{HttpServletRequest.class, Page.class});
mehtod.invoke(c.newInstance(),
new Object[] {request, page});
} catch (Exception e) {
e.printStackTrace();
}
}
if(page != null && page.getTemplate() != null) {
Template t = cfg.getTemplate(page.getTemplate());
// //Get a out flow
Writer out = response.getWriter();
//Merge the data-model and Template
try {
t.process(page.getRoot(), out); } catch (TemplateException e) {
throw new ServletException("Error while processing ", e);
}
} else {
request.getRequestDispatcher(page.getForward())
.forward(request, response);
}
}
4、编写action,方法的声明必须固定:例:com/zh/action/Test.java
public class Test {
public void mm(HttpServletRequest request, Page page) {
page.put("message", "hello world!");
List list = new ArrayList();
list.add("01aaaaa");
list.add("02aaaaa");
list.add("03aaaaa"); //添加
page.put("alist", list); //添加List
page.setTemplate("WEB-INF/free.html");//设置模板
}
}
自定义的类与方法必须在action.properties中配置,同上。
5、在请求地址中必须写成:类名/方法名.page的格式。如下
<a href="test\mm.page">跳转到模板</a>
6、模板页面的存放位置必须page.setTemplate("WEB-INF/free.html")相一致
<body>
${message}<br>
<#list alist as a>
${a}<br>
</#list>
</body>
输出结果:
hello world!
01aaaaa
02aaaaa
03aaaaa
分享到:
相关推荐
在这个“freemarker简单例子”中,我们将深入理解Freemarker的基本概念、配置以及如何在实际项目中使用。 1. **Freemarker基本概念** - **模板(Template)**:Freemarker的核心是模板,它定义了最终输出的静态...
俗话说万事开头难,这句话对于我们程序员来说非常的适用,刚接触一门新的东西,...FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序
通过这个简单的例子,我们可以看到Spring MVC和Freemarker的集成过程。在实际开发中,这只是一个基础的配置,可以根据项目需求进行更复杂的模板设计和数据绑定。例如,可以利用Freemarker的条件判断、循环结构、函数...
Freemarker是一个强大的Java模板引擎,常用于动态生成HTML或其他类型的文本文件,广泛应用于Web开发领域,特别是MVC模式中的视图部分。本项目示例将深入探讨如何使用Freemarker来生成静态HTML页面,帮助你理解其基本...
本教程将介绍如何在Java Web项目中利用FreeMarker进行JSP页面的静态化,适合初学者入门学习。 1. **FreeMarker基本概念** FreeMarker是一个基于模板的语言,它与编程语言不同,不包含任何控制结构或函数调用。它的...
FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件 FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境 FreeMarker更适合作为Model2框架(如Struts...
本实例将深入探讨FreeMarker在Struts2中的应用,以及如何通过PPT形式进行演示。 1. **FreeMarker的基本概念** - **模板语言**:FreeMarker使用简单的文本文件作为模板,其中包含动态和静态内容的混合,动态内容由...
在这个"Freemarker自定义标签简单案例"中,我们将深入探讨如何利用Freemarker进行模板设计,并结合自定义标签来增强模板的功能。 首先,让我们理解Freemarker的基础知识。Freemarker是一个与语言无关的模板引擎,它...
FreeMarker 是一个强大的模板引擎,常用于Java应用中生成HTML、XML等动态内容。它允许开发者使用简单的模板语言(TL)来分离业务逻辑和视图层。本篇将深入探讨如何自定义FreeMarker标签,以扩展其功能并适应特定项目...
此资源包“Freemarker2.3.16_带简单教程”提供了Freemarker 2.3.16版本的相关学习材料,包括官方文档和教程,帮助初学者快速上手。 《freemarker中文手册文档.doc》是Freemarker的中文参考手册,详细介绍了...
通过以上步骤,你已经成功地在Java应用中集成了FreeMarker并创建了一个简单的动态页面。随着对FreeMarker的深入学习,你会发现它能实现更复杂的逻辑和布局,成为强大的视图层解决方案。在实际开发中,FreeMarker常与...
Freemarker是一个强大的模板引擎,常用于Java应用中的视图层渲染,比如Spring MVC框架。它允许开发者使用简单的模板语言来动态生成HTML或其他格式的文本。在Freemarker中,`List`是一种非常常用的数据结构,它允许...
在这个"freemarker示例工程"中,它与Struts2框架结合使用,构建了一个完整的MVC(Model-View-Controller)架构的应用。Struts2是Apache软件基金会的开源项目,是一个基于MVC设计模式的Java web框架,它提供了对...
在本文中,我们将深入探讨如何使用Spring 3.2.1 MVC框架与Freemarker模板引擎结合,构建一个简单的Web应用程序。Spring MVC是Spring框架的一部分,它为开发RESTful Web服务提供了强大的支持,而Freemarker则是一个轻...
在本文中,我们将深入探讨如何在Spring Boot 2框架中集成Hibernate ORM框架和FreeMarker模板引擎,以构建一个简单的Web应用程序。Spring Boot以其简洁的配置和开箱即用的特性,已经成为Java开发者首选的微服务开发...
2. **易用性**:FreeMarker使用简单的语法,模板设计人员不需要掌握复杂的编程语言,只需要理解数据结构和模板语法,就能完成页面设计。 3. **高效性能**:由于FreeMarker是编译型模板引擎,模板在运行时会被编译成...
- **语法**:Velocity的语法相对简单,而FreeMarker的语法更加丰富,可以实现更多复杂的逻辑。 - **性能**:FreeMarker通常在处理大量数据时表现更好,因为它优化了模板解析和执行。 - **学习曲线**:Velocity的学习...
在实际项目中,一个简单的代码生成工具可能会利用SpringMVC和MyBatis的组合,通过用户输入的表结构信息,自动生成对应的实体类、Mapper接口、Mapper XML文件以及FreeMarker模板。这样的工具可以极大地提高开发效率,...
FreeMarker的模板语言是一种声明式的编程方式,它允许开发者通过简单的标记语法来控制输出。这些标记不包含执行逻辑,而是与数据模型结合以生成最终输出。例如,`<#if>`、`<#foreach>`用于条件判断和循环,`...