摘要:时间年月日星期日说明本文部分内容均来自慕课网。整体目录结构如下项目文件用于数据持久化配置项目配置配置视图解析器配置静态资源映射配置配置配置自定义指令配置解析器配置,类似于项目启动类新建,注册配置类,并将其和当前关联。
时间:2017年3月19日星期日
说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com
教学示例源码:无
个人学习源码:https://github.com/zccodere/s...
本节要点
什么是Freemarker 数据模型+模版=输出(HTML) 前端设计师和程序员的学习侧重点
什么是Freemarker
Freemarker是一款模版引擎 Freemarker不是web框架 官网:http:// freemarker.org
Freemarker原理
前端设计师和程序员的学习侧重点
MVC设计(Model、View、Controller) 前端设计师侧重于View(模版设计) 程序员全面掌握MVC
如何开始?
一点心得
先划一个范围 再定一个目标 创建可行计划 边玩边学1-2 maven构建freemarker项目
本节要点
Maven构建Spring+Freemarker项目 配置文件介绍 运行小例:列表展示
Maven构建Spring+Freemarker项目
Eclipse+Maven使用简介 Maven依赖Spring和Freemarker的jar包 Spring配置文件和Freemarker Servlet配置文件
配置文件介绍
Spring配置文件applicationContext.xml Spring Freemarker Servlet配置文件spring-servlet.xml1-3 maven构建freemarker项目代码实战
我学习时,使用springboot来进行项目搭建,同时,项目基于javaconfig进行配置。
整体目录结构如下:
项目POM文件
4.0.0 com.zccoder myfreemarker 0.0.1-SNAPSHOT org.springframework.boot spring-boot-starter-parent 1.5.1.RELEASE UTF-8 UTF-8 1.8 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-starter-freemarker org.springframework.boot spring-boot-configuration-processor true com.alibaba fastjson 1.2.28 org.springframework.boot spring-boot-maven-plugin
配置Freemarker
package com.myimooc.myfreemarker.config; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; import org.springframework.web.servlet.view.freemarker.FreeMarkerView; import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver; import com.alibaba.fastjson.serializer.SerializerFeature; import com.alibaba.fastjson.support.config.FastJsonConfig; import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; import com.myimooc.myfreemarker.web.controller.RoleDirectiveModel; /** * Web项目SpringMvc配置 * @author ZhangCheng * @date 2017-03-19 * @version V1.0 */ @Configuration @EnableWebMvc @ComponentScan("com.myimooc.myfreemarker") public class SpringMvcConfig extends WebMvcConfigurerAdapter{ /** * 配置视图解析器 * @return */ @Bean public FreeMarkerViewResolver getFreeMarkerViewResolver(){ FreeMarkerViewResolver freeMarkerViewResolver = new FreeMarkerViewResolver(); freeMarkerViewResolver.setOrder(1); freeMarkerViewResolver.setSuffix(".html"); freeMarkerViewResolver.setCache(false); freeMarkerViewResolver.setRequestContextAttribute("request"); freeMarkerViewResolver.setContentType("text/html;charset=utf-8"); freeMarkerViewResolver.setViewClass(FreeMarkerView.class); return freeMarkerViewResolver; } /** * 配置静态资源映射 */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); } /** * 配置FASTJSON * @return */ @Bean public FastJsonHttpMessageConverter fastJsonHttpMessageConverters() { FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures(SerializerFeature.QuoteFieldNames); fastJsonConfig.setCharset(Charset.forName("UTF-8")); fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss"); ListsupportedMediaTypes = new ArrayList (); supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); fastConverter.setSupportedMediaTypes(supportedMediaTypes); fastConverter.setFastJsonConfig(fastJsonConfig); return fastConverter; } /** * 配置FreeMarker * @return */ @Bean public FreeMarkerConfigurer getFreeMarkerConfigurer(){ FreeMarkerConfigurer freeMarkerConfigurer = new FreeMarkerConfigurer(); freeMarkerConfigurer.setDefaultEncoding("UTF-8"); freeMarkerConfigurer.setTemplateLoaderPath("classpath:/templates/"); Properties settings = new Properties(); settings.setProperty("template_update_delay", "5"); settings.setProperty("url_escaping_charset", "UTF-8"); settings.setProperty("defaultEncoding", "UTF-8"); settings.setProperty("whitespace_stripping", "true"); settings.setProperty("boolean_format", "true,false"); settings.setProperty("number_format", "0.##########"); settings.setProperty("locale", "zh_CN"); settings.setProperty("datetime_format", "yyyy-MM-dd HH:mm:ss"); settings.setProperty("date_format", "yyyy-MM-dd"); settings.setProperty("time_format", "HH:mm:ss"); settings.setProperty("tag_syntax", "square_bracket"); settings.setProperty("classic_compatible", "true"); settings.setProperty("template_exception_handler", "ignore"); settings.setProperty("auto_import", "/spring.ftl as spring, /common/spring.ftl as spring"); freeMarkerConfigurer.setFreemarkerSettings(settings); // 配置自定义指令 Map variables = new HashMap (); variables.put("role", new RoleDirectiveModel()); freeMarkerConfigurer.setFreemarkerVariables(variables); return freeMarkerConfigurer; } /** * 配置JSON解析器 */ @Override public void configureMessageConverters(List > converters) { super.configureMessageConverters(converters); converters.add(this.fastJsonHttpMessageConverters()); } }
配置Web,类似于web.xml
package com.myimooc.myfreemarker.config; import java.util.EnumSet; import javax.servlet.DispatcherType; import javax.servlet.FilterRegistration; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRegistration; import org.springframework.context.annotation.Configuration; import org.springframework.web.WebApplicationInitializer; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import org.springframework.web.filter.CharacterEncodingFilter; import org.springframework.web.servlet.DispatcherServlet; /** * Web项目启动类 * * @author ZhangCheng * @date 2017-03-19 * @version V1.0 * */ @Configuration public class WebConfig implements WebApplicationInitializer { @Override public void onStartup(ServletContext servletContext) throws ServletException { AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); context.register(SpringMvcConfig.class); // 新建WebApplication,注册配置类,并将其和当前servletContext关联。 context.setServletContext(servletContext); // 注册SpringMVC的DispatcherServlet。 ServletRegistration.Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(context)); servlet.addMapping("/"); servlet.setLoadOnStartup(1); // 注册SpringMVC的字符过滤器 FilterRegistration.Dynamic encodingFilter = servletContext.addFilter("encoding", new CharacterEncodingFilter()); EnumSetdispatcherTypes = EnumSet.allOf(DispatcherType.class); dispatcherTypes.add(DispatcherType.REQUEST); dispatcherTypes.add(DispatcherType.FORWARD); encodingFilter.addMappingForUrlPatterns(dispatcherTypes, true, "*"); encodingFilter.setInitParameter("encoding", "UTF-8"); } }
新建模版页面
编写控制器
启动项目
1-4 小例子:列表demo展示编写控制器
编写Freemarker
Insert title here ${username}
效果如下:
1-5 补充:springboot集成freemarker输入网址:start.spring.io
第二章:基础技能 2-1 freemarker取值章节简介本节要点
Java中常用的数据模型 取值(插值)指令 逻辑指令:if、switch2-2 Java数据模型、freemarker取值
Java中常用的数据模型
基本类型数据(比如Integer) 封装的对象类型(比如User对象) 集合类型:List、Map
取值指令
常用${var}语法进行取值 对null、不存在对象取值${var!} 取包装对象的值,通过“点”语法:${User.name} 取值的时候进行计算、赋值 Date类型格式${date?string(‘yyyy-MM-dd’)} 如何转义HTML内容:${var?html}2-3 freemarker取java基本数据模型的值
控制器
页面层
效果图
2-4 boolean类型值的format布尔值:${booleanVar?string("yes","no")}
2-5 date类型值的format日期:${dateVar?string("yyyy-MM-dd")}
2-6 null或者不存在的变量取值null:${nullVar!"我是默认值"}
missing:${ssssVar!"我是默认值"}
编写代码:
2. 赋值运算
效果如下:
3-2 自定义对象User变量的取值 3-3 集合List的遍历语法:
[#list listName as item] ${item!}3-4 集合Map的遍历
[/#list]
语法:
[#list map?keys as key] ${key}:${map[key]!}3-5 if语法
[/#list]
语法:
判断某个对象或值是否存在
[#if myList?exists] [/#if] 或 [#if myList??] [/#if]3-6 switch语法
语法:
本节要点
字符串、集合操作 自定义函数 自定义指令
补充表达式指令
+ :字符串连接,集合连接 [index]:下标取值
自定义函数
自定义排序函数 实现TemplateMethodModelEx接口
自定义指令
实现TemplateDirectiveModel接口4-2 string基本操作指令
代码:
6. 字符操作
效果图:
4-3 自定义函数步骤一:编写自定义函数类
步骤二:再返回的控制器里面,添加自定义函数类,并指定方法名
步骤三:在页面使用排序方法
步骤四:验证输出
4-4 list排序内建函数、常用指令使用内建函数进行排序,item_index为下标,默认为升序
[#list mylistinfo?sort as item] ${item_index}:${item}, [/#list]
使用内建函数进行排序,降序
[#list mylistinfo?sort?reverse as item] ${item_index}:${item}, [/#list]
其它常用内建函数
效果图:
4-5 自定义指令步骤一:编写自定义指令类
步骤二:注册自定义指令类
步骤三:页面使用自定义指令
步骤四:验证输出
4-6 freemarker常用内建函数本节要点
处理字符串内建函数 处理数字的内建函数 处理list的内建函数 其他内建函数
处理字符串内建函数
substring、cap_first、ends_with、contains date、datetime、time starts_with、index_of、last_index_of、split、trim
处理数字的内建函数
string、x?string(“0.##”) round、floor、ceiling
梳理List的内建函数
first、last、seq_contains、seq_index_of size、reverse、sort、sort_by chunk
其他内建函数
is函数:is_string、is_number、is_method ()、has_content函数 eval求值4-7 freemarker内建函数代码讲解
代码示例
效果图如下:
4-8 macro、function指令本节要点
宏macro、nested、return指令 函数function、return指令 课程总结
macro、nested、return
macro语法 [@macro_name param /] 调用macro nested语法
function、return
function语法 ${function_name(param)}调用
macro、nested、return章节
macro语法:
[#macro macro_name param1 param2 param3 paramN] Trmplate_code ${param1} [#nested/] [/#macro]
调用
[@macro_name param1=”value1” param2=”value2”/] [@macro_name param1=”value1” param2=”value2”/] Nested_template [@macro_name/]
Function语法:
[#function function_name param1 param2] [#return param1 + param2] [/#function]
调用
${doAdd(100,100)}
代码示例
效果如下
第五章:课程总结 5-1 课程总结文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/66856.html
摘要:时间年月日星期四说明本文部分内容均来自慕课网。哈希表实现命令,将哈希表中的域的值设为实现命令,返回哈希表中给定域的值实现命令,删除哈希表中的一个或多个指定域,不存在的域将被忽略。实现命令,返回哈希表中,所有的域和值。 时间:2018年04月19日星期四说明:本文部分内容均来自慕课网。@慕课网:https://www.imooc.com教学源码:https://github.com/zc...
时间:2017年07月09日星期日说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学源码:无学习源码:https://github.com/zccodere/s... 第一章:概述 1-1 课程概述 主要内容 验证码历史 课程内容 不同方案对比 设计与实现 总结 1-2 验证码历史 验证码历史 无验证码:垃圾骚扰 Luis von Ahn:Captcha 不断...
摘要:时间年月日星期六说明本文部分内容均来自慕课网。可以更加专注于业务逻辑开发,缩短项目开发周期,提高项目开发速度。 时间:2017年07月15日星期六说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学源码:无学习源码:https://github.com/zccodere/s... 第一章:课程介绍 1-1 课程介绍 在用户进行信息概略浏览的时候,提供缩...
摘要:时间年月日星期五说明本文部分内容均来自慕课网。慕课网教学源码无学习源码第一章课程简介引言通过一个项目案例的讲解,如何在应用中实现图片水印的添加。 时间:2017年07月21日星期五说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学源码:无学习源码:https://github.com/zccodere/s... 第一章:课程简介 1-1 引言 通过一...
摘要:到目前为止,使用越来越广泛,不光光只是它强大的生成技术,而且它能够与进行很好的集成。注意使用数字范围来定义集合时无需使用方括号数字范围也支持反递增的数字范围如对象对象使用花括号包括中的对之间以英文冒号分隔,多组对之间以英文逗号分隔。 Freemarker的介绍 Freemarker 是一款模板引擎,是一种基于模版生成静态文件的通用 工具,它是为程序员提供的一个开发包,或者说是一个类...
阅读 3840·2021-11-18 13:22
阅读 1771·2021-11-17 09:33
阅读 2864·2021-09-26 09:46
阅读 1149·2021-08-21 14:11
阅读 2855·2019-08-30 15:53
阅读 2661·2019-08-30 15:52
阅读 1858·2019-08-30 10:52
阅读 1502·2019-08-29 15:30