关于静态页面的生成,网上说的天花乱坠,其实就是披着一层纱,把这层纱揭去,一切全部了然。我不明白为什么网上把这个说的那么神乎其神?其实,相当简单。
静态页面的用处,无非就是减少读取数据量的次数,但是随之而来的弊端就是一条记录对应一个html页面,虽然不大,但是长此以往几k几k也可以吃掉硬盘。所以仔细想想便可知道静态页面在什么场合推荐生成。
1 列表页:这个页面无论如何也不能生成静态页面的。因为东西随时在变化,随时在更新。列表的便利是不能图省事的。
2 添加页:嗯。推荐使用。添加完成把这条记录通过模板生成html静态页面。等到列表页点击进入查看详情的时候就可以不必通过id再读一次数据库了。对于小型网站无所谓。但是对于点击量相当大的网站(sohu,sina),大家可以看看。没有哪个页面的连接是*.do,*,jsp的。几乎通一色的html,shtml。如果不这样的话,那么他的服务器性能再高,这么高点击量也会玩死他。
3 修改页:修改的时候需要注意的是把原来的静态页面删除,在生成一个新的静态页面;所以添加修改的时候需要往数据库里面存一个存储静态页面路径的字段。以便可以随时更新读取这条记录。
4 删除页:删除的时候记得把静态页面从内存中删除。虽然不大,但是长此以往也会使硬盘吃不消。
好,长话短说。看代码:
1 需要导入的jar文件从网上搜一下就都有了。
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
action部分代码:(把vo传给dao进行生成页面的操作)
2 SensitiveVo vo = new SensitiveVo();//页面展示的vo类。
vo.setMgWordContent("静态页面");
vo.setCreateTime("2008-12-12");
vo.setUserName("admin");
String filePath = "F://workspace//Qxt2//WebRoot//static_html";//静态页面生成后存放的路径
String finalFilePath = SensitiveManager.getInstance().jspTOhtml(filePath, vo);//根据一些自己定义的规则可以获得生成文件的绝对路径
dao类:(通过模板文件生成静态html文件,并且返回随即生成的文件名称并且存储到该对象指定的专门存储静态页面的字段中)
public String jspTOhtml(String filecreatePath, SensitiveVo sensitiveVo) throws Exception {
//以下是velocity模板的调用 start
Velocity.init();
StringWriter sw = new StringWriter();
Properties p = new Properties();
p.setProperty(VelocityEngine.FILE_RESOURCE_LOADER_PATH, "F://workspace//Qxt2//WebRoot//template");//这是模板所在路径
VelocityEngine ve = new VelocityEngine();
ve.init(p);
//设置velocity内容
VelocityContext context = new VelocityContext();
context.put("sensitiveVo", sensitiveVo);
Template t = ve.getTemplate("sensitive_detail.vm","GBK"); //需要取得模板的名称。
t.merge(context, sw);
//根据时间得文件名
Calendar calendar = Calendar.getInstance();
String fileame = String.valueOf(calendar.getTimeInMillis()) +".html";
fileame = filecreatePath + "//" +fileame;//生成的html文件保存路径
FileOutputStream fileoutputstream = new FileOutputStream(fileame);//建立文件输出流
PrintWriter printWriter = new PrintWriter(fileoutputstream,true);
printWriter.println(sw.toString());
fileoutputstream.close();
sw.flush();
return fileame;//返回生成的静态页面的名称。随即生成的名称。可以自己定义规则。这里用时间毫秒级来设定。
}
3 记录添加进去了,文件生成出来了。最后需要做的就是修改这条记录,把刚才空的记录静态页面的路径名存到指定的字段中。
ok。everything is ok。
由于项目比较忙,没有太多的时间写这些。代码只是部分的。但是基本可以说明问题了。看后要顶哦~~~