博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring与freemarker集成利用freemarker静态化页面
阅读量:5072 次
发布时间:2019-06-12

本文共 5647 字,大约阅读时间需要 18 分钟。

需求:

web内容系统,需要静态化页面,管理系统仍然基于InternalResourceViewResolver渲染jsp页面,而非采用FreeMarkerViewResolver。也就是说只利用freemarker静态化页面

环境:

org.apache.commons
commons-io
1.3.2
org.codehaus.jackson
jackson-mapper-lgpl
1.9.13
org.springframework
spring-web
3.1.0.RELEASE
org.springframework
spring-webmvc
3.1.0.RELEASE
javax.servlet
jstl
1.2
javax.servlet
jsp-api
2.0
provided
javax.servlet
servlet-api
2.5
provided
com.alibaba
fastjson
1.1.36
commons-dbutils
commons-dbutils
1.5
commons-pool
commons-pool
1.6
commons-dbcp
commons-dbcp
20030825.184428
mysql
mysql-connector-java
5.1.28
org.freemarker
freemarker
2.3.20
commons-logging
commons-logging
1.1.1

web.xml的配置:

spring
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
/WEB-INF/spring-*.xml
1
spring
/
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
/WEB-INF/spring-*.xml
org.springframework.web.util.IntrospectorCleanupListener
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
forceEncoding
true
encodingFilter
/*

spring-ui.xml配置:

10
UTF-8

此时freemarkerConfigurer已经指定,并指定了templateLoaderPath,同时指定了编码

/WEB-INF/ftl/file.ftl:

            ${article.title}      

${article.title}


  ${article.content}  

我们构建vo类:

public class Article  implements Serializable{	private static final long serialVersionUID = 554206256994693476L;	private String title;	private String content;	public String getTitle() {		return title;	}	public void setTitle(String title) {		this.title = title;	}	public String getContent() {		return content;	}	public void setContent(String content) {		this.content = content;	}}

构建实际生成html的操作类:HtmlService.java 为测试类

@Service("com.someabcd.csr.service.htmlService")public class HtmlService {	@Autowired	private FreeMarkerConfigurer freeMarkerConfigurer;	public void all(String msg) throws Exception {		Map
rootMap = new HashMap
(); process("file.ftl", rootMap); } public void process(String templateName, Map
rootMap) throws Exception { Configuration configuration = freeMarkerConfigurer.getConfiguration(); Template template = configuration.getTemplate(templateName); File file = new File("d:/file.html"); Article article = new Article(); article.setTitle("关于小网客"); article.setContent("解决方案咨询
大数据处理
系统架构
企业信息化咨询
Email:smallnetvisitor@qq.com
来自北京"); rootMap.put("article", article); Writer out = new OutputStreamWriter(new FileOutputStream(file), "UTF-8"); template.process(rootMap, out); IOUtils.closeQuietly(out); }}

构建控制层的访问:HtmlController.java

@Controller("com.someabcd.csr.controller.htmlController")@RequestMapping("html")public class HtmlController {	@Autowired	private HtmlService htmlService;	@RequestMapping(value = "/create")	@ResponseBody	public ReturnBase all(HttpServletRequest request,			HttpServletResponse response) {		ReturnBase returnStatus = new ReturnBase();		String msg = request.getParameter("msg");		System.out.println("*********msg***" + msg);		try {			this.htmlService.all(msg);			returnStatus.setSuccess(true);			returnStatus.setMsg("成功!");		} catch (Exception e) {			e.printStackTrace();			returnStatus.setSuccess(false);			returnStatus.setMsg(e.getMessage());		}		return returnStatus;	}}

这个时候我们访问html/create即可生成。

其他类:ReturnBase

public class ReturnBase {	private boolean success = false;	private String msg;	public boolean isSuccess() {		return success;	}	public void setSuccess(boolean success) {		this.success = success;	}	public String getMsg() {		return msg;	}	public void setMsg(String msg) {		this.msg = msg;	} }

最终直接通过url即可访问生成页面的,结果保存为d:/file.html,实际应用中根据数据id等规则生成相应的文件目录结构即可

ITeye推荐

转载于:https://www.cnblogs.com/snvblog/p/3562472.html

你可能感兴趣的文章
火狐、谷歌、IE关于document.body.scrollTop和document.documentElement.scrollTop 以及值为0的问题...
查看>>
基于Lucene3.5.0怎样从TokenStream获得Token
查看>>
一网打尽各类Java基本数据类型转换
查看>>
FlowLayout布局
查看>>
深入理解JVM读书笔记--字节码执行引擎
查看>>
vue-搜索功能-实时监听搜索框的输入,N毫秒请求一次数据
查看>>
批处理 windows 服务的安装与卸载
查看>>
React文档翻译 (快速入门)
查看>>
nodejs fs路径
查看>>
动态规划算法之最大子段和
查看>>
linux c:关联变量的双for循环
查看>>
深入浅出理解zend framework(三)
查看>>
python语句----->if语句,while语句,for循环
查看>>
javascript之数组操作
查看>>
LinkedList源码分析
查看>>
TF-IDF原理
查看>>
用JS制作博客页面背景随滚动渐变的效果
查看>>
JavaScript的迭代函数与迭代函数的实现
查看>>
一步步教你学会browserify
查看>>
Jmeter入门实例
查看>>