spring mvc中使用freemark的一点心得
参考文档: FreeMarker标签与使用 连接http://blog.csdn.net/nengyu/article/details/6829244
freemarker学习笔记--指令参考: http://www.cnblogs.com/pengfeisun/articles/1623182.html
Freemarker 高级进阶
jsp的第一次运行,就要运行servlet,如果开发时频繁的修改jsp,会导致开发速度比较慢;(每改一次,要重新编译一次);
编译过后,模板的速度也要比jsp快.
具体的freemark页面上的使用:见http://blog.csdn.net/nengyu/article/details/6829244
最近做的项目中要在spring mvc中实现freemark 加载html模板,关键实现如下:
引入freemark.jar包
web.xml中的配置
<!-- freemarker 配置 -->
<bean id="freeMarkerConfigurer"
class="com.test.common.freemarker.CustomFreeMarkerConfigurer"> <!--freemark的配置文件类-->
<property name="templateLoaderPaths">
<list>
<value>/WEB-INF/template/</value> <!--html文件的存放位置-->
</list>
</property>
<property name="freemarkerSettings">
<props>
<prop key="template_update_delay">5</prop>
<prop key="default_encoding">UTF-8</prop>
<prop key="locale">zh_CN</prop>
<prop key="url_escaping_charset">UTF-8</prop>
<prop key="date_format">yyyy-MM-dd</prop>
<prop key="time_format">HH:mm:ss</prop>
<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
<prop key="number_format">0.######</prop>
<prop key="boolean_format">true,false</prop>
<prop key="classic_compatible">true</prop>
<prop key="whitespace_stripping">true</prop>
</props>
</property>
</bean>
<!-- freemark 页面解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" />
<property name="contentType" value="text/html; charset=utf-8" />
<property name="exposeSpringMacroHelpers" value="true"/>
<property name="cache" value="true" />
<property name="suffix" value=".html" />
<property name="order" value="1" />
</bean>
配置文件类: com.test.common.freemarker.CustomFreeMarkerConfigurer
public class CustomFreeMarkerConfigurer extends FreeMarkerConfigurer {
@Override
protected TemplateLoader getAggregateTemplateLoader(
List<TemplateLoader> templateLoaders) {
<!-- HtmlTemplateLoader 这个类用来自定义html模板 -->
return new HtmlTemplateLoader(super.getAggregateTemplateLoader(templateLoaders));
}
}
自定义html模板类:HtmlTemplateLoader,加escape html指令, escape指令在解析模版时起作用,而不是运行时起作用
public class HtmlTemplateLoader implements TemplateLoader {
private static final String HTML_ESCAPE_PREFIX= "<#escape x as x?html>";
private static final String HTML_ESCAPE_SUFFIX = "</#escape>";
private final TemplateLoader delegate;
public HtmlTemplateLoader(TemplateLoader delegate) {
this.delegate = delegate;
}
/* (non-Javadoc)
* @see freemarker.cache.TemplateLoader#closeTemplateSource(java.lang.Object)
*/
@Override
public void closeTemplateSource(Object templateSource) throws IOException {
delegate.closeTemplateSource(templateSource);
}
/* (non-Javadoc)
* @see freemarker.cache.TemplateLoader#findTemplateSource(java.lang.String)
*/
@Override
public Object findTemplateSource(String name) throws IOException {
return delegate.findTemplateSource(name);
}
/* (non-Javadoc)
* @see freemarker.cache.TemplateLoader#getLastModified(java.lang.Object)
*/
@Override
public long getLastModified(Object templateSource) {
return delegate.getLastModified(templateSource);
}
/* (non-Javadoc)
* @see freemarker.cache.TemplateLoader#getReader(java.lang.Object, java.lang.String)
* 在读取template文件之后, 在前后套上<#escape>标签
*/
@Override
public Reader getReader(Object templateSource, String encoding) throws IOException {
Reader reader = delegate.getReader(templateSource, encoding);
String templateText = IOUtils.toString(reader);
return new StringReader(HTML_ESCAPE_PREFIX+templateText + HTML_ESCAPE_SUFFIX);
}
}
escape指令body区的ftl的interpolations都会被自动加上escape表达式。但是不会影响字符串内的interpolations。而且也只会影响到body内出现的interpolations,比如不会影响到include的ftl的interpolations。
<#escape x as x?html>
First name: ${firstName}
Last name: ${lastName}
Maiden name: ${maidenName}
</#escape>
等同于:
Last name: ${lastName?html}
Maiden name: ${maidenName?html}
spring mvc中使用freemark的一点心得的更多相关文章
- Spring mvc中@RequestMapping 6个基本用法
Spring mvc中@RequestMapping 6个基本用法 spring mvc中的@RequestMapping的用法. 1)最基本的,方法级别上应用,例如: Java代码 @Reques ...
- Http请求中Content-Type讲解以及在Spring MVC中的应用
引言: 在Http请求中,我们每天都在使用Content-type来指定不同格式的请求信息,但是却很少有人去全面了解content-type中允许的值有多少,这里将讲解Content-Type的可用值 ...
- Spring mvc中@RequestMapping 6个基本用法小结(转载)
小结下spring mvc中的@RequestMapping的用法. 1)最基本的,方法级别上应用,例如: @RequestMapping(value="/departments" ...
- Spring MVC中处理静态资源的多种方法
处理静态资源,我想这可能是框架搭建完成之后Web开发的”头等大事“了. 因为一个网站的显示肯定会依赖各种资源:脚本.图片等,那么问题来了,如何在页面中请求这些静态资源呢? 还记得Spring MVC中 ...
- Spring MVC 中的基于注解的 Controller【转】
原文地址:http://my.oschina.net/abian/blog/128028 终于来到了基于注解的 Spring MVC 了.之前我们所讲到的 handler,需要根据 url 并通过 H ...
- spring mvc中的文件上传
使用commons-fileupload上传文件所需要的架包有:commons-fileupload 和common-io两个架包支持,可以到Apache官网下砸. 在配置文件spring-mvc.x ...
- spring mvc中的valid
当你希望在spring mvc中直接校验表单参数时,你可以采用如下操作: 声明Validator的方式: 1.为每一个Controller声明一个Validator @Controller publi ...
- spring mvc中的@PathVariable(转)
鸣谢:http://jackyrong.iteye.com/blog/2059307 ------------------------------------------------ spring m ...
- Spring MVC中基于注解的 Controller
终于来到了基于注解的 Spring MVC 了.之前我们所讲到的 handler,需要根据 url 并通过 HandlerMapping 来映射出相应的 handler 并调用相应的方法以响 ...
随机推荐
- TCPCopy使用
http://www.thinkingbar.com/2014/04/17/tcpcopy使用/ 主题 技术 一.应用背景 主要用于系统的稳定性测试.它可以复制线上服务器的请求,通过修改TCP/I ...
- Hadoop中如何查看文件的block size
因为对控制文件的分片数目,进而控制文件的map个数非常感兴趣,因此有查找如下资料的需求.下面来看看我总结的吧:) 当向HDFS上写文件时,可以通过设置dfs.blocksize配置项来设置文件的blo ...
- What is the ViewPort ? Why we need it .
See also : http://stackoverflow.com/questions/14775195/is-the-viewport-meta-tag-really-necessary htt ...
- 使用FlaycoBanner实现图片轮播效果(加载网络图片)
FlaycoBanner是一个开源图片轮播框架,支持android2.2及以上: git地址:https://github.com/H07000223/FlycoBanner_Master 在andr ...
- CURL常用命令
下载单个文件,默认将输出打印到标准输出中(STDOUT)中 curl http://www.centos.org 通过-o/-O选项保存下载的文件到指定的文件中:-o:将文件保存为命令行中指定的文件名 ...
- WindowsService部署和问题的解决方法
1.Windows Service项目生成:[服务名称].exe 编译后,把bin\debug下所有都拷贝到生产环境的一个地址下:[服务exe所在文件地址] 2.部署:做一个ServiceInstal ...
- 关于JAVA学习计划和感想
学习计划第一阶段: JAVA语言基础知识.包括异常.IO流.多线程.集合类. 要求:异常------掌握try-catch-finally的使用 IO流------掌握字 ...
- 去掉tableView的header view的粘黏性
有的项目中,需要使用tableview的headerview,但是想让headerview粘在最顶不,希望和cell一起滚动,可以试试下面的代码来帮你实现这个需求: - (void)scrollVie ...
- Spike Notes on Theory of (Software) Transactional Memory[Doing]
Motivation 程序员是否需要在处理一致性问题或者同步时,一定要make hands dirty?能不能专注于应用级原子性,而无需考虑低层操作系统.运行时支持的原子性概念或者语言构造? 软件事务 ...
- krpano 小记
给网易漫画部做了一个全景的纸盒视频,在这里记录一些功能实现点. 背景音乐的播放: 1.插件引用 <plugin name="soundinterface" u ...