生成静态页技术

摘要:
静态页面生成技术概述:1.什么是静态页面生成?从现有的ASP页面直接生成静态页面将节省很多。② GetPage文件夹用于存储生成的静态页面。

生成静态页技术

概要:

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

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

显提高;

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

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

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

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

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

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

伪静态:就是在外界(用户、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站长网

免责声明:文章转载自《生成静态页技术》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android 三种动画详解Bug实录 | 第二篇:重写WebMvcConfigurationSupport后SpringBoot自动配置失效下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

HTML 表单常用的代码元素

表单: 将数据通过浏览器提交到服务器的媒介。<form action="" method="get/post" ></form> get 提交有长度限制 post 提交无长度限制 一般常用post  表单元素:12个 1.文本类1).<input type="text" value=""> - 文本框 在文本框中输入...

【转】Hbuilder配置Avalon、Vue指令提示

转载自CSDN http://blog.csdn.net/jianggujin/article/details/71419828 我本人是一名Java后端开发,偶尔也会研究一下前端内容,因为Hbuilder是基于eclipse开发的,所以用起来倍感亲切啊,而且在我尝试使用的几款前端开发工具中,Hbuilder的表现也是相当出色地,可以访问Huilder官网...

ExtJS初接触 —— 了解 Ext Core

ExtJS初接触 —— 了解 Ext Core Ext Core是一款和jQuery媲美的轻型JS库,基于MIT许可。对于Dom的操作,我个人还是比较喜欢用jQuery。当然如果项目中用的是ExtJS框架,也就没必要多引用一个jQuery,Ext Core是ExtJS框架的一个小子集。如果仅仅使用Ext Core的功能,则只需引入builds文件夹下的一个...

【转】 JS实现HTML标签转义及反转义

原文地址:http://blog.600km.xyz/2015/12/15/js-encode-html-tags/ 简单说一下业务场景,前台用户通过input输入内容,在离开焦点时,将内容在div中显示。 这时遇到一个问题,如果用户输入了html标签,则在div显示中,标签被解析。 由于是纯前端操作,不涉及后端,因此需要通过js对输入内容进行转义。 这里...

利用PHPStudy搭建伪静态页面

(本文仅为平时学习记录,若有错误请大佬指出,如果本文能帮到你那我也是很开心啦) 该笔记参考网络中的文章,本文仅为了学习交流,严禁非法使用!!! 一、介绍 1.动态页面:http://www.test.com/index.php?id=1(容易受到网路爬虫爬取,攻击) 2.静态页面:http://www.test.com/index.html(只能够展示...

gulp搭建前端自动化开发环境

gulp是基于node编写的一个构建工具,有4个主要的API: gulp.src() - 输出符合条件的文件 gulp.dest() - 能被pipe进来,并写文件 gulp.task() - 定义任务 gulp.watch() - 监听文件   首先,默认node环境已经安装; 全局安装gulp: npm i -g gulp 新建文件夹,npm初始化:n...