使用Velocity生成静态页面减轻数据库压力提升网站性能

为减轻数据库服务器的访问压力,使用Velocity模板引擎为生成静态页面

在大型商务网站或门户网站中,网站的访问量一般很高,所以需要对网站的性能进行优化。其中数据库的瓶颈是阻止网站正常运行的最大问题所在。所以我们可以通过技术减少数据库的访问次数。

为此,可以使用静态页面技术。对于那些经常需要访问的页面,生成对于的静态页面。这样用户访问到的是静态页面时,不用访问数据库,大大的减少了数据库的压力。这里,我们使用Velocity模板引擎生成静态页面的方法为经常访问的页面生成静态页面。

准备项目环境

首先引入Velocity相关的JAR包,并在项目中适当的地方创建runtime.log和file.resource.loader.path需要用到的目录

详细的步骤见:Velocity模板引擎的介绍和基本的模板语言语法使用

初始化Velocity模板引擎

在项目初始化的同时初始化Velocity模板引擎,这里把初始化代码写在一个Filter的init方法中,并且动态生成Properties配置:

try{
Properties prop = new Properties();
prop.put(“runtime.log”, filterConfig.getServletContext().getRealPath(“/WEB-INF/log/velocity.log”));
prop.put(“file.resource.loader.path”, filterConfig.getServletContext().getRealPath(“/WEB-INF/vm”));
prop.put(“input.encoding”, “UTF-8”);
prop.put(“output.encoding”, “UTF-8”);
Velocity.init(prop);
}catch( Exception e ){
e.printStackTrace();
}

在适当的处理方法中输出静态页面

这里因为在产品展示界面需要生成静态页面,所以在产品添加和修改的Action方法中添加生成静态页面的代码即可,生成的shtml文件保存在网站的根目录的html文件夹下:

File saveDir = new File(request.getSession().getServletContext()
.getRealPath(“WebRoot/html/product/“+product.getType().getTypeid()));
System.out.println(saveDir);
if(!saveDir.exists())
saveDir.mkdirs();
VelocityContext context = new VelocityContext();
context.put(“product”, product);
Template template = Velocity.getTemplate(“productview.html”);
File output = new File(saveDir, product.getId()+”.shtml”);
FileOutputStream outStream = null;
OutputStreamWriter writer = null;
BufferedWriter sw = null;
try {
outStream = new FileOutputStream(output);
writer = new OutputStreamWriter(outStream,”UTF-8”);
sw = new BufferedWriter(writer);
template.merge(context, sw);
sw.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
sw.close();
outStream.close();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}

替换原来的访问数据库链接

最后把原来查看产品展示界面的链接替换成静态页面的链接即可:

arthinking wechat
欢迎关注itzhai公众号