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

地球人都知道,静态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>

本文转自博客园伍华聪的博客,原文链接:使用NVelocity0.5实现服务器端页面自动生成,如需转载请自行联系原博主。

时间: 2024-10-25 21:21:18

使用NVelocity0.5实现服务器端页面自动生成的相关文章

网页-用什么技术可以实现asp页面自动生成htm页面?

问题描述 用什么技术可以实现asp页面自动生成htm页面? 我的网站是用asp编写的,如何做到:在网页内容创建或者更新时自动生成静态HTML页面,以后的浏览全部引向静态页面?用什么技术去实现?可以向我推荐一些书籍! 解决方案 这个不是asp干的活,可以通过其他发布程序可以直接生成html页面的.百度下吧,现在发布成html页面的系统也比较多.asp页面最多是通过前端的web服务,可以配置成页面缓存. 解决方案二: 你可以是试一下asp.net的页面静态化,还是要写程序自动生成的 解决方案三: 全

求让页面自动生成关键字跟描述算法的思路

问题描述 我想让页面根据页面本身拥有的内容,自动生成Keywords和Description,算法可以自己写,但是不知道怎么去写.求大侠们给我说下如何去实现的思路 解决方案 解决方案二:自动生成Keywords和Description也得有个生成条件吧?生成哪些.?你得给关键字定一个约束.用这个条件来生成.解决方案三:自动生成会很烂的,看看QQ日志生成的关键字有多烂

web平台动态页面自动生成静态网页中包含的外部页面的四种办法

开发web平台时,很多程序员都注重自己的网页访问速度快(当然这些快的原因还有服务器配置.接入 带宽等),现在来谈谈程序编写这块,因为静态页面访问速度比动态的快,所以我们就是想如何把自己动 态的页面变成静态页面.比如www.bianceng.cn 各栏目读取内容页面就是静态页面. 下面就举四种办法来说说静态页面中如何包含外部页面: 一.应用框架技术 在生成静态页面后要在宿主页面中嵌入外部读取数据库页面的方法是,在宿主页面中包含外部页面的 位置插入"<IFRAME name="XXX

帝国cms实现用户访问页面自动生成html

原因: 帝国cms在批量生成文件的时候非常慢.更改了一次模板,往往要更新半天. 思路: 删除所有html->利用nginx匹配未生成的html->php生成html 如果nginx 检测html已经生成,则直接展示,不跳转到php 实现:  代码如下 复制代码 location /{ alias /home/web/xxx.com/; if (!-e $request_filename) { rewrite /(.*)/(.*).html$ /chtml.php?classid=1&i

【求助】.net页面中的自动生成级联图(拓扑图)的功能

问题描述 如图,数据库里有一些表示上下级关系的数据,现在领导有一个需求是直接把这些上下级以拓扑图的形式显示出来(就是在页面自动生成上面的那张图),并且每一个A/B/C这样的图标还能用鼠标点击(用于触发事件如跳转页面等等).求救呀,这该咋整,愁死了!看了很多其他平台的,感觉都需要安装JRE或者Silverlight等,我这个功能必须裸跑呀!谢谢大家了! 解决方案 解决方案二:哎,最烦的就是这种.不顾自己的公司的技术力量,想当然.其实可以用js在页面实现排版.你用静态页作出这样的效果就发现规律.解决

前端的小玩意(9.4)——做一个仿360工具箱的web页面(自动生成所有图标,对图标添加响应逻辑)

DEMO网址: http://jianwangsan.cn/toolbox (四)制作JSON,自动将图标填充进所有工具 首先是JSON,因为工具很多,所以JSON内容很长. 具体而言,JSON是一个数组中的对象(只有这一个对象),他有两个属性:BigImg和CommonImg. 这两个属性都是数组类型: BigImg里面,他用于存放最上面的三个大图标: CommonImg里面,存放其他工具图标. BigImg单个数组元素的结构如下: [javascript] view plain copy  

使用NVelocity自动生成Favorite收藏夹的导航页面

你是否碰到你的收藏夹凌乱不堪,或者很多收藏网页地址虽然分类,可是使用起来却感觉不太好,有 没有想过把你的收藏夹内容自动生成一个网页的导航页面生成类似Hao123(http://www.hao123.com/), 或者番茄花园导航(http://www.tomatolei.com/)一样的网页,用来迅速导航到自己的网址呢? 即使使用场景有争议,不过我们也来关注一下这种自动生成页面的技术吧,说不定可以使用在合适的 环境下,如下面我测试了两个类别的收藏夹 Favorite目录下,其中"搜索引擎&quo

自动生成ASPX页面

问题描述 文件系统可以新增很多文件类型,每一个文件类型对应一种文件,每一种文件需要生成一个查询的操作页面,所以要根据有多少种文件,就要生成多少个ASPX操作页面.请问,该如何自动生成ASPX操作页面啊.这个操作页面可以去查询数据的.谢谢了.急!急!

eclipse 编辑html页面,不知为何自动生成javascript代码,求解

问题描述 eclipse 编辑html页面,不知为何自动生成javascript代码,求解 是不是jsp配置的原因 解决方案 创建的时候把那些附加的选项都不要勾选,都去掉,创建一个空文档 解决方案二: 谢谢,已经解决了,原因是电脑中毒了. 解决方案三: - -...还以为你说的js代码跟你写的代码相关呢