FreeMarker模板引擎替代jsp的用法

选择freemarker的原因:
1、性能。velocity应该是最好的,其次是jsp,普通的页面freemarker性能最差(虽然只是几毫秒到十几毫秒的差距)。但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好。
2、宏定义比jsp tag方便
3、内置大量常用功能。比如html过滤,日期金额格式化等等,使用非常方便
4、支持jsp标签
5、可以实现严格的mvc分离

、概述
FreeMarker 是一个使用纯 Java 开发的模版引擎,一个基于模板生成文本输出的通用工具,FreeMarker 被设计用来生成 HTML Web 页面,特别是基于 MVC 模式的应用程序,虽然 FreeMarker 具有一些编程的能力,但通常由 Java 程序准备要显示的数据,由FreeMarker 生成页面,通过模板显示准备的数据(如下图)

FreeMarker 不是一个 Web 应用框架,而适合作为 Web 应用框架一个组件。FreeMarker 与容器无关,因为它并不知道 HTTP 或 Servlet;FreeMarker 同样可以应用于非Web应用程序环境,FreeMarker 更适合作为 Model2 框架(如 Struts)的视图组件,你也可以在模板中使用 JSP标记库。另外,FreeMarker是免费的。
一、Freemarker的准备条件
freemarker.2.3.16.jar
maven坐标


    <dependency>
        <!--在spring中使用Freemarker这个必不可少,否则报错-->  
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>4.3.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
        <version>2.3.16.</version>
    </dependency>

二、Freemarker生成静态页面的原理
Freemarker 生成静态页面,首先需要使用自己定义的模板页面,这个模板页面可以是最最普通的html,也可以是嵌套freemarker中的 取值表达式, 标签或者自定义标签等等,然后后台读取这个模板页面,解析其中的标签完成相对应的操作, 然后采用键值对的方式传递参数替换模板中的的取值表达式,做完之后 根据配置的路径生成一个新的html页面, 以达到静态化访问的目的。

三、FreeMarker模板文件主要由如下4个部分组成:
1、文本,直接输出的部分
2、注释,即<#–…–>格式不会输出
3、插值(Interpolation):即${..}或者#{..}格式的部分,将使用数据模型中的部分替代输出
4、FTL指令:FreeMarker指令,和HTML标记类似,名字前加#予以区分,不会输出。
代码 示例:
springmvc Controller代码

@Controller
public class FreemarkerController {

    @RequestMapping("/index")
    public String Add(Model model,HttpServletRequest request, HttpServletResponse response) {
        //java往ftl模板中插入数据
        model.addAttribute("url", "http://freemarker.org/");
        model.addAttribute("name", "xiaming");
        model.addAttribute("message", "Welcome to use Freemarker");


        List<User> users = new ArrayList<User>();
        User u = new User();
        u.setId(10080);
        u.setName("zhangsan");
        u.setAge(118);

        users.add(u);
        model.addAttribute("users", users);

        return "index";
    }
}

模板文件 index.ftl

<!DOCTYPE html>
<html>
<head>
 <title>freemarker-web测试</title>
</head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<h1>Welcome to here!</h1> 
<!-- ftl模板中取数据 -->
<a href="${url}">${name!},${message!}</a><br/>
<!--  name值为null,取name值会报错,可写成 name!"这是null值" / name!"" / name! -->

    <div>
    <#list users as u>
            编号:${u.id}/名字:${u.name}/年龄:${u.age}
    </#list>
    </div>
</body>
</html>
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值