81,114
社区成员
发帖
与我相关
我的任务
分享import java.io.File;
import java.sql.Connection;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.apache.log4j.Logger;
import com.bao.config.Config;
import com.bao.dao.ConnectionManager;
import com.bao.dao.NewsDao;
import com.bao.domain.News;
import com.bao.service.NewsService;
import com.bao.util.TemplateUtil;
import com.bao.util.io.FileUtil;
public class NewsServiceImpl implements NewsService {
private final static Logger LOG = Logger.getLogger(NewsServiceImpl.class);
private final static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
/**
* 新增新闻页
*/
public News addNews(News news) {
// 初始化
preSaveNews(news);
String root = Config.getInstance().getNewsFilePath() + "/" + sdf.format(news.getCreateTime());
FileUtil.createDirector(root);
// 存放需要合并的数据
Map<String, Object> map = new HashMap<String, Object>();
map.put("news", news);
File file = new File(root, news.getFilename());
Connection con = null;
try {
NewsDao dao = Config.getInstance().getNewsDao();
con = ConnectionManager.getConnection();
con.setAutoCommit(false);
// 保存新闻内容
news = dao.save(news, con);
// 文件合并
TemplateUtil.merge(file, map, Config.getInstance().getNewsTemplateEncoding());
con.commit();
LOG.info("文件生成成功:" + file.getAbsolutePath());
} catch (Exception e) {
try {
con.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
// 错误时删除文件
file.delete();
news = null;
LOG.error("文件生成失败:" + file.getAbsolutePath());
LOG.error("错误原因:" + e.getMessage());
e.printStackTrace();
} finally {
if(con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return news;
}
public List<News> getNewsList() {
return Config.getInstance().getNewsDao().getAllNewsBasicInfo();
}
/**
* 设置 News 的建立时间和静态页面名称
* @param news
*/
private void preSaveNews(News news) {
Date date = new Date();
news.setCreateTime(date);
news.setFilename(UUID.randomUUID().toString() + ".html");
}
}import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.context.Context;
import com.bao.config.Config;
public class TemplateUtil {
/**
* 将数据与配置中的模板进行合并
* @param writer
* @param map
* @param encoding
* @throws Exception
*/
public static void generate(Writer writer, Map<String, Object> map, String encoding)
throws Exception {
generate(writer, map, Config.getInstance().getNewsTemplatePath(), encoding);
}
/**
* 将数据与模版板进行合并
* @param writer 输出流
* @param map 数据
* @param templateName 模板文件名
* @param encoding 编码格式
* @throws Exception
*/
public static void generate(Writer writer, Map<String, Object> map,
String templateName, String encoding) throws Exception {
Properties p = new Properties();
p.setProperty("file.resource.loader.path", "f:/web/base");
VelocityEngine engin = new VelocityEngine();
engin.init(p);
Template template = engin.getTemplate(templateName, encoding);
Context context = new VelocityContext();
for(Iterator<String> i = map.keySet().iterator(); i.hasNext(); ) {
String key = i.next();
context.put(key, map.get(key));
}
context.put("TOOL", new VelocityUtils());
template.merge(context, writer);
}
/**
* 合并数据,生成文件
* @param file 文件
* @param map 数据
* @param encoding 编码
* @throws Exception
*/
public static void merge(File file, Map<String, Object> map, String encoding) throws Exception {
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), encoding));
generate(bw, map, encoding);
} finally {
bw.close();
}
}
}<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>新闻 -- $news.title</title>
<link rel="stylesheet" type="text/css" href="../style.css" />
</head>
<body>
<div id="main">
<div id="title">$news.title</div>
<div id="sub">$TOOL.formatDate($news.createTime, "yyyy-MM-dd HH:mm:ss") 作者:$news.author</div>
<div id="content">
$news.content
</div>
</div>
<div id="side"> </div>
</body>
</html>