人生只若如初见之FreeMarker

本文介绍了Freemarker模板引擎的基础知识,包括其在Java Web项目中的应用方式、常用指令和配置方法。通过实例展示了如何在Spring MVC框架下集成Freemarker。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   

  以前在接触PHP的时候,尝试体验过smarty模板的魅力,得知PHP模板有茫茫多,可惜经历有限,没有逐个尝试。在后来接触J2EE之后,发现java也有模板,只不过官方改名叫JSTL,功能也算够用,慢慢了解到由于解析效率和书写惯性的原因,有一套应用的比较广泛的入门级别模板叫FreeMarker,今天抓紧补补。

      相比较PHP的开源,贵族气质般的java从IDE到好多插件都是收费的,于是乎就有了各种以free为前缀的东西:Jfreechart,收费的MyEclipse,IDEA等等。提到IDEA,就来气:同样一个公司出的PHPStrom开始都是不收费的。不发牢骚,好了下面正式开始。

     百度之: FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件配置文件源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。

    先上手案例:

<html><br> 
<head><br> 
<title>Welcome!</title><br> 
</head><br> 
<body><br> 
<#-- 注释部分 --><br> 
<#-- 下面使用插值 --> 
<h1>Welcome ${user} !</h1><br> 
<p>We have these animals:<br> 
<u1><br> 
<#-- 使用FTL指令 --> 
<#list animals as being><br> 
   <li>${being.name} for ${being.price} Euros<br> 
<#list><br> 
<u1><br> 
</body><br> 
</html> 

从这里边能看到freemarker的基本组成部分:

  1. 注释 <#----->
  2. 数据输出 ${model.data} 、
  3. FTL指令 <#directivename parameter> 

注释就不用说了,下面来看一个数据输出:

  1.    通用输出: ${expr}
  • 结果为字符串值:直接输出表达式结果 
  • 结果为数字值:根据默认格式(由#setting指令设置)将表达式结果转换成文本输出.可以使用内建的字符串函数

   2  .数字格式化插值:#{expr}或#{expr;format}

           mX:小数部分最小X位 
           MX:小数部分最大X位 
           如下面的例子: 
        <#assign x=2.582/>  #{x; M2} <#-- 输出2.58 --> 
          <#assign y=4/>     #{y; M2} <#-- 输出4 --> 
     下面来看看常用的指令

  1.         if指令
<#if condition>... 
<#elseif condition>... 
<#elseif condition>... 
<#else> ... 
</#if>
  1.  switch , case , default , break指令
<#switch value> 
<#case refValue>...<#break> 
<#case refValue>...<#break> 
<#default>... 
</#switch>
  1. list, break指令

list指令是一个迭代输出指令,用于迭代输出数据模型中的集合,list指令的语法格式如下: 
<#list sequence as item> 
... 
</#list> 
上面的语法格式中,sequence就是一个集合对象,也可以是一个表达式,但该表达式将返回一个集合对象,而item是一个任意的名字,就是被迭代输出的集合元素.此外,迭代集合对象时,还包含两个特殊的循环变量: 
item_index:当前变量的索引值 
item_has_next:是否存在下一个对象 
也可以使用<#break>指令跳出迭代 

<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as x> 
${x_index + 1}.${x}<#if x_has_next>,</if> 
<#if x="星期四"><#break></#if> 
</#list> 

其他比较详细的讲解可以参考http://blog.youkuaiyun.com/fhx007/article/details/7902040/

下面简单说一下在项目中如何引入

 1.maven中使用的话,pom.xml中添加依赖

2.spring的配置文件 applicationContext.xml 中添加bean

<!-- Freemarker配置 -->  
<bean id="freemarkerConfig"  
      class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">  
    <property name="templateLoaderPath" value="/WEB-INF/view/" />  
    <property name="freemarkerSettings">  
        <props>  
            <prop key="template_update_delay">0</prop>  
            <prop key="default_encoding">UTF-8</prop>  
            <prop key="number_format">0.##########</prop>  
            <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>  
            <prop key="classic_compatible">true</prop>  
            <prop key="template_exception_handler">ignore</prop>  
        </props>  
    </property>  
</bean>  

3.springMVC配置文件 springmvc-servlet.xml 中配置

<!--视图解释器 -->  
<bean id="viewResolver"  
      class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">  
    <property name="suffix">  
        <value>.ftl</value>  
    </property>  
    <property name="contentType" value="text/html;charset=UTF-8"></property>  
</bean> 

4.控制器controller中装填数据

public class HelloWordController implements Controller {  
  
    @Override  
    public ModelAndView handleRequest(HttpServletRequest hsr  
            , HttpServletResponse hsr1) throws Exception {  
        ModelAndView mv = new ModelAndView("hello");  
        mv.addObject("title", "Spring MVC And Freemarker");  
        mv.addObject("content", " Hello world , test my first spring mvc ! ");  
        return mv;  
    }  
}  

5.对用view中获取数据

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"   
 "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
    <head>  
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
        <title>${title}</title>  
    </head>  
    <body>  
        ${content}  
    </body>  
</html> 

 

转载于:https://my.oschina.net/u/1031097/blog/843164

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值