`
yuexj
  • 浏览: 8775 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Freemarker 实现页面的静态化 课上笔记

阅读更多
1. FreeMarker模板引擎的使用: 模板 + 数据模型 = 输出
  1) FreeMarker模板:一个普通文本文件,其中使用了一些FreeMarker的特别标记。
  2) 数据模型:存放了数据的数据结构,通常是一个Hash存储结构(如:HashMap)
  3) FreeMarker框架负责将一个数据模型中的数据合并到模板中,从而生成输出
 
2. 配置使用环境: 下载并把freemarker-2.x.x.jar放置到应用程序的classpath下。

3. Java应用:
   1) 创建数据模型: Map<String, Object> root = ....
   2) 创建模板: xxx.ftl
   3) 合并:
//创建一个Configuration实例来初始freeMarker的配置 //在classpath下添加一个名为freemarker.properties
Configuration cfg = new Configuration();
//设置模板文件的存放目录
cfg.setDirectoryForTemplateLoading(new File("templates"));
//加载指定的模板
Template t = cfg.getTemplate("first.ftl");
//处理合并
t.process(root, new OutputStreamWriter(System.out));

4. web应用中直接使用FreeMarker: 在Servlet的请求处理方法中:
//创建一个Configuration实例来初始freeMarker的配置
Configuration cfg = new Configuration();
//设置模板文件的存放目录
cfg.setServletContextForTemplateLoading(getServletContext(),"/templates");
//加载指定的模板
Template t = cfg.getTemplate("first.ftl", "UTF-8");
//处理合并
t.process(getDataModel(), response.getWriter());

★5. FTL(FreeMarker模板语言)语法:
1) 模板文件由4部分组成:
   a) 文本:直接输出的部分
   b) 注释:<#--  注释内容 -->  不会输出
   c) 插值(interpolation):${表达式} 或 #{表达式} ,将使用数据模型中的数据替换后再输出
   d) FTL指令:
                内置(预定义)指令:<#指令名 属性名="值">主体</#指令名>  如:<#if user??>${user.loginname}</#if>
                自定义指令: <@指令名 属性名="值">主体</@指令名>

2) 插值规则
a) 表达式放置在插值语法${}之中,用于输出表达式的值。
b) 表达式的值的类型可以是:字符串、 数字、布尔、日期时间、序列、Hash结构
c) 表达式支持Java中的所有运算符:
    算术运算符:+、-、*、/、%
    比较运算符:==(eq)、!=(ne)、>(gt)、>=(gte)、<(lt)、<=(lte)
    逻辑运算符:&&(and)、||(or)、!(not)
    三目运算符:? :

d) 内置函数:
    Ⅰ) 使用方式:表达式?函数名[(实参)]
    Ⅱ) 字符串的内置函数: substring(from[, to])、html、length、trim、url
             示例:<#setting url_escaping_charset="UTF-8"> 、exp?url[("UTF-8")]
    Ⅲ) 数字的内置函数:c、string[(数字模式串)]、
    Ⅳ) 布尔的内置函数:string[("男", "女")]
    Ⅴ) 内置的日期时间函数:string[("格式模式串")]、datetime、date、time
e) 序列:
         在FTL中定义的序列:由方括号包括,各元素用英文逗号分隔如:<#assign seq=["winter", "spring", "summer", "autumn"]>
         也可以用数字范围(递增、反递增)定义数字序列: <#assign nums=101..105>  或 <#assign nums=105..101>
         在数据模型中:可以是List对象、Set对象
         序列的内置函数:size、sort[("指定字段作排序依据")]
f) Hash结构:
         在FTL文件中直接定义时:由大括号包括,由逗号分隔键/值列表,键和值之间用冒号分隔。键必须是字符串。<#assign scores={"语文":78, "数学":89, "英语":87}>${scores.语文}
         在数据模型中:可以是Map对象
    Hash的内置函数:size、keys、values

3) FreeMarker中的空值判断
  a) 判断是否为空值:用??(?if_exists,?exists) 如果不为空返回true,否则返回false。
  b) 通过Configuration设置:Configuration cfg = new Configuration(); cfg.setClassicCompatible(true);
  c) 属性配置方式:在freemarker.properties文件中classic_compatible=true
  d) 通过ftl设置:在ftl文件头前加入<#setting classic_compatible=true>
  e) 在FTL中遍历序列、Hash结构时:<#if userList??><#list userList as user>....</#list></#if>
 
4) 常用内置指令:
  a) if/else
<#if condition>
  ...
<#elseif condition2>
  ...
<#elseif condition3>
  ...
...
<#else>
  ...
</#if>

  b) switch/case
<#switch value>
  <#case refValue1>
    ...
    <#break>
  <#case refValue2>
    ...
    <#break>
  ...
  <#case refValueN>
    ...
    <#break>
  <#default>
    ...
</#switch>

  c) list
<#list sequence as item>  <#-- item_index 当前迭代项的索引 -->
    ...
</#list>

  d) include 包含指定文件。类似于JSP中的include标准动作
<#include "文件路径" [encoding="charset"] [parse=true|false]>

  e) import 导入指定模板中的所有变量。
<#import "文件路径"  as hash>

  f) noparse 不处理该指令中包含的内容
<#noparse>
  …
</#noparse>

  g) assign: 为当前模板页面创建或替换一个顶层变量
<#assign name=value>
<#assign name1=value1 name2=value2 ... nameN=valueN>

  h) global:创建或替换一个命名空间全局范围作用域的顶层变量
  i) local:创建或替换一个局部作用域的顶层变量
  j)setting 设置FreeMarker运行时的属性.语法:<#setting name=value>
name常用的有:
locale:该模板所使用的语言环境选项。en,zh,zh_CN,zh_TW
number_format:数字格式化输出的格式
boolean_format:布尔值格式化输出的格式
date_format,time_format,datetime_format:日期时间格式化输出的格式
time_zone:格式化输出日期时间所使用的时区。
url_escaping_charset:URL编码的字符集。

  k) 自定义指令:<#macro 指令名 属性名...>...</#macro>

6. Web应用中整合FreeMarker:FreeMarker提供了FreemarkerServlet类来整合模板到Web应用中:
  1) 这个Servlet在数据模型中放置了三个Hash结构:Request, Session, Application,分别用来访问请求,会话,应用上下文中的属性。
             访问作用域中的属性时,没有指定Hash结构名,它会依次按Request,Session,Application顺序搜索。
  2) 它还提供了一个名为RequestParameters的Hash结构,用来访问HTTP请求中的参数数据。
 
7. Struts2中整合FreeMarker: Struts2默认就是使用FreeMarker来产生所有UI标签的HTML标记。
  1) 对提供了FreeMarkerResult来支持FTL页面。
     <result type="freemarker">/templates/info.ftl</result>
  2) FreeMarker针对Struts2提供了以下内置Hash结构:
     a) stack: 代表ValueStack本身,可通过如下方式来访问其中的变量"${stack.findString('ognl expr')}"
     b) action: 代表刚刚执行过的Action实例
     c) response: 代表HpptServletResponse实例
     d) res: 代表HpptServletResponse实例
     e) request: 代表HpptServletRequest实例
     f) req: 代表HpptServletRequest实例
     g) session: 代表HpptSession实例
     h) application: 代表ServletContext实例
     i) base: 代表用户请求的上下文路径.

8. 使用FreeMarker完成页面的静态化:
 
分享到:
评论

相关推荐

    FreeMarker笔记1

    在实际项目中,FreeMarker可能与服务类如`StaticPageServiceImpl`结合,用于动态生成静态页面。此类可能包含方法,如`generatePage(FreeMarkerTemplate, DataModel)`,用于根据模板和数据模型生成HTML页面。 通过...

    freemarker笔记

    在本篇笔记中,我们将深入探讨Freemarker的核心概念、语法结构和表达式。 一、核心概念 1. Scalars(标量): - 字符串:用单引号或双引号括起来的文本,例如 'hello' 或 "world"。 - 数字:直接写出数字,例如 ...

    freemarker资料汇总

    《FreeMarker设计指南1.ppt》可能是幻灯片形式的讲解材料,它可能会以图形化的方式解释Freemarker的工作原理,帮助学习者直观理解模板引擎的运行流程。 最后,基础语法的文本文件《Freemarker基础语法.txt》和...

    FreeMarker学习资料整理

    综上所述,FreeMarker是一个强大的模板引擎,通过与Java应用的结合,能有效实现动态内容的生成。从基础语法到实际应用,都需要我们不断学习和实践。提供的学习资料将帮助初学者快速上手,逐步掌握FreeMarker的精髓。

    尚硅谷SpringBoot核心技术笔记-视频-资料(全)

    它提供了RESTful API的创建工具,支持模板引擎如Thymeleaf和Freemarker,以及静态资源处理。通过学习资料,你可以掌握如何构建控制器,处理HTTP请求,并创建响应。 SpringBoot还内置了健康检查、监控和Actuator等...

    Struts2.0培训笔记

    Struts2.0支持多语言环境,可以通过配置文件实现页面内容的国际化,为不同地区的用户提供本地化的服务。 九、 strut2的过滤器 Struts2.0框架的核心是StrutsPrepareAndExecuteFilter过滤器,它负责拦截HTTP请求,将...

    SSM笔记-SpringMVC的CRUD和静态资源

    本笔记主要围绕SpringMVC进行CRUD(Create、Read、Update、Delete)操作,并探讨如何在配置请求映射后正确处理静态资源。 ### 1. SpringMVC基本概念 SpringMVC是Spring框架的一部分,用于构建Web应用程序。它通过...

    springboot学习笔记源码

    这个"springboot学习笔记源码"包含了基于JSP、JPA和FreeMarker的实践项目,非常适合初学者或者希望深入理解SpringBoot集成这些技术的开发者进行学习。 1. **SpringBoot核心概念** SpringBoot的核心特性包括自动...

    SpringBoot学习笔记完整教程

    了解如何配置这些库,并在项目中替换默认的 JSON 序列化与反序列化机制。 4. **全局异常捕捉**:Spring Boot 提供了统一的异常处理机制,通过@ControllerAdvice 和 @ExceptionHandler 注解,可以定义全局的异常...

    SpringBoot学习笔记所有源码集

    SpringBoot学习笔记所有源码集,包括 集成了freemarker、Servlet、拦截器、拦截器、Filter、静态资源处理、启动加载数据、Springboot 日志、JDBC使用、Springboot JPA、Mybatis、动态数据源、集成swagger、集成Redis...

    Spring Boot 学习笔记完整教程.docx

    - **Thymeleaf** 和 **FreeMarker**:集成模板引擎,用于动态生成 HTML 页面,理解模板语法和数据绑定。 15. **Spring Boot 集成 JSP** - **配置 JSP**:在 Spring Boot 中启用对 JSP 的支持,设置视图解析器,...

    spring+hibernate+struts2使用笔记

    - **国际化支持**:内置对国际化和本地化的支持,方便实现多语言应用。 - **强大的表单处理能力**:提供自动的数据绑定和验证功能,简化了前端表单处理的工作量。 ### 二、MVC设计模式详解 #### 1. MVC的概念 MVC...

    Spring Boot 学习笔记完整教程new

    13. **使用模板引擎**:Spring Boot支持多种模板引擎,如Thymeleaf和FreeMarker,用于生成动态HTML页面。 14. **集成JSP**:虽然Spring Boot首选模板引擎,但也可以通过配置支持JSP视图解析,不过这需要额外的步骤...

    web基础笔记

    web基础笔记 Web 基础知识 Web 应用通过浏览器访问,运行在远程的服务器上,访问网站。浏览器是通用的客户端,B/S 结构的客户端。服务器端内容更新客户端不要更新,更新对用户影响不大。 客户端和服务器端 ...

    freemark笔记

    ### Freemarker 笔记知识点详解 #### 一、Freemarker 概述 Freemarker 是一款用 Java 编写的模板引擎,它基于模板来生成文本输出。模板中可以包含静态数据、简单表达式、控制结构(循环/条件语句)、宏等。它常...

    struts2学习笔记

    在深入探讨Struts2的学习笔记之前,先来理解它的核心概念。 **1. Struts2依赖的JAR包** Struts2的运行离不开一系列的依赖库,包括: - `struts2-core-2.1.6.jar`:这是Struts2的核心库,包含了Struts2框架的主要...

    Struts2深刻理解所记的笔记

    7. **全站资源文件的引用**:在使用JSP页面时,Struts2支持直接引用全站范围内的资源文件,简化了静态资源的管理。 8. **输入验证与错误处理**:Struts2提供了强大的验证机制,通过ActionSupport类的validate()方法...

    springboot学习思维笔记.xmind

    springboot学习笔记 spring基础 Spring概述 Spring的简史 xml配置 注解配置 java配置 Spring概述 Spring的模块 核心容器CoreContainer Spring-Core Spring-Beans ...

Global site tag (gtag.js) - Google Analytics