`

FreeMarker生成静态HTML页面的工具类FreeMarkerUtil

阅读更多

FreeMarker生成静态HTML页面的工具类FreeMarkerUtil

 

一.FreeMarkerUtil工具类:

import com.huaxia.entity.News;
import com.huaxia.entity.User;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

/**
 * 创建人: leon
 * 创建时间: 2014年11月28日 上午10:07:51
 * 类描述:Freemarker的工具类
 */
public class FreemarkerUtil {

	/**
	 * 通过指定的名字获取相应的模板
	 * @param fileName
	 * @return
	 */
	public Template getTemplate(HttpServletRequest request,String fileName) {
		try {
		Configuration cfg = new Configuration();
		cfg.setOutputEncoding("UTF-8");
        cfg.setDefaultEncoding("UTF-8");// 编码设置1  
        cfg.setEncoding(Locale.CHINA, "UTF-8");
		//设定读取ftl模板文件的目录
		//cfg.setClassForTemplateLoading(this.getClass(), "/template");		//读取src目录下
		cfg.setServletContextForTemplateLoading(request.getSession().getServletContext(), "/template");	//读取webroot目录下
		//在模板文件目录中找到名称为name的文件,并加载为模板
		Template template = cfg.getTemplate(fileName);
		template.setEncoding("UTF-8");// 编码设置2
		return template;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 通过指定的文件目录和文件名生成相应的文件
	 * @param fileDir
	 * @param fileName
	 */
	public Boolean printToFile(Template template,String fileDir,String fileName,Map<String,Object> root) {
		boolean done = false;
		Writer writer = null;
		try {
			//判断多级目录是否存在,不存在则一级级创建
			String[] paths = fileDir.split("\\\\");//注意:此处“\\”是错误的,必须要“\\\\”才能分割字符串
			String dir = paths[0];
			for (int i = 1; i < paths.length; i++) {
				dir = dir + File.separator + paths[i];
				File file=new File(dir.toString());
				if (!file.exists()) {
					file.mkdir();
				}
			}
			//创建输出流
			File file = new File(fileDir +File.separator+ fileName);  
			   
	        //设置生成的文件编码为UTF-8   
	        //服务器不支持UTF-8格式HTML时候使用ANSI格式HTML文件,即系统默认编码   
			writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file),"UTF-8"));  // 编码设置3
			//writer = new FileWriter(fileDir +File.separator+ fileName);
			//输出模板和数据模型都对应的文件
			template.process(root, writer);
			done = true;
		} catch (IOException e) {
			e.printStackTrace();
		} catch (TemplateException e) {
	        e.printStackTrace();
	    } finally {
			try {
				if(writer!=null){
					writer.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
	    }
		return done;
	}
	
	/**
	 * 通过传入的请求和新闻信息重新生成html文件
	 * @param news  //新闻实体类
	 * @param request   //请求
	 * @param user  //用户
	 * @return
	 */
	public boolean genenateHtml(News news,HttpServletRequest request,User user) {
		String fileName = news.getFileName();
		Map<String, Object> root = new HashMap<String, Object>();
		root.put("id", news.getId());
		root.put("title", news.getTitle());
		root.put("create_date", news.getCreateDate());
		root.put("creator", news.getCreator());
        root.put("content", ClobUtil.ClobToString(news.getContent()));
        root.put("fileName", news.getUploadFile()==null?"":news.getUploadFile());
		FreemarkerUtil freemarkerUtil = new FreemarkerUtil();
		Template template = null;
        template = freemarkerUtil.getTemplate(request, "news.ftl");//新闻发布系统的freemarker模板
		String htmlDir = news.getDir();
		boolean done = printToFile(template, htmlDir, fileName, root);
		return done;
	}
}

 

二.发布新闻信息的Servlet:

if ("publishNews".equals(action)) {     //发布新闻:通过传入的新闻id获取新闻信息生成新闻模板
    String idsStr = request.getParameter("newsIds");
    INewsDao newsDao = new NewsDaoImpl();
    boolean done = newsDao.publishNews(idsStr,request,user);
    String str =null;
    if(done){
        str="{success:true}";
    }else{
        str="{success:false}";
    }
    response.setContentType("text/html;charset=UTF-8");
    out=response.getWriter();
    out.print(str);     
    out.close();
    return;
}

 

三.发布新闻信息的Dao方法:

/**
 * 发布新闻信息的Dao方法
 * @param idsStr    //新闻ID
 * @param request
 * @param user
 */
public boolean publishNews(String idsStr, HttpServletRequest request, User user) {
    Session s = null;
    boolean done = false;
    FreemarkerUtil freemarkerUtil = new FreemarkerUtil();
    List<Integer> ids = new ArrayList<Integer>();
    String[] newIds = idsStr.split(",");
    for (int i = 0; i < newIds.length; i++) {
        ids.add(Integer.valueOf(newIds[i]));
    }
    try {
        s = HibernateUtil.getSession();
        s.beginTransaction();
        StringBuffer sb = new StringBuffer("select * from news where id in(");
        for (int i = 0; i < ids.size(); i++) {
            sb.append(ids.get(i));
            if (i != ids.size() -1) {
                sb.append(",");
            }
        }
        sb.append(")");
        SQLQuery query = s.createSQLQuery(sb.toString());
        List<News> list = query.addEntity(News.class).list();
        for (int i = 0; i < list.size(); i++) {
            News news = list.get(i);
            done = freemarkerUtil.genenateHtml(news, request, user);
            if (!done) {
                return done;
            }
        }
        s.getTransaction().commit();
        done = true;
    } catch (Throwable e) {
        logger.error(e.toString());
        HibernateUtil.endSession(s);
    } finally {
        HibernateUtil.endSession(s);
    }
    return done;
}

 

 

相关链接:
Freemarker模板应用
Freemarker生成html页面
Freemarker 设置编码

 

 

 

 

分享到:
评论

相关推荐

    教你如何用FreeMarker生成静态页面.doc

    本篇文章将详细讲解如何利用FreeMarker来生成静态页面。 首先,我们需要理解FreeMarker的基本工作原理。在FreeMarker模板文件中,我们可以编写HTML结构,同时嵌入特定的FreeMarker语法,如`&lt;#if&gt;`、`&lt;#foreach&gt;`等...

    springboot整合freemarker生成静态html的demo.zip

    在本项目"springboot整合freemarker生成静态html的demo.zip"中,我们将探讨如何将SpringBoot框架与FreeMarker模板引擎结合,以实现动态数据驱动的静态HTML页面生成。FreeMarker是一个强大的、开源的模板语言,它允许...

    struts2+freemarker 生成静态页面

    在本项目中,“struts2+freemarker 生成静态页面”意味着利用这两个工具将动态网页转化为静态HTML页面,以提高网站性能和用户体验。 1. **Struts2框架**:Struts2提供了全面的MVC架构支持,包括动作(Action)类、...

    freemarker生成静态html示例

    本示例项目是在Eclipse环境中创建的一个工程,目的是演示如何使用Freemarker来生成静态HTML页面。 在了解这个项目之前,首先需要知道什么是Freemarker。Freemarker是一个开源的Java库,它允许开发者通过定义模板(....

    使用FreeMarker生成Html静态文件

    标题“使用FreeMarker生成Html静态文件”暗示了我们将探讨如何利用FreeMarker将动态数据转化为静态的HTML页面。这一过程通常涉及以下几个步骤: 1. **配置FreeMarker**: 首先,我们需要在Java项目中引入FreeMarker...

    freemarker生成静态HTML例子

    - 结合持续集成/部署(CI/CD)流程,自动批量生成大量静态页面。 通过上述步骤和示例,你可以了解并实现使用Freemarker生成静态HTML的基本过程。在实际开发中,这个功能可以用于构建静态站点、邮件模板或者API文档等...

    生成静态页面 freemarker模板

    在生成静态页面的场景中,Struts2可以作为数据和模板之间的桥梁,将处理后的业务数据传递给Freemarker,由Freemarker生成静态HTML。 **生成静态页面的流程** 1. **配置Struts2**: 首先,我们需要在Struts2的配置...

    freemarker生成静态网页

    4. **生成静态文件**:使用Freemarker的`Template`类加载模板文件,然后结合数据模型生成最终的HTML。代码如下: ```java Template template = configuration.getTemplate("index.ftl"); Writer out = new ...

    freemarker生成静态页面------内含使用说明

    Freemarker是一个强大的模板引擎,常用于Web应用中动态生成HTML或其他类型的静态页面。它采用声明式编程方式,使得开发者可以专注于数据模型,而不用关心如何呈现这些数据。本篇文章将深入探讨Freemarker的工作原理...

    Struts2整合Freemarker生成静态页面

    8. **静态页面生成**:整合Struts2和Freemarker的一个常见应用是生成静态页面,提高网站性能。这通常通过在Action中触发静态化逻辑,将Freemarker渲染后的HTML保存到磁盘,然后直接返回这些静态页面。 9. **错误和...

    httpclient,freemarker的静态化分页

    5. **保存HTML**:将生成的HTML文件保存到服务器的指定目录,作为静态页面。 6. **分页处理**:对于多页内容,重复以上步骤,生成每个分页对应的静态HTML。 7. **配置URL**:设置URL重写规则,使用户访问动态URL时...

    FreeMarkerUtil操作以及类(jsp静态页面生成)

    在Java Web开发中,FreeMarkerUtil工具类通常被用来简化FreeMarker模板的使用,帮助开发者更便捷地生成静态页面。 **FreeMarker的基本概念** 1. **模板(Template)**: 模板是FreeMarker的核心,它是HTML、XML或...

    FreeMarker教你如何生成html静态页面源码

    在Web开发中,生成HTML静态页面源码是一个常见的需求。静态页面可以提供更快的加载速度和更好的SEO优化。使用FreeMarker实现这个目标,主要有以下几个步骤: 1. **理解FreeMarker模板语言**:FreeMarker的核心是...

    网站生成静态页面的方案和工具

    在本篇文章中,我们将探讨几种主流的静态页面生成方案和工具,并详细介绍FreeMarker模板引擎在其中的应用。 一、静态页面生成的优势 1. 提升性能:静态页面直接由服务器发送,无需执行服务器端脚本,减少了服务器...

    JAVA集成Freemarker生成静态html过程解析

    总结来说,Java集成Freemarker生成静态HTML的过程包括:引入Freemarker依赖、配置模板相关设置、编写模板文件、在Controller中处理请求并返回模板名、以及使用工具类将模板渲染为HTML并保存到磁盘。这个过程在Web...

    javaCMS 生成静态页面简单列子

    Java CMS(内容管理系统)生成静态页面是一种常见的优化网站性能和提升用户体验的方法。在这个过程中,原本由动态脚本生成的网页内容被转化为HTML文件,这些HTML文件可以被浏览器直接读取,减少了服务器处理请求的...

    freemarker+html生成pdf.zip

    `Freemarker`是一个强大的模板引擎,通常用于动态生成HTML、XML等文本格式,而将`Freemarker`与HTML模板结合生成PDF,可以充分利用HTML的易编辑性和富文本特性,为用户提供高质量的文档输出。下面我们将深入探讨如何...

    freeMarker生成html实用例子

    - `freemarker`目录下的例子可能包括基础的模板文件(如`template.ftl`)和对应的Java测试类,展示了如何使用FreeMarker生成HTML,你可以通过阅读这些例子了解具体用法。 总的来说,FreeMarker是Java Web开发中...

Global site tag (gtag.js) - Google Analytics