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 并调用相应的方法以响 ...
随机推荐
- 安卓--界面--改变image view
switch (v.getId()) { case R.id.button: imageView.setImageResource(R.drawable.jelly_bean); break; def ...
- 远程联机linux主机
远程联机linux主机 推荐使用 ssh 如 ssh user@www.abc.com(ssh使用公钥+私钥非对称加密,数据传输安全,不要使用telnet) 传输文件:sftp 或者 scp 若想使 ...
- 使用python编写一个壁纸网站的简单爬虫
目标网站:http://www.netbian.com/ 目的:实现对壁纸各分类的第一页壁纸的获取 一:分析网站,编写代码: (ps:源代码在文章的最后) 1.获取网站目录部分的一大段代码,下一步再进 ...
- C++利用IO流对浮点数进行格式化控制输出
浮点数输出 (100/100 分数) 题目描述 编写一个程序,输入一个浮点数和输出格式要求,按照格式要求将该浮点数输出.给定非负整数m和n,表示输出的浮点数小数点前的宽度为m,若宽度不够则在前面补0, ...
- Android 学习第14课,Android 布局
布局分4种: 1. LinearLayout (线性布局) file:///H:/tool/01/Android/android-sdk-windows/docs/guide/topics/ui/la ...
- 想一想social VR might just work
昨天玩了Oculus上的Casino VR(其实之前就知道这个瑞士公司,也下过standalone的PC client). 几把下来,居然觉得fun,总结起来: 1.是在一个immersive的环境中 ...
- 网页闯关游戏(riddle webgame)--H5刮刮卡的原理和实践
前言: 之前编写了一个网页闯关游戏(类似Riddle Game), 除了希望大家能够体验一下我的游戏外. 也愿意分享编写这个网页游戏过程中, 学到的一些知识. 对于刮刮卡, 想必大家都很熟悉, 也很喜 ...
- Oracle数据类型隐式转换小析
测试使用环境:oracle 11g r1 平常写sql语句时,大大咧咧,不太注意和数字有关的数据类型,有时例如 where c1=111 和 where c1='111'这样混用,却不曾想这里面另有蹊 ...
- 用eclipse碰到的一些错误,然后自己去网上找的解决办法
错误一: [Please check logcat output for more details.Launch canceled! 解决办法:在配置文件:AndroidManifest.xml加入如 ...
- JDBC修改表数据
修改数据时用到update语句,使用这个语句时也要有条件的,指定修改某一行的数据,没有条件判断,则修改全部. package qddx.JDBC; import java.sql.*; public ...