动态JSP页面怎样生成静态的html页面,请高手指点!!

lgq_0714 2009-03-18 08:53:54
动态JSP页面怎样生成静态的html页面,请高手指点,并且提供一个例子!!
...全文
274 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
vincent1811 2009-04-02
  • 打赏
  • 举报
回复
收藏
lgq_0714 2009-03-19
  • 打赏
  • 举报
回复
7L的我看看啊!谢谢了!
fys249931556 2009-03-18
  • 打赏
  • 举报
回复
。。最近经常碰到这种问题呢。

5L的代码你仔细看看,整站的静态页系统你是找不到的。。只能从基础的慢慢来。。

下边是关于一个freemarker生成静态页的例子,你也可以参考下,看哪个你比较容易接受。不懂可以mail:fanyunsheng@yahoo.cn
http://hi.baidu.com/newfys/blog/item/4586d9e9cdf0d338b90e2df5.html


lgq_0714 2009-03-18
  • 打赏
  • 举报
回复
只因本人太菜,让高手见笑了!!
  • 打赏
  • 举报
回复
最不喜欢这种问题了,问题问得泛泛不说,一上来就是要代码。

采用 Velocity 或者 FreeMarker 实现,在应用服务器下建一个虚拟路径用于保留这些静态页面。

如果要设计得好一些的话,代码量和类会很多。

下面这个是采用 Velocity 实现的,核心代码如下:

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>

advancejar 2009-03-18
  • 打赏
  • 举报
回复
网上随便找了个
他写了3个方法
http://www.sun.tzc.edu.cn/article.asp?id=8507

我没具体做过,但是我想asp和php是同个原理的
lgq_0714 2009-03-18
  • 打赏
  • 举报
回复
能不能提供一个具体的例子啊!!
advancejar 2009-03-18
  • 打赏
  • 举报
回复
忘说了.
我的问题地址
http://topic.csdn.net/u/20090318/20/b242e62a-b5ea-4d86-a09c-d7decc082815.html
advancejar 2009-03-18
  • 打赏
  • 举报
回复
一般和其他语言差不多
先弄个html的模板,里面需要替换的东西用特殊标记,然后生成的时候把特殊标记用jsp的动态替代,然后写文件
这样就成了


如果有空也请关注下我的问题

81,114

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧