首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

freemarker范例

2012-07-02 
freemarker实例一、模板文件(ftl文件)!DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN h

freemarker实例

一、模板文件(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 blocke.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;}}}

?

热点排行