`
阅读更多

一、模板文件(ftl文件)

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>查看文章: ${newsitem.title}</title>
<script src="../../common/js/jquery.js" type="text/javascript"></script>
<script type="text/javascript" src="../../common/js/base.js"></script>
<script>
function getValue(){
    	 $.ajax({   
            type : "post",   
            url : "../../TestServlet?action=getValue",  
            data : null,   
            success:function(msg){   
            	alert(msg);
            }
         })
    }
</script>
</head>
<body>
<input type="button" value="生成静态文件" onClick="getValue()" />
<table width="100%" border="0" cellpadding="0" cellspacing="0"  bgcolor="#FFFFFF">
<tr><td>
<table width="95%" border="0" align="center" cellpadding="2" cellspacing="6">
 <tr>
 <td height="10" align="left" colspan=2></td>
 </tr>         
 <tr>          
 <td align="left" width="538">
 <strong>${newsitem.title}</strong> ( ${newsitem.publishDate} )          
 </td>          
 <td align="right">           
 <a href="index.jsp">返回</a>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;          
</td>         
</tr>         
<tr>          
<td align="left" valign=top colspan=2>           
<hr align="left" width="95%" size="1" noshade color="#cc0000">          
</td>         
</tr>         
<tr>          
<td colspan=2>           
${newsitem.content}          
</td>         
</tr>        
</table>        
<br>       
</td>      </tr>     
</table> 
</body>
</html>

 

二、servlet业务逻辑代码

public void getValue(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		FreeMarkerTest freeMarkerTest = new FreeMarkerTest();
		String path = request.getRealPath("/");
		String fileName = getNewFileName();
		boolean b = freeMarkerTest.createStaticHtml(path,fileName);
		response.getWriter().print(b);
	}

 

/**
	 * 生成新文件名称(年月日时分秒+二位随机码)
	 * 
	 * @return
	 */
	public String getNewFileName() {
		String newFileName = "";
		Date date = new Date();
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
				"yyyyMMddHHmmss");
		newFileName = simpleDateFormat.format(date);
		String random = getRandom(2);
		return newFileName + random;
	}

	/**
	 * 获取n位随机数
	 * 
	 * @param n
	 * @return
	 */
	public String getRandom(int n) {
		String randomString = "";
		if (n == 1) {
			randomString = (int) (Math.random() * 10) + "";
		} else {
			randomString = getRandom(n - 1) + (int) (Math.random() * 10);
		}
		return randomString;
	}

 

三、dao 层核心代码

import java.io.*;
import java.util.HashMap;
import java.util.Map;

import freemarker.template.*;
/**
 * FreeMarker
 * @author Administrator
 * @data Mar 27, 2012
 */
public class FreeMarkerTest {
	private Configuration freemarker_cfg = null;

	public boolean createStaticHtml(String path,String fileName) {
		NewsItem aItem = new NewsItem();
		aItem.setTitle("新闻信息一");
		aItem.setAuthor("administrator");
		aItem.setHotNum("1000");
		aItem.setPublishDate("2012-03-20");
		aItem.setContent("新闻信息内容%%%%");

		FreeMarkerTest test = new FreeMarkerTest();

		Map root = new HashMap();
		root.put("newsitem", aItem);

		String sGeneFilePath = "/";
		boolean bOK = test.geneHtmlFile("view.ftl", root, sGeneFilePath,
				fileName+".htm",path);
		return bOK;
	}

	/**
	 * 获取freemarker的配置. freemarker本身支持classpath,目录和从ServletContext获取.
	 */
	protected Configuration getFreeMarkerCFG(String path) {
		if (null == freemarker_cfg) {
			freemarker_cfg = new Configuration();
			try {
				freemarker_cfg.setDirectoryForTemplateLoading(new File(path));
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return freemarker_cfg;
	}

	/**
	 * 生成静态文件.
	 * 
	 * @param templateFileName
	 * @param propMap
	 * @param htmlFilePath
	 *            要生成的静态文件的路径,相对设置中的根路径,例如 "/tpxw/1/2005/4/"
	 * @param htmlFileName
	 *            要生成的文件名,例如 "1.htm"
	 */
	public boolean geneHtmlFile(String templateFileName, Map propMap,
			String htmlFilePath, String htmlFileName,String path) {
		// @todo 从配置中取得要静态文件存放的根路径:需要改为自己的属性类调用
		String sRootDir = path + "/modules/news/";//保存文件路径
		Writer out = null;
		try {
			path = path + "WEB-INF/FTL/";//ftl路径
			Template t = getFreeMarkerCFG(path).getTemplate(templateFileName);
			t.setEncoding("UTF-8");
			// 如果根路径存在,则递归创建子目录
			creatDirs(sRootDir, htmlFilePath);

			File afile = new File(sRootDir + "/" + htmlFilePath + "/"
					+ htmlFileName);

			out = new BufferedWriter(new OutputStreamWriter(
					new FileOutputStream(afile),"UTF-8"));

			t.process(propMap, out);
		} catch (TemplateException e) {
			e.printStackTrace();
			return false;
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		} finally{
			try {
				out.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		return true;
	}

	/**
	 * 创建多级目录
	 * 
	 * @param aParentDir
	 *            String
	 * @param aSubDir
	 *            以 / 开头
	 * @return boolean 是否成功
	 */
	public static boolean creatDirs(String aParentDir, String aSubDir) {
		File aFile = new File(aParentDir);
		if (aFile.exists()) {
			File aSubFile = new File(aParentDir + aSubDir);
			if (!aSubFile.exists()) {
				return aSubFile.mkdirs();
			} else {
				return true;
			}
		} else {
			return false;
		}
	}
}

 

分享到:
评论

相关推荐

    freemarker 实例

    spring MVC + freemarker 实例 spring MVC + freemarker 实例 spring MVC + freemarker 实例 spring MVC + freemarker 实例

    FreeMarker实例教程,手把手教你FreeMarker的方方面面

    ### FreeMarker实例教程知识点详解 #### 一、FreeMarker简介 **FreeMarker**是一款功能强大的模板引擎,主要用于生成文本输出,如HTML页面、电子邮件、配置文件等。它被广泛应用于Web开发领域,能够帮助开发者轻松...

    Struts2 和freemarker实例

    在"Struts2 和freemarker实例"中,我们可能会学习到以下知识点: 1. **Struts2的基础概念**:理解Struts2的架构,包括Action、Result、Interceptor等核心组件的作用和配置。 2. **配置Struts2**:如何在struts.xml...

    freemarker 实例源代码

    3. **Freemarker实例创建** - 创建`Configuration`对象,设置模板加载路径和配置项。 - 加载模板文件,如`Template template = configuration.getTemplate("template.ftl");` - 创建数据模型,如`Map, Object&gt; ...

    Freemarker 实例,Freemarker 实例

    下面将详细介绍Freemarker的核心概念、配置、语法以及常见使用场景。 **1. Freemarker核心概念** - **模板(Templates)**:Freemarker的核心是模板文件,它定义了页面的布局和样式,包含变量和控制结构。 - **数据...

    struts2.0+freemarker实例.rar

    在给定的`struts2.0+freemarker实例.rar`中,可能包含了一个简单的Web应用示例,展示了如何集成Struts2.0和FreeMarker进行开发。可能包括Action类、FreeMarker模板文件以及Struts2的配置文件。通过解压并运行这个...

    java生成静态页面——Freemarker实例教程.docx

    ### Java生成静态页面——Freemarker实例教程 #### 一、Freemarker简介 Freemarker是一款基于模板的通用工具,它可以嵌入到各种应用程序中,帮助开发者将动态数据渲染成HTML、XML或其他文本格式的文件。对于提高...

    freemarker实例下载

    综上所述,"freemarker实例下载"提供了一个实用的教程,涵盖了Freemarker的基础用法、与Spring的整合以及如何部署和运行。通过学习和实践这个实例,开发者可以更好地理解和掌握Freemarker在实际项目中的应用。

    FreeMarker实例

    与JSP相比,FreeMarker更加专注于模板处理,不涉及Java代码,因此在复杂页面渲染和模板复用方面具有优势。 FreeMarker的工作原理是通过读取预先定义的模板文件,结合后台提供的数据模型,生成最终的输出文本。模板...

    freemarker实例,真实

    这个实例是一个不依赖数据库、使用相对路径生成文件的基础示例,非常适合初学者了解和学习Freemarker的基本用法。 1. **Freemarker简介** Freemarker是一个开源的模板语言,它与编程语言解耦,允许开发者将业务...

    freeMarker简单实例

    下面将深入探讨FreeMarker的基本概念、工作原理以及如何创建一个简单的实例。 1. **基本概念** - **模板(Template)**: 模板是FreeMarker的核心,它是HTML或XML等静态文件,其中包含特定的FreeMarker指令和变量,...

    Spring使用Druid整合JdbcTemplate与FreeMarker实例 下载

    使用Spring JdbcTemplate+Druid数据源+FreeMarker 开发的代码生成器。 您可以根据自己的实际,修改一下FreeMarker的模版文件,直接按目录生成Java代码。 生成了就能用,节省大量重复工作的时间。 您也可以用来学习...

    Maven2项目集成springmvc,spring3,ibatis和freemarker实例

    本实例" Maven2项目集成springmvc, spring3, ibatis和freemarker"提供了一个完整的解决方案,旨在帮助开发者快速搭建基于这些技术的Web应用程序。以下是这些技术的详细说明和集成过程。 **Maven2**: Maven是一款...

    freemarker简单实例

    freemarker简短易懂的工具类

    freemarker+struts2.0 实例20090309.rar

    这个"freemarker实例20090309"项目包含了一个完整的MyEclipse Web工程,可以直接运行。在运行前,确保已正确配置了Tomcat服务器,并将项目部署到服务器上。启动服务器,访问项目中的某个Action,Struts2.0会处理...

    SpringBoot中整合freemarker示例代码

    本文将详细介绍如何在Spring Boot项目中集成Freemarker,并通过示例代码进行讲解。 首先,我们需要在项目的`pom.xml`文件中添加对`spring-boot-starter-freemarker`的依赖: ```xml &lt;groupId&gt;org.spring...

    grails使用freemarker.rar

    标题中的“grails使用freemarker.rar”表明这是一个关于如何在Grails框架中应用FreeMarker模板引擎的资源包。FreeMarker是一个开源的、基于Java的模板引擎,它用于生成动态HTML或其他格式的文本,比如XML、PDF等。...

    freemarker 例子

    在本示例中,我们将深入探讨Freemarker的基础用法、核心概念以及如何创建一个简单的Freemarker示例。 **一、Freemarker基本概念** 1. **模板(Templates)**: 模板是Freemarker的核心,它包含静态文本和动态占位符...

    struts2+hibernate+freemarker项目实例

    这个"struts2+hibernate+freemarker"项目实例是将这三个框架集成到一起,构建了一个完整的Web应用程序。 **Struts2** 是一个强大的MVC框架,它基于Action和Result的设计模式,负责处理用户的请求,并将其转发到相应...

Global site tag (gtag.js) - Google Analytics