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

简介:
地球人都知道,静态HTML页面通常会比服务器端页面如asp、aspx页面要来的快,即使这些页面没有服务器端代码。
另外要命的是,这些页面在主流的搜索引擎能中最为吃香,和那些aspx还带几个尾巴参数的页面比起来,真是天上地下。
如果那天老板发现这个问题,叫你把辛辛苦苦实现的服务器端程序向静态HTML页面靠拢,你会做何感想?
有一种URL重写的方案可以实现对搜索引擎的欺骗,除了这种方法,自动生成静态HTML页面应该是最彻底的方法了。
言归正传,开始介绍如何实现吧
1. 引用Nvelocity0.5,记得是0.5哦,NVelocity0.4我试过好久,好像不行,好像和路径有关系。
2、引用一些需要的命名空间
None.gif using NVelocity;
None.gif using NVelocity.App;
None.gif using NVelocity.Exception;
None.gif using NVelocity.Runtime;
None.gif using NVelocityTemplateEngine;
None.gif using NVelocityTemplateEngine.Interfaces;
3、初始化一些变量来使用
None.gif        INVelocityEngine fileEngine;
None.gif        IDictionary context;
ExpandedBlockStart.gif         /// <summary>
InBlock.gif        
/// 初始化NVelocity模板引擎并加载程序的配置信息e
ExpandedBlockEnd.gif        
/// </summary>

None.gif         protected  void InitTemplateEngine()
ExpandedBlockStart.gif         {
InBlock.gif            context = new Hashtable();
InBlock.gif            string templateDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Articles");
InBlock.gif            fileEngine = NVelocityEngineFactory.CreateNVelocityFileEngine(templateDirectory, true);
ExpandedBlockEnd.gif        }
4、页面生成代码
None.gif         public  override  void Execute()
ExpandedBlockStart.gif         {
InBlock.gif            string message = string.Format("Create the Helper class file.");
InBlock.gif            log.Debug(message);
InBlock.gif
InBlock.gif            string sql = string.Format("select * from article ");
InBlock.gif            if (!isCreateAll)
ExpandedSubBlockStart.gif            {
InBlock.gif                sql = string.Format("select * from article where generated =False ");
ExpandedSubBlockEnd.gif            }

InBlock.gif
InBlock.gif            using (IDataReader reader = xConfig.ExecuteReader(sql))
ExpandedSubBlockStart.gif            {
InBlock.gif                while (reader.Read())
ExpandedSubBlockStart.gif                {
InBlock.gif                    PrepareClass(reader);
InBlock.gif                    OutputFile();
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

InBlock.gif            
InBlock.gif            sql = "update article set generated =True ";
InBlock.gif            if (!isCreateAll)
ExpandedSubBlockStart.gif            {
InBlock.gif                sql = "update article set generated =True  where generated =False ";
ExpandedSubBlockEnd.gif            }

InBlock.gif            xConfig.ExecuteNonQuery(sql);
ExpandedBlockEnd.gif        }

None.gif
ExpandedBlockStart.gif         /// <summary>
InBlock.gif        
/// Prepares the class content.
ExpandedBlockEnd.gif        
/// </summary>

None.gif         private  void PrepareClass(IDataReader reader)
ExpandedBlockStart.gif         {
InBlock.gif            FileNameOfOutput = string.Format("{0}#{1}", ((DateTime) reader["datetime"]).ToString("yyyy-MM-dd"), reader["id"].ToString());
InBlock.gif
InBlock.gif            context.Clear();
InBlock.gif            context.Add("id", reader["id"].ToString());
InBlock.gif            context.Add("category", reader["category"].ToString());
InBlock.gif            context.Add("title", reader["title"].ToString());
InBlock.gif            context.Add("content", reader["content"].ToString());
InBlock.gif            context.Add("datetime", reader["datetime"].ToString());
ExpandedBlockEnd.gif        }
None.gif
ExpandedBlockStart.gif         /// <summary>
InBlock.gif        
///根据模板创建输出的文件
ExpandedBlockEnd.gif        
/// </summary>

None.gif         public  virtual  void OutputFile()
ExpandedBlockStart.gif         {
InBlock.gif            if (fileEngine != null)
ExpandedSubBlockStart.gif            {
InBlock.gif                string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, directoryOfOutput);
InBlock.gif                string fileName = Path.Combine(filePath, fileNameOfOutput + fileExtension);
InBlock.gif
InBlock.gif                DirectoryInfo dir = new DirectoryInfo(filePath);
InBlock.gif                if (!dir.Exists)
ExpandedSubBlockStart.gif                {
InBlock.gif                    dir.Create();
ExpandedSubBlockEnd.gif                }

InBlock.gif                
InBlock.gif                log.Debug(string.Format("Class file output path:{0}", fileName));
InBlock.gif                using (StreamWriter writer = new StreamWriter(fileName, false))
ExpandedSubBlockStart.gif                {
InBlock.gif                    fileEngine.Process(context, writer, this.templateFile);
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif        }
5、界面层生成页面
None.gif             string template =  " page.htm ";
None.gif             try
ExpandedBlockStart.gif             {
InBlock.gif                HelperClassAdapter helper = new HelperClassAdapter(template, false);
InBlock.gif                helper.Execute();
InBlock.gif                Response.Write("<script>alert('生成成功');</script>");
ExpandedBlockEnd.gif            }

None.gif             catch(Exception ex)
ExpandedBlockStart.gif             {
InBlock.gif                Helper.ShowError(this, ex, false);
InBlock.gif                return;
ExpandedBlockEnd.gif            }
页面生成就可以了,具体做法自己琢磨就可以了。
页面模板文件
None.gif < HTML >
None.gif < HEAD >
None.gif < TITLE >$title </ TITLE >
None.gif < META  http-equiv =Content-Type  content ="text/html; charset=UTF-8" >
None.gif < META  content ="$title"  name =description >
None.gif < META  content ="$title"  name =keywords >
None.gif     </ HEAD >
None.gif     < BODY >
None.gif       < strong  class ="style3" >$title </ strong ></ h2 >
None.gif       < div > $content  </ div >
None.gif       < hr  width ="98%" />
None.gif       < div  align ="right" >$datetime </ div >
None.gif     </ BODY >
None.gif </ HTML >
本文转自博客园伍华聪的博客,原文链接: 使用NVelocity0.5实现服务器端页面自动生成,如需转载请自行联系原博主。


目录
相关文章
|
负载均衡 前端开发 JavaScript
3分钟搞懂阿里云服务器安装Nginx并配置静态访问页面
3分钟搞懂阿里云服务器安装Nginx并配置静态访问页面
5965 6
3分钟搞懂阿里云服务器安装Nginx并配置静态访问页面
|
8月前
|
JavaScript
新员工webpack打包后上传服务器页面空白
新员工webpack打包后上传服务器页面空白
47 0
|
6月前
|
API
关于 Spartacus 服务器端渲染的 404 Not found 页面处理
关于 Spartacus 服务器端渲染的 404 Not found 页面处理
41 0
|
9月前
|
JavaScript 数据库连接 PHP
php部署服务器后本地测试正常的页面顶部出现空白的(&#65279 BOM头)解决方案
php部署服务器后本地测试正常的页面顶部出现空白的(&#65279 BOM头)解决方案
62 0
|
9月前
|
数据采集 前端开发 JavaScript
详解服务器端渲染 页面(SSR)
详解服务器端渲染 页面(SSR)
125 0
|
10月前
|
Java
服务器端----------页面端标签控制权限jsp
服务器端----------页面端标签控制权限jsp
|
弹性计算 开发者 云计算
将表白页面上传到服务器|学习笔记
快速学习将表白页面上传到服务器
81 0
将表白页面上传到服务器|学习笔记
|
存储 弹性计算 块存储
阿里云服务器收费价格在哪查看?在云服务器ECS页面即可查询(计算器)
阿里云服务器1核1G云服务器S6配置0.9元一个月,1核2G1M配置1.90元一个月,2核1G3M带宽6元一个月,2核4G服务器40.98元3个月,4核8G服务器73.38元3个月,8核16G服务器138.18元三个月
1065 0
阿里云服务器收费价格在哪查看?在云服务器ECS页面即可查询(计算器)
|
弹性计算 Linux
将表白页面上传到服务器
一、安装FileZilla 二、上传
将表白页面上传到服务器
|
应用服务中间件 程序员 nginx
如何自定义好看的404页面?云服务器+Nginx中加3行配置搞定,小白也能流畅操作
我们来自己设计一个404网页,来给用户一个适当的报错页面,而不是直接报一个打不开的错误。
205 0
如何自定义好看的404页面?云服务器+Nginx中加3行配置搞定,小白也能流畅操作

热门文章

最新文章