生成html页面的ftl文件,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 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 root = new HashMap();
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 ids = new ArrayList();
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 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 設置編碼
總結
以上是生活随笔為你收集整理的生成html页面的ftl文件,FreeMarker生成静态HTML页面的工具类FreeMarkerUtil的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利率上浮5%怎么算
- 下一篇: 上海黄埔军校在哪个区?