springmvc使用freemarker
首先需要添加freemarker.jar到项目,如果项目中有spring或者spirngmvc,需要整合,首先配置freemarkerConfig,代码结构如下
- <!-- 设置freeMarker的配置文件路径 -->
- <bean id="freemarkerConfiguration"
- class="org.springframework.beans.factory.config.PropertiesFactoryBean">
- <property name="location" value="classpath:freemarker.properties" />
- </bean>
- <bean id="freemarkerConfig"
- class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
- <property name="freemarkerSettings" ref="freemarkerConfiguration" />
- <property name="templateLoaderPath">
- <value>/WEB-INF/freemarker/</value>
- </property>
- <property name="freemarkerVariables"><!--设置一些常用的全局变量-->
- <map>
- <entry key="xml_escape" value-ref="fmXmlEscape" />
- <entry key="webRoot" value="/shop"></entry>
- <entry key="jsRoot" value="/shop/js"></entry>
- </map>
- </property>
- </bean>
其中一下代码是用来扫描.ftl的模板文件,在/web-info/freemarker目录中
- <property name="templateLoaderPath">
- <value>/WEB-INF/freemarker/</value>
- </property>
然后freemarker用ftl文件来呈现视图,这时候就需要配置freemarker的视图解析器,代码如下:
- <!-- 配置freeMarker视图解析器 -->
- <bean id="freemarkerViewResolver"
- class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
- <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"
- />
- <property name="viewNames" value="*.ftl" />
- <property name="contentType" value="text/html; charset=utf-8" />
- <property name="cache" value="true" />
- <property name="suffix" value="" />
- <!-- <property name="exposeRequestAttributes" value="true" />
- <property name="exposeSessionAttributes" value="true" />
- <property name="exposeSpringMacroHelpers" value="true" /> -->
- <property name="order" value="0" />
- </bean>
- <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 通用解析器 -->
- <bean id="viewResolver"
- class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="prefix" value="" />
- <property name="viewNames" value="*.html,*.jsp" />
- <property name="suffix" value="" />
- <property name="viewClass"
- value="org.springframework.web.servlet.view.InternalResourceView" />
- <property name="order" value="1"></property>
- </bean>
其中:<property name="order" value="0">代表了第一个匹配的是freemarker的视图解析器,如果匹配不成功,则自动选择order=1的其他解析器,目前的通用解析器可以解析.html跟.jsp的视图,如果需要其他视图的解析器,可以自行添加。
其中的exposeRequestAttributes exposeSessionAttributes两个属性都被设置为true。结果是请求和会话属性都被复制到模板的属性集中,可以使用FreeMarker的表达式语言来访问并显示。
使用这些宏,必须设置FreeMarkerViewResolver的exposeSpringMacroHelpers属性为true
以上是freemarker与springmvc整合需要配置的xml文件。
------------------------------------------------------------------------------------------
下面来介绍一下在Java 代码中如何使用:
首先编写Freemarker的工具类,用来生成HTML文件的方法
- package com.hc.shop.common.tools;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.OutputStreamWriter;
- import java.io.UnsupportedEncodingException;
- import java.io.Writer;
- import java.util.HashMap;
- import java.util.Map;
- import javax.servlet.http.HttpServletRequest;
- import org.springframework.web.servlet.view.freemarker.FreeMarkerConfig;
- import freemarker.template.Template;
- import freemarker.template.TemplateException;
- /**
- * @author HuifengWang 静态化方法
- **/
- public class FreeMarkerUtil {
- /**
- *
- * 生成HTML静态页面的公公方法
- * @param fmc
- * @param templateName 模板的名称
- * @param request
- * @param map 生成模板需要的数据
- * @param filePath 相对于web容器的路径
- * @param fileName 要生成的文件的名称,带扩展名
- * @author HuifengWang
- *
- */
- public static void createHtml(FreeMarkerConfig fmc, String templateName,
- HttpServletRequest request, Map<?, ?> map, String filePath,
- String fileName) {
- Writer out = null;
- try {
- Template template = fmc.getConfiguration()
- .getTemplate(templateName);
- String htmlPath = request.getSession().getServletContext()
- .getRealPath(filePath)
- + "/" + fileName;
- File htmlFile = new File(htmlPath);
- if (!htmlFile.getParentFile().exists()) {
- htmlFile.getParentFile().mkdirs();
- }
- if (!htmlFile.exists()) {
- htmlFile.createNewFile();
- }
- out = new OutputStreamWriter(new FileOutputStream(htmlPath),"UTF-8");
- template.process(map, out);
- out.flush();
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } catch (TemplateException e) {
- e.printStackTrace();
- } finally {
- try {
- out.close();
- out = null;
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- /**
- * @param request
- * @param filePath 文件存放的路径
- * @param fileName 文件的名称,需要扩展名
- * @author HuifengWang
- * @return
- */
- public static Map<String,Object> htmlFileHasExist(HttpServletRequest request,String filePath,
- String fileName) {
- Map<String,Object> map = new HashMap<String,Object>();
- String htmlPath = request.getSession().getServletContext()
- .getRealPath(filePath)
- + "/" + fileName;
- File htmlFile = new File(htmlPath);
- if(htmlFile.exists()){
- map.put("exist", true);
- }else{
- map.put("exist",false);
- }
- return map ;
- }
- }
以上就是要生成HTML文件的工具类,参数注解都有,应该很好理解。
如何在Controller中调用??下面来看一个很简单的demo
- @Autowired
- private FreeMarkerConfig freeMarkerConfig;//获取FreemarkerConfig的实例
- @RequestMapping("/ttt")
- public String ttt(HttpServletRequest request,HttpServletResponse response,ModelMap mv) throws IOException, TemplateException, ServletException{
- String fileName ="ttt.html";
- Boolean flag =(Boolean)FreeMarkerUtil.htmlFileHasExist(request, FREEMARKER_PATH, fileName).get("exist");
- if(!flag){//如何静态文件不存在,重新生成
- Map<String,Object> map = new HashMap<String,Object>();
- map.put("user", "xiaowang小王");//这里包含业务逻辑请求等
- mv.addAllAttributes(map);
- FreeMarkerUtil.createHtml(freeMarkerConfig, "demo.ftl", request, map, FREEMARKER_PATH, fileName);//根据模板生成静态页面
- }
- return FREEMARKER_PATH+"/"+fileName;//始终返回生成的HTML页面
- }
以上就是如何在springmvc中使用Freemarker的具体实现方式,想要很好的了解,会用,熟悉Freemarker,还需要了解Freemarker的各种语法跟标签。慢慢学习。。。
springmvc使用freemarker的更多相关文章
- Spring MVC 环境搭建(maven+SpringMVC+mybatis+Freemarker)
Spring MVC 环境搭建(maven+SpringMVC+mybatis+Freemarker) 一.准备工作 1.Eclipse Java EE IDE(4.4.1) 2.JDK 3.Tomc ...
- springmvc与freemarker的整合
官方简介:FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具. 它不是面向最终用户的,而是一个Java ...
- SpringMVC整合freeMarker实现页面静态化+SpringMVC配置多视图
一.背景 1.什么是FreeMarker FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 FreeMarker被设计用来生成HTML Web页面,特别是基于 ...
- SpringMVC和Freemarker整合,带自定义标签的使用方法
SpringMVC和Freemarker整合,带自定义标签的使用方法. [参考来源:http://www.360doc.com/content/14/1225/14/1007797_435663342 ...
- SpringMVC 集成 Freemarker 模板引擎
本文通过 maven 项目中集成 1.引入 SpringMVC 与 Freemarker 需要的依赖 <!-- SpringMVC --> <dependency> <g ...
- springMVC与freemarker整合
准备好的环境:Maven工程整合好了ssm,即spring+springMVC+mybatis.接下来准备将springMVC与freemarker整合,以html文件为模板. 一,加入freemar ...
- SpringMVC,Mybatis,FreeMarker连接mycat示例(一)
首页 > 程序开发 > 软件开发 > Java > 正文 SpringMVC,Mybatis,FreeMarker连接mycat示例(一) 项目结构如图: 首先是各种配置文件, ...
- 百度UEditor图片上传、SpringMVC、Freemarker、Tomcat、Nginx、静态资源
个人官网.公司项目都需要 可视化编辑器,百度UEditor做得很不错,就用的这个.项目后台用到了SpringMVC.Freemarker,开发过程中部署在Jetty,线上部署用Tomcat,最后可能配 ...
- SpringMVC整合Freemarker(含Demo源码)(转)
转自:http://blog.csdn.net/sinat_27535209/article/details/61199452 整合过程如下: 1.新建一个maven web工程,使用maven依赖s ...
随机推荐
- 在mvc中实现图片验证码的刷新
首先,在项目模型(Model)层中建立一个生成图片验证码的类ValidationCodeHelper,代码如下: public class ValidationCodeHelper { //用户存取验 ...
- https://blog.helong.info/blog/2015/03/13/jump_consistent_hash/
转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT) ...
- Nginx配置加入css缓存配置后,css等文件not found
现在配置: location / { root /root/html/product; } Probably another block had definition for the static f ...
- AngularJS基础知识2
一.angularJS双向数据绑定 利用双向数据绑定,不仅能把数据模型的变化同步到视图上面,还可以利用双向数据绑定的特性来做一些样式上面的控制. 双向数据绑定用处很多,不仅仅是像知识点1中的那个例子, ...
- 使用css使textbox输入内容自动变大写
<style type="text/css"> input[type="text"] { text-transform:uppercase; } & ...
- [转]搬瓦工换机房换ip之后不能连外网
搬瓦工换机房换ip之后不能连外网 时间 2015-07-21 15:17:16 Wendal随笔 原文 http://wendal.net/2015/07/21.html 主题 iptables ...
- 【OpenWRT】【RT5350】【三】MakeFile文件编写规则和OpenWRT驱动开发步骤
一.Makefile文件编写 http://www.cnblogs.com/majiangjiang/articles/3218002.html 可以看下上面的博客,总结的比较全了,在此不再复述 二. ...
- WP8.1 侧边滑动Item
效果图 我看ios 和安卓上有好多类似的Item的效果,UWP上有微软官方的库,其中也有类似得效果,看样子WP8.1没有啊,顺便我的程序也是需要,我也就仿了一个. 具体思路是: 触摸控制GRId在CA ...
- SQL优化----百万数据查询优化
百万数据查询优化 1.合理使用索引 索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率.现在大多数的数据库产品都采用IBM最先提出的ISAM索引结构.索引的使用要恰到好处,其使用原则如下: ...
- SqlServer数据库空间使用情况常用命令
--最简单的办法就是使用SSM客户端,报表查看 --查询数据文件的空间情况 dbcc showfilestats --查询日志文件的空间情况 dbcc sqlperf(logspace) --查询te ...