java使用freemarker生成静态html页面,基于中文API(简单版)
来源:互联网 发布:方正数据库 编辑:程序博客网 时间:2024/05/20 21:47
java使用freemarker生成静态html页面,基于中文API(简单版)
前言:因为工作需要用到,所以临时才简单的学了下freemarker,发现和 JSP页面一样简单。主要是类似JSP中使用JSTL标签一样。freemarker也有属于它的标签。
freemarker也是有很多要学的,但是我学的只是足够用工作的,没那么深入,所以是比较简单的,如同“hello world”例子。
下面的程序,会基于 中文API 来说的,如果有更好的代码或实现方法,请再评论留言,一起讨论学习。
freemarker中文API地址: http://t.bdtool.net/freemarker/pgui.html
上代码,亲测可用。
FreemarkerUtil.java
package com.testExample.freemarker;import freemarker.cache.ClassTemplateLoader;import freemarker.cache.FileTemplateLoader;import freemarker.cache.MultiTemplateLoader;import freemarker.cache.TemplateLoader;import freemarker.template.Configuration;import freemarker.template.Template;import freemarker.template.TemplateExceptionHandler;import java.io.*;import java.util.HashMap;import java.util.Map;/** * freemarker 工具类 * */public class FreemarkerUtil {//单例,为什么用单例,详情看 图1 private static final Configuration cfg; //模版配置对象 //初始化FreeMarker配置,详情看 图1 static { //创建一个Configuration实例,建议带参, //不带参的构造方法被标明为过期了,这里我用的是 freemarker-2.3.23.jar //可以从 maven repository 官网下载 jar 包 ,不会下载请拉最后 cfg = new Configuration(Configuration.VERSION_2_3_23); //设置FreeMarker的模版文件夹位置,只到文件夹,不带文件, //如:C:/freemarker_ftl/xxx.ftl 那么只需要 C:/freemarker_ftl try { //三者选一,另外两个注释 one_dir1();//一个文件夹路径 one_dir2();//一个文件夹路径more_dir();//多个文件夹路径 } catch (IOException e) {e.printStackTrace();} // 设置默认编码 cfg.setDefaultEncoding("utf-8"); //错误控制器,控制异常,详情看图4 //RETHROW_HANDLER :错误信息会输出到控制台 //HTML_DEBUG_HANDLER : 错误信息会输出到你要生成的html页面,详情看图4_1 cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); //cfg.setTemplateExceptionHandler(TemplateExceptionHandler.HTML_DEBUG_HANDLER); } //所有模板都在一个文件夹路径,详情看 图1 或 图2private static void one_dir1() throws IOException {cfg.setDirectoryForTemplateLoading(new File("C:/freemarker_ftl"));}//所有模板都在一个文件夹路径,详情看 图2private static void one_dir2() throws IOException {//ftl模板文件统一放至 com.testExample.freemarker.template 包下面cfg.setClassForTemplateLoading(FreemarkerUtil.class,"/com/testExample/freemarker/template/");}// 所有模板分别在多个文件夹路径,详情看 图3private static void more_dir() throws IOException {//建议,就算不同文件夹,但是模板文件名也不能相同,详情看 图3FileTemplateLoader ftl1 = new FileTemplateLoader(new File("C:/freemarker_ftl"));FileTemplateLoader ftl2 = new FileTemplateLoader(new File("E:/freemarker_ftl"));ClassTemplateLoader ctl = new ClassTemplateLoader(FreemarkerUtil.class, "/com/testExample/freemarker/template/");TemplateLoader[] loaders = new TemplateLoader[] { ftl1, ftl2, ctl };MultiTemplateLoader mtl = new MultiTemplateLoader(loaders);cfg.setTemplateLoader(mtl);}private void process(String templateName, String targetFileName, Map<String, Object> root) throws Exception { Writer out = null; try{ File file = new File(targetFileName); if(!file.exists()) { file.createNewFile(); //因为是生成到 Linux 上,需要设置权限,自己写的 file.setExecutable(true, false);//设置可执行权限,第二个参数默认为true(表示root权限才可以执行该文件,false为所有人都可以) file.setReadable(true, false);//设置可读权限,第二个参数默认为true(同上) file.setWritable(true);//设置可写权限,第二个参数默认为true(这里可以省略不写) } //创建模版对象,详情看 图5 Template t = cfg.getTemplate(templateName); //设置输出流,详情看 图6 //out = new OutputStreamWriter(System.out); //-> 输出到控制台 out = new OutputStreamWriter(new FileOutputStream(file),"UTF-8");//设置编码 UTF-8 //在模版上执行插值操作,并输出到制定的输出流中,详情看 图5 t.process(root, out);//root 是模板ftl中的变量的值 } catch (Exception e) { e.printStackTrace(); } finally { if (null != out) { try { out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 从模板生成静态html页面 * @param templateName 模板文件名 * @param targetFileName 目标文件名,即 html 的文件名,包含路径,绝对路径 * @param root 模板里面变量的值 */ public static void generatorHtmlFromTemplate(String templateName, String targetFileName, Map<String, Object> root) { FreemarkerUtil hf = new FreemarkerUtil(); try { hf.process(templateName, targetFileName, root); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception { Map<String, Object> root = new HashMap<>(); root.put("username", "美女"); root.put("age", 18); root.put("sex", "男"); FreemarkerUtil.generatorHtmlFromTemplate("test.ftl", "E:/abc.html", root); }}
test.ftl
Hello world! <br/>name : ${username}<br/>age : ${age}<br/>sex : ${sex}
----------------------------------------------------------------------------------------
图1 http://t.bdtool.net/freemarker/pgui_quickstart_createconfiguration.html
----------------------------------------------------------------------------------------
图2 http://t.bdtool.net/freemarker/pgui_config_templateloading.html
----------------------------------------------------------------------------------------
图3 同图2链接
----------------------------------------------------------------------------------------
图4 http://t.bdtool.net/freemarker/pgui_config_errorhandling.html
----------------------------------------------------------------------------------------
图4_1
----------------------------------------------------------------------------------------
图5 http://t.bdtool.net/freemarker/pgui_quickstart_gettemplate.html
----------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------
如果不懂如何从maven上下载jar包,请看我的另一篇博客:
链接:如何从 maven repository 下载 jar 包
- java使用freemarker生成静态html页面,基于中文API(简单版)
- 利用freemarker、java生成html静态页面
- Freemarker生成HTML静态页面
- Spring Boot使用freemarker并且生成静态html页面
- 使用FreeMarker生成静态页面,解决中文乱码问题源码
- JAVA程序通过freemarker生成静态HTML页面
- 使用FreeMarker生成静态HTML
- 使用FreeMarker生成静态HTML
- 使用FreeMarker生成静态HTML
- 使用freemarker生成静态页面
- 使用freemarker生成静态页面
- freemarker生成静态页面中文乱码解决方案
- 简单的用 freemarker 生成静态html
- 使用FreeMarker生成Html静态文件(实例)
- 使用FreeMarker生成Html静态文件
- 使用FreeMarker生成Html静态文件(实例)
- 使用FreeMarker生成Html静态文件(实例)
- 使用FreeMarker生成Html静态文件
- React简介
- PHP中COOKIE及时生效,不用刷新就可以使用
- docker for windows 设置aliyun加速以及改变pull镜像位置
- JS与Qt对象交互
- Widget控件
- java使用freemarker生成静态html页面,基于中文API(简单版)
- 搭建dubbo+zookeeper Linux环境
- idea打包maven项目,发布到tomcat下面
- python_利用selenium 爬取淘宝商品
- echarts地图中城市与省份之间的切换
- C语言中变量名为什么不能以数字开头
- 微信支付(公众号支付)ASP.NET
- Java输入输出流
- python的exec()及扩展