黑马程序员——生成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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值