黑马程序员——生成html静态页面,方便seo,加快加载速度

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------

    这几日,同学问我怎样将动态页面直接生车静态的html页面,我想了想以前做过这个,今天把方法做个总结。

    我所知道的生成静态页面的方法有两种,当然其他方法还有很多,我比较了解的是模板生成和地址映射。

    第一种模板生成:模板生成其实就死定义一个静态的html模板,然后将里面的关键字替换掉。例如:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
  <title>$ShowArticle</title>
   <body>
biaoti
<br>
$content<br>
author
</body>
</HTML>
$biaoti
<br>
$content<br>
$author
</body>
</HTML> 

然后用字符替换将关键字替换成动态的内容,输出html文件,这种方法灵活度太差,如果一个站点的网页形式千变万化,增删改查特别频繁,那么这种方法就显得无能为力了。

第二种方法地址映射,这种方法就把以上的缺点全都克服掉了。直接输入地址 生成静态。生成的静态 页面和动态页面一模一样。

代码:


public static string ExecAspxToHtml(string Url, string Path, string FileName)//参数:动态页面的地址,生成静态html的地址,html文件的名字
{
try
{
StringWriter strHTML = new StringWriter();
System.Web.UI.Page myPage = new Page(); //System.Web.UI.Page中有个Server对象,我们要利用一下它
myPage.Server.Execute(Url, strHTML); //将asp_net.aspx将在客户段显示的html内容读到了strHTML中
StreamWriter sw = new StreamWriter(Path+"/" + FileName, false, System.Text.Encoding.GetEncoding("GB2312"));
//新建一个文件Test.htm,文件格式为GB2312
sw.Write(strHTML.ToString()); //将strHTML中的字符写到Test.htm中
strHTML.Close(); //关闭StringWriter
sw.Close(); //关闭StreamWriter
return "生成成功";
}
catch (Exception ex)
{
return ex.ToString();

}
}

调用此方法

if (File.Exists(Server.MapPath("../") + "chanpin.aspx"))
{

tohtml.ExecAspxToHtml("../chanpin.aspx", Server.MapPath("../"), "chanpin.html");

}

就是这样就会自动生成静态页面html,方便吧,但是这种方法再用的时候一定要注意生成静态html后的链接,因为当你生成html后它原来的链接都是.aspx页面而现在都变成了html页面,所以还要在生成静态的时候过滤一下链接:

private string ReplaceStr(Match m)
{
return m.Value + ".html";
}

StreamReader sr = new StreamReader(Server.MapPath("../chanpin.html"), code);

 string html = sr.ReadToEnd();

html = html.Replace("cp_read.aspx?cpid=", "cpread/cp_read");

Regex reg = new Regex(@"(?is)(?<=<a\s?href[^>].*?)cpread/cp_read[\d]+");
html = reg.Replace(html, ReplaceStr);
sr.Dispose();
sr.Close();
StreamWriter sw = new StreamWriter(Server.MapPath("../chanpin.html"), false, code);


sw.Write(html);
sw.Flush();
sw.Close();

好就是这样差不多就完成了,可能还会遇到其他问题,想办法自己解决吧。

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------

转载于:https://www.cnblogs.com/weiwin/archive/2012/06/30/2570856.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

all any 或 此运算符后面必须跟_好好跟大家聊聊,最全面的 Python 重点

来源&#xff1a;二十一 链接&#xff1a;https://segmentfault.com/a/1190000018737045由于总结了太多的东西&#xff0c;所以篇幅有点长&#xff0c;这也是我"缝缝补补"总结了好久的东西。Py2 VS Py3print成为了函数&#xff0c;python2是关键字不再有unicode对…

myeclipse2014删除antlr-2.7.2.jar--解决struts和hibernate包冲突

方式一&#xff1a; 要求眼疾手快&#xff0c;在workspace下的D:\myeclipse2014workspace\.metadata\.me_tcat7\webapps\工程名\WEB-INF\lib中将antlr-2.7.2.jar删除。此法&#xff0c;每次启动都会讲jar包有增加进去&#xff0c;在程序刚将antlr-2.7.2.jar添加进来的时候立刻删…

javascript读写本机文本文件

近日在工作中遇到了一个情况&#xff1a;一张纯html的网页&#xff0c;用它一条一条输入数据&#xff0c;然后由JS运算出结果&#xff08;这些数据多半都是临时的&#xff0c;所以也没考虑保存到数据库&#xff09;&#xff0c;每次用完后换台电脑或出去搞活动现场演示时&#…

Android高效开发:

Android高效开发&#xff1a; 原则&#xff1a;1.不要做不必要的事情&#xff0c;2尽可能节省内存使用 尽可能避免创建对象使用自身的方法&#xff0c;如string.indexOf(),String.lastIndexOf(),乘虚自身的方法 使用虚拟优于使用接口。在嵌入式开发中&#xff0c;通过接口引用来…

主板模式的两项通用性接口

主板模式的两项<通用性>接口by 高煥堂典型的主板模式(Motherboard pattern)提供了两个通用性接口&#xff0c;也就是&#xff1a;CI和<I>接口。如下图&#xff1a;(图-1) 这两个接口的典型关系&#xff0c;就如下图&#xff1a; (图-2) 这个CI接口的exe…

eeprom的wp 引脚_EEPROM存储芯片24C02

1、24C02简介24C02是一个2Kbit的串行EEPROM存储芯片&#xff0c;可存储256个字节数据。工作电压范围为1.8V到6.0V&#xff0c;具有低功耗CMOS技术&#xff0c;自定时擦写周期&#xff0c;1000000次编程/擦除周期&#xff0c;可保存数据100年。24C02有一个16字节的页写缓冲器和一…

ASP实现数据库事务处理的方法

在开发Web应用时&#xff0c;无一例外地需要访问数据库&#xff0c;以完成对数据的查询、插入、更新、删除等操作。受应用逻辑的影响&#xff0c;有时需要将多条数据库操作指令组成一个工作单元&#xff08;事务&#xff09;。在数据库中&#xff0c;所谓事务是指一组逻辑操作单…

Session会话技术

一、概念和快速入门 其中&#xff0c;一次会话则关闭浏览器后服务器端的Session数据就会清除&#xff1b; 二、原理 三、session详解 1、 2、 服务器关闭&#xff0c;内存销毁&#xff0c;开启服务要向系统底层资源申请内存&#xff1b; 创建对象分配地址值是随机的&#xff1b…

Spark MaprLab-Auction Data分析

2019独角兽企业重金招聘Python工程师标准>>> 一、环境安装 1.安装hadoop http://my.oschina.net/u/204498/blog/519789 2.安装spark 3.启动hadoop 4.启动spark 二、 1.数据准备 从MAPR官网上下载数据DEV360DATA.zip并上传到server上。 [hadoophftclclw0001 spark-1.…

labimage 怎样旋转图片_大理石旋转楼梯的测量方法,你学会了吗?

楼梯踏步使用什么材料比较好?大理石、木材以及瓷砖都是不错的选择大家可以根据自家的要求和经济条件进行选择天然大理石花色非常丰富在做了防护之后&#xff0c;光泽度就更加高端大气大理石本身不易变形硬度高&#xff0c;磨性强&#xff0c;组织缜密能够保证长期不变形&#…

asp.net日历控件My97DatePicker下载地址

http://www.my97.net/dp/demo转载于:https://www.cnblogs.com/554006164/archive/2009/04/08/1431676.html

VC++ MFC获取对话框上控件的位置

CRect rect;GetDlgItem(控件ID)->GetWindowRect(&rect);//获取控件的屏幕坐标 ScreenToClient(&rect);//转换为对话框上的客户坐标 转载于:https://www.cnblogs.com/lujin49/p/4921194.html

session案例之验证码

一、需求分析 其中&#xff0c;一张图片就是一个单独的请求&#xff1b; 一个验证验证码的Servlet&#xff0c;还有一个验证用户名和密码的Servlet&#xff0c;两次都可能有错误信息返回到前端页面&#xff0c;所以前面页面要从request域中获取返回的错误信息&#xff1b; 登录…

元数据

1. 什么是元数据任何文件系统中的数据分为数据和元数据。数据是指普通文件中的实际数据&#xff0c;而元数据指用来描述一个文件的特征的系统数据&#xff0c;诸如访问权限、文件拥有者以及文件数据块的分布信息(inode...)等等。在集群文件系统中&#xff0c;分布信息包括文件在…

php spry文本域_《PHP和MySQL Web 开发》第8章 设计Web数据库

封面人物刘承羽前言这是我学习《PHP和MySQL Web 开发》的读书笔记&#xff0c;一些重要的知识点我会记录下来&#xff0c;当然只会写我觉得重要的。如果有幸有人看到这个学习笔记了&#xff0c;你要结合着书看&#xff0c;不要光看这个笔记。在笔记里我会记录一些我学习中遇到的…

Appium+Robotframework实现Android应用的自动化测试-2:Windows中启动Appium和模拟器

一.启动Appium 安装好了之后&#xff0c;在桌面或者菜单中找到Appium&#xff0c;分别双击或点击打开Appium.exe&#xff0c;如果一切正常&#xff0c;接着会出现一个Appium启动后的界面窗口&#xff0c;如下图所示。 1.1 Android Settings 点击左上角的第一个机器人图标&#…

数据导出生成word附件使用POI的XWPFTemplate对象

比较常用的实现Java导入、导出Excel的技术有两种Jakarta POI和Java Excel。Jakarta POI 是一套用于访问微软格式文档的Java API。Jakarta POI有很多组件组成&#xff0c;其中有用于 操作Excel格式文件的HSSF和 用于操作Word的HWPF&#xff1b; 一、前端使用get请求和post请求都…

python小仙女_python——time库整理(基础知识+实例)

先上目录&#xff0c;1.Time库的作用2. Time库的使用3.实例1.Time库的作用time库是Python中处理时间的标准库提供获取系统时间并格式化输出功能提供系统级精确计时功能&#xff0c;用于程序性能分析2. Time库的使用先明确几个概念&#xff1a;时间戳&#xff1a;格林威治时间19…

JavaScript调用Web Services实现无刷新三联动

http://singlepine.cnblogs.com/articles/301009.html 使用微软提供的webservice.htc实现通过JavaScript调用WebService.1.首先从微软网站上下载webservice.htc,我附件源代码也包含&#xff0c;不下载也可以http://msdn.microsoft.com/workshop/author/webservice/webservice.h…

ArcGIS server for java 安装配置一 续

今天又发生件奇怪的事&#xff0c;昨天配置好的server for java环境&#xff0c;开机后rest服务有无法访问了&#xff0c;反复重装了几次&#xff0c;发现安装后 8399端口可以 使用&#xff0c;但修改了server.xml后&#xff0c;重启发现端口有无法使用了&#xff0c;提示端口下…