使用NVelocity0.5实现服务器端页面自动生成

【IT168技术文档】

  地球人都知道,静态HTML页面通常会比服务器端页面如asp、aspx页面要来的快,即使这些页面没有服务器端代码。
  另外要命的是,这些页面在主流的搜索引擎能中最为吃香,和那些aspx还带几个尾巴参数的页面比起来,真是天上地下。
  如果那天老板发现这个问题,叫你把辛辛苦苦实现的服务器端程序向静态HTML页面靠拢,你会做何感想?
  有一种URL重写的方案可以实现对搜索引擎的欺骗,除了这种方法,自动生成静态HTML页面应该是最彻底的方法了。
  言归正传,开始介绍如何实现吧
  1. 引用Nvelocity0.5,记得是0.5哦,NVelocity0.4我试过好久,好像不行,好像和路径有关系。
  2、引用一些需要的命名空间
using NVelocity; using NVelocity.App; using NVelocity.Exception; using NVelocity.Runtime; using NVelocityTemplateEngine; using NVelocityTemplateEngine.Interfaces;
  3、初始化一些变量来使用
INVelocityEngine fileEngine; IDictionary context;
/**//// <summary> /// 初始化NVelocity模板引擎并加载程序的配置信息e /// </summary> protected void InitTemplateEngine() { context = new Hashtable(); string templateDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Articles"); fileEngine = NVelocityEngineFactory.CreateNVelocityFileEngine(templateDirectory, true); }
  4、页面生成代码
public override void Execute() { string message = string.Format("Create the Helper class file."); log.Debug(message); string sql = string.Format("select * from article "); if (!isCreateAll) { sql = string.Format("select * from article where generated =False "); } using (IDataReader reader = xConfig.ExecuteReader(sql)) { while (reader.Read()) { PrepareClass(reader); OutputFile(); } } sql = "update article set generated =True "; if (!isCreateAll) { sql = "update article set generated =True where generated =False "; } xConfig.ExecuteNonQuery(sql); } /**//// <summary> /// Prepares the class content. /// </summary> private void PrepareClass(IDataReader reader) { FileNameOfOutput = string.Format("{0}#{1}", ((DateTime) reader["datetime"]).ToString("yyyy-MM-dd"), reader["id"].ToString()); context.Clear(); context.Add("id", reader["id"].ToString()); context.Add("category", reader["category"].ToString()); context.Add("title", reader["title"].ToString()); context.Add("content", reader["content"].ToString()); context.Add("datetime", reader["datetime"].ToString()); }
 

 

 

/**//// <summary> ///根据模板创建输出的文件 /// </summary> public virtual void OutputFile() { if (fileEngine != null) { string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, directoryOfOutput); string fileName = Path.Combine(filePath, fileNameOfOutput + fileExtension); DirectoryInfo dir = new DirectoryInfo(filePath); if (!dir.Exists) { dir.Create(); } log.Debug(string.Format("Class file output path:{0}", fileName)); using (StreamWriter writer = new StreamWriter(fileName, false)) { fileEngine.Process(context, writer, this.templateFile); } } }

  5、界面层生成页面

string template = "page.htm"; try { HelperClassAdapter helper = new HelperClassAdapter(template, false); helper.Execute(); Response.Write("<script>alert('生成成功');</script>"); } catch(Exception ex) { Helper.ShowError(this, ex, false); return; }

  页面生成就可以了,具体做法自己琢磨就可以了。
  页面模板文件

<HTML> <HEAD> <TITLE>$title</TITLE> <META http-equiv=Content-Type content="text/html; charset=UTF-8"> <META content="$title" name=description> <META content="$title" name=keywords> </HEAD> <BODY> <strong class="style3">$title</strong></h2> <div> $content </div> <hr width="98%"/> <div align="right">$datetime</div> </BODY> </HTML>

 

posted @ 2009-12-18 09:11  旭 日  阅读(298)  评论(0编辑  收藏  举报