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


        这几日,同学问我怎样将动态页面直接生车静态的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();

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

  • 相关阅读:
    win7(windows 7)系统下安装SQL2005(SQL Server 2005)图文教程( Win7 SQL Server2005 安装教程)
    PL/SQL -->隐式游标(SQL%FOUND)
    sql%found sql%notfound sql%rowcount sql%isopen
    C# WINFORM 窗体执行ORACLE存储过程 进行增删改查 自己编写借助网络(二)
    C# WINFORM 窗体执行ORACLE存储过程 进行增删改查 自己编写借助网络
    .net 接收存储过程的返回值 。。。。
    oracle-扫盲贴:存储过程实现增删改查
    sql加一个%号是什么意思
    关于ExecuteNonQuery执行存储过程的返回值 、、实例讲解存储过程的返回值与传出参数、、、C#获取存储过程的 Return返回值和Output输出参数值
    iOS网络请求之数据解析
  • 原文地址:https://www.cnblogs.com/weiwin/p/2570856.html
Copyright © 2020-2023  润新知