生成静态页技术

概要:

1、什么是生成静态页技术? 答:互联网上流行的做法是将数据源代码写入数据库再从数据库读取生成静态面,这样无形间就加大了数据库。将现有的ASP页直接生成静态页,将会节省很多。

2、为什么要生成静态页以及好处? 答:一、加快页面打开浏览速度,静态页面无需连接数据库打开速度较动态页面有明

显提高;

二、有利于搜索引擎优化SEO,Baidu、Google都会优先收录静态页面,不仅被收录的快还收录的全;

三、减轻服务器负担,浏览网页无需调用系统数据库;

四、网站更安全,HTML页面不会受Asp相关漏洞的影响;

观看一下大一点的网站基本全是静态页面,而且可以减少攻击,防sql注入。数据库出错时,不影响网站正常访问。

五、生成html文章虽操作上麻烦些,程序上繁杂些,但为了更利于搜索,为了速度更快些,更安全,这些牺牲还是值得的。

3、 生成静态页与URL重写的区别和联系? 答:静态化:就是在你的服务器中实实在在存在html页面,比如你站点有100篇文章,那么就有100个html文件与之对应。

伪静态:就是在外界(用户、SE等)看来你的站点貌似是静态的,但实际上是你的服务器通过某种技术,将一些动态的数据以静态url的方式展现了出来。比如外界看来“cn-1-2.html”实际上在你服务器内部会被转义为“news.aspx?lan=cn&class=1&id=2”这样类似的形式,而在你的服务器上,也只有news.aspx这么一个文件。

至于URL重写,这个只是伪静态技术的其中一种方法,它也是被广泛接受和比较正统的做法,例如在Asp.Net中就可以非常方便的以编码和配置的方式实现。

正文:实现页面静态化的基本步骤

一、建立文件夹以及相应页面.

1、在网站根目录下,建立一个html文件夹,用于存放你生成的html页面,以及相应的样式和模板页.

如图1-1所示:

图1-1

2、其他文件夹简介: ①、App_Themes以及scripts文件夹中存放你所需用来生成静态页的.css以及.js文件。

注:如果生成静态页不走形,此处可不用这两个文件夹。

②、GetPage文件夹用来存放生成的静态页面(.html)。

③、master 文件夹用来存放生成静态页的模板页面(.html)。 注:里面没有内容,是一个空的html页面,详情参见源代码。

如图1-2所示:

图1-2

④、为解决路径问题,可以为需要生成静态页的aspx页面统一建立一个文件夹。

如图1-3所示:

图1-3

⑤、CreateHtml.aspx页面用于执行相应代码,详情参见源代码。

二、配置web-config文件

在<compilation>中添加如下代码:

<assemblies>

<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

<add assembly="WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

</assemblies>

<buildProviders>

<add extension=".html" type="System.Web.Compilation.PageBuildProvider" />

</buildProviders>

作用是:没有为扩展名“.html”注册的生成提供程序。可以在 machine.config 或 web.config 中的 <compilation><buildProviders> 节注册一个。请确保所注册的提供程序具有包含值“Web”或“All”的 BuildProviderAppliesToAttribute 特性。这样才能使生成的.html文件可以再浏览器中可读。

三、实例代码详解($为重要部分)

壹、选择你要生成静态页的aspx页面路径,并建立数组,遍历出每一个URL,为下一步做准备。(详情参见源代码)

如图3-1所示

图3-1

贰、首先先运行第一个页面。

一、截取并修改第一个页面URL的名字(GetName),如:newslist.aspx--> newslist.html

如图3-2所示:

如图3-2

二、生成或替换子页面(ReplaceChild)。

如图3-3所示:

图3-3

I:首先先运行整个页面,获取这个页面的全部代码(getAllPage)。

如图3-4所示:

如图3-4

注:此处是易错点,应当确保URL的正确性。

II:筛选出来静态页对应模板页中的内容(GetContent)。

如图3-5所示:

图3-5

注:此处有关于正则表达式的,读者多注意。

$III:生成静态页(WriteFile)

III-1:页面代码预处理。

①、读取文件,并将该文件的内容以string的形式返回.

②、替换内容, 这时,模板文件已经读入到名称为str的变量中了.

③、套用模板页时,将变化的引用css路径替换为原来的路径.

如图3-6所示:

图3-6

注:此处有try-catch-finally用法,多注意其执行顺序呢。

$III-2:替换页面链接,包括(页面模板页、页面左侧导航页、以及子页面中的全部URL路径)(UpdateURL)。

主要分为以下三个部分:

第一部分:替换模板中连接。

1、在上文的筛选出的全部页面代码中进行预筛选,在模板页中标记相应的字符串,作为起始和结尾标记符(GetContent),如<!--MasterLinkStart-->";

2、在设定的开始、结尾字符中。截取中间需要操作的字符(GetContent)。

3、在第二步所操作的代码区域,循环遍历出,模板页中连接的个数

(GetContentList);

4、在筛选出来的模板连接中,找到<a>标签,用(GetName)方法将模板页中的连接重命名成.html格式。

5、循环结束后,原来的代码中模板页的连接,已经全部替换成了以页面名+.html结尾的新名称,如:“newslist.html”。

操作代码如下图3-7所示:

图3-7

第二部分:替换内容目录中连接

注:步骤、原理同上。

如图3-8所示:

图3-8

$第三部分:查找并替换子链接、分页连接以及生成该子链接的子页面(.html)。(核心之处)

1、 步骤同上,设置你所要替换子链接的开始和结尾字符串标记,如本例中的txtstart = "<div class=\"ruili_pagecon\">";

2、 步骤同上。

3、 步骤同上,同时,由于涉及到分页的问题,所以此处增加一个 newMC(),起到一个移除集合中是否有page=1的内容,并返回集合的作用(详情参见源代码)。

4、 此处对链接进行重命名与以上不同。是通过手动改动,而不是统一的通过判断某一特定字符截取,因为子链接中考虑到了包含参数的重命名,读者可以根据自己的链接的需要进行改动,因为用的是字符串的Replace方法,所以用户可以考虑出错,只要知道自己源代码的样式,以及目标代码样式就行。如本例中显示的:

newsdetails.aspx?NewsType=1&NewsID=2替换为newsdetails-1-2.html

如图3-9所示:

图3-9

注:   ①、此处是更改页面中子链接以及分页的链接形式(如果有的话)。

②、如果有分页链接,请注意其形式,因为有的分页形式不是通过<a>标签的,请注意你所生成的源代码中分页链接的形式,如果不是<a>标签,则改动相应代码,否则无法进行分页。

5、 将该子链接重命名之后,重新获取修改后的整个代码,你将会发现,现在全部的模板页,左侧目录页,以及该条子链接已经修改,接下来就是生成这个子链接的整个子页面了。

6、 此处有一个if判断,如果是包含page分页的,执行‘get’的ReplaceChild(),并将多个分页URL通过‘|’字符,连成字符串geturl,为下文做准备;否则执行‘replace’的ReplaceChild()。

如图3-10所示:

图3-10

7、获取最新的网页代码内容,执行ReplaceChild()函数,if判断,‘replace’执行生成静态页(WriteFile);‘get’执行pager生成静态页(ChildWriteFile)。

注:两个生成静态页函数几乎一致,只不过就是pager生成静态页不用再执行代码的UpdateURL(),因为子页面中以无其他的链接。此处虽然可以合并,都用WriteFile(),但是,编者认为,此处少去了无谓的遍历和循环,从而提高了运行速率,也条理清晰,所以我还是比较支持分开生成静态页。

8、完成第一个子页面的生成,接下来返回第3步,继续重写以及生成下一个子链接。

$III-3:直到该页面的子链接以及分页链接全部重写和生成。

如图3-11所示:

图3-11

三、将第一个页面newslist.aspx中的全部链接全部重写,子链接以及分页链接的页面也已经全部生成完成,接着,将此页面生成静态页。

注:此时已经生成的html页面有,一个newslist.html,还有子链接的html页面,以及分页的html页面。

四、接下来将$III-2:的第三部分的第6步中的geturl,进行判断,将‘|’分割开,建立数组,遍历各个分页页面,并进行页面的重命名。

如图3-12所示:

注:此处的分页的重命名一定要与页面中的分页链接重命名一致,否则出错。

五、重复一、二、三、四步骤,直到第一个页面newslist.aspx全部生成完,此时Gethtml文件夹下已经包含了,newslist.html,其中各个子链接html,还有分页的html,以及分页中的全部子链接html。到此,newslist.aspx页面已经完成了全部的生成静态化工作。

叁:遍历剩余要生成的页面,如本例中的,path + "recruitment.aspx", path + "index.aspx", path + "about.aspx"······等等

肆:完成。

伍:参考文献:

1、 asp.net生成静态页 - mathew的专栏 - 博客频道 - CSDN.NET

2、 Asp.NET生成静态页面并分页代码

3、 谈用伪静态(url重写)的方法替代生成静态页面的好处 - A5站长网

时间: 2024-08-02 07:03:22

生成静态页技术的相关文章

NET MVC RazorEngine 解析模板生成静态页

ASP.NET MVC 解析模板生成静态页一(RazorEngine) 简述 Razor是ASP.NET MVC 3中新加入的技术,以作为ASPX引擎的一个新的替代项.在早期的MVC版本中默认使用的是ASPX模板引擎,Razor在语法上的确不错,用起来非常方便,简洁的语法与.NET Framework 结合,广泛应用于ASP.NET MVC 项目. 我们在很多项目开发中会常常用到页面静态化,页面静态化有许多方式,最常见的就是类似很多PHP CMS种使用的 标签替换的方式(如:帝国CMS.EcSh

[Java Web]动态生成静态页

最近手机APP需要加一个分享功能.考虑到分享页面的点击量会远远大于注册用户量,为了减少服务器压力决定将分享页面生成html静态页供用户访问. 生成静态页的总体思路为: 从数据库中查找所需的数据 将数据嵌入到html代码中 把生成好的html代码通过文件流上传到服务器 数据嵌入可以通过两种方法实现:html模板替换或jsp动态生成. 1.html模板生成: 流程: 客户端向后端发出http请求 后端从数据库中查找需要的数据 从服务器找到对应的模板文件,替换其中内容并上传到服务器 将上传后得到的ur

ThinkPHP生成静态页buildHtml方法

原来ThinkPHP自带了生成静态页的函数buildHtml,使用起来很方便!最新的手册里没写这个方法,向大家介绍一下. PHP 1 2 3 4 5 6 7 8 9 10 11 protected function buildHtml($htmlfile='',$htmlpath='',$templateFile='') { $content = $this->fetch($templateFile); $htmlpath   = !empty($htmlpath)?$htmlpath:HTML

基于PHP生成静态页的实现方法

t1.php 复制代码 代码如下: <?php// 方法一根据模版生成静态页面// replaceTemplateString函数用于替换模板中指定字符串function replaceTemplateString($templateString) {    // 用来替换的变量    $title = "文章标题";    $body = "这里是文章主体";    // 替换模板 中指定字符串    $showString = str_replace (

动态请求页面生成静态页

话说百度也是这样提高浏览速度的:此案例是控件开发的,MVC或一般处理程序开发的小伙伴们,修修改改一样可以用的: 后台: 1 protected void btnHtml_Click(object sender, EventArgs e) 2 { 3 if (Request.QueryString["id"] != null) 4 { 5 string NewId = Request.QueryString["id"]; 6 CJRZ.Model.Admin.Loan

mvc分页生成静态页,mvc生成静态页

http://blog.csdn.net/xxj_jing/article/details/7899125 分页生成静态页 http://www.cnblogs.com/luanyilin/archive/2012/11/02/2751145.html 生成静态页

php+Smarty生成静态页原理,论坛里好多朋友都在问我这个问题。不懂的进来看下

其实用Smarty生成静态页我个人感觉比缓存生成静态页还要简单. 主要用到Smarty的这个方法 $Smarty->fetch("模板名") 这个函数用法很简单,和$Smarty->display("模板名") 是一样的. 不同的是$Smarty->fetch("模板名") 是把模板替换后的内容返回 而$Smarty->display("模板名")是直接输出也可以说是显示出来. 我们用$Smarty-&

以ASPX生成静态页

/// <summary> /// 以ASPX生成静态页 /// </summary> /// <param name="path"></param> /// <param name="outpath"></param> public static void CreateHtml(string path, string outpath) { Page page = new Page(); str

Asp.net新闻列表生成静态页批量生成和单页生成

其实生成静态页的目的就是为了提高用户的体验度,访问速度快,这是最直接的目的.... 前期准备,需要新建一个文件夹..前台展示:/new/default.aspx  这个页面放的就是动态的新闻列表数据. 先看截图.. 上代码 这里要说明一下,我用的AspNetPager分页控件,需要设置一下 <webdiyer:AspNetPager ID="AspNetPager1" runat="server" FirstPageText="首页" La