zoukankan      html  css  js  c++  java
  • Asp.net 动转静 伪静态和真静态

    动转静分两种:伪静态和真静态

     先说下伪静态,伪静态要做三步工作

       第一步:在Web.Config 中加入这些代码:     

    <CustomConfiguration>
        <urls>
            <add virtualUrl="~/default.htm" destinationUrl="~/default.aspx" /> -----没有参数的页面
            <add virtualUrl="~/news_(\d+).htm" destinationUrl="~/news.aspx?page=$1" />-------    一个参数
            <add virtualUrl="~/(.[0-9]*[a-zA-Z-]*)_(\d+)_(\d+).htm" destinationUrl="~/products.aspx?catalogname=$1&amp;catalogid1=$2&amp;parentid=$3" /> --------产品目录页面参数比较多  
        </urls>
      </CustomConfiguration>
    第二步:html 中的链接改成.htm
    对应上面的
    如果超链接链到首页
    <add virtualUrl="~/default.htm" destinationUrl="~/default.aspx" />
    html 本来是这么写的 <a href="default.aspx"></a>
            现在要这么写    <a href="default.html"></a>
    其实就是把aspx后缀改成htm的后缀
    那有参数的呢?
    一个参数的:
    <add virtualUrl="~/news_(\d+).htm" destinationUrl="~/news.aspx?page=$1" />
    html 本来是这么写的 <a href="new_detail.aspx?id=1"></a>
            现在要这么写    <a href="new_detail_1.html"></a>
            参数要绑定        <a href="new_.detail_<%#eval_r("id")%>.html"></a>
    多个参数的:
    <add virtualUrl="~/(.[0-9]*[a-zA-Z-]*)_(\d+)_(\d+).htm" destinationUrl="~/products.aspx?catalogname=$1&amp;catalogid1=$2&amp;parentid=$3" />
    html 本来是这么写的 <a href="product.aspx?catalogname=iphone4&catalogid1=1&parentid=0"></a>
           这些参数什么意思 不解释 你懂的
           现在要这么写    <a href="iphone4_1_0.html"></a>
           参数要绑定        <a href="<%#eval_r("catalogname")%>_<%#eval_r("id")%>_<%#eval_r("parentid")%>.html"></a>
    第三步:
    这一步是设置服务器
    给你做的这个网站 设置下 添加扩展 .htm映射
     
      真静态 就稍微复杂点 
     第一:要有一个 URLRewriter.dll这个文件  这个文件很重要的 去网站下载 或者加我的QQ:236692031  发你 (加我的时候说明 URLRewriter.dll  一般不加的 )一定要引用  否则.....
    第二:创建一个.cs的文件 取名叫MyHtmlFileCreator.cs
    代码如下:

    using System;
    using System.IO;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.Util;
    using System.Web; 

    namespace wave.gong

    {
     /// <summary>
     /// HtmlFileCreator 的摘要说明。
     /// </summary>
     public class HtmlFileCreator
     {
            public StringWriter html;
            private HtmlTextWriter htmlWriter;
            public string newUrl;

                  // override the HtmlTextWriter to reach the constructor
                 // the constructor in the base class is protected
                 class HtmlFileCreator: HtmlTextWriter
               {
                public HtmlFileCreator(TextWriter tw) : base(tw) { }
               }


               // publish the HTMLwriter
               public HtmlTextWriter RenderHere
              {
                   get {return htmlWriter;}
               }
            // constructor initializes stringwriter and htmlwriter based on that
           // initialize Url
            public HtmlFileCreator()
          {
                html = new StringWriter();
                htmlWriter = new MyHtmlTextWriter(html);
                newUrl = System.Web.HttpContext.Current.Request.Url.AbsolutePath.ToString();// Context.Request.Url.AbsolutePath.ToString();
                newUrl = newUrl.Replace(".aspx",".html");
           }

           public void WriteHTMLFile(string virtualFileName)
          {
                // Stringreader reads output rendered by asp.net
                / Stringwriter writes html output file
                StringReader sr = new StringReader(html.ToString());
                StringWriter sw = new StringWriter();

               // Read from input
               string htmlLine = sr.ReadLine();
               while (htmlLine != null)
             {
                   // Filter out ASp.net specific tags
                    if (!((htmlLine.IndexOf("<body") > 0) ||
                         (htmlLine.IndexOf("__VIEWSTATE") > 0) ||
                        (htmlLine.IndexOf("</body>") > 0)))
                       {sw.WriteLine(htmlLine);}

                       htmlLine = sr.ReadLine();
                }


            // Write contents stringwriter to html file
           // StreamWriter fs = new StreamWriter(virtualFileName);
            StreamWriter   fs=new   StreamWriter(virtualFileName,false,System.Text.Encoding.UTF8);
            fs.Write(sw.ToString());
            fs.Close();
        }

      }
    }

    写的话 很复杂 而且有可能还看不懂

    还是给个例子大家把   源码点这里下载

    下载地址:http://www.hi002.com/Wave_Demo.rar

               

     

    上面是本人原创  转载请说明来源

     

    下面是网络上搜索来的 都是这样的

    众所周知,百度,谷歌等大型搜索系统比较喜欢.htm结尾的静态页面。而对于现在大部分企业网站来说实现动态是必须的。这就会影响到百度

    ,谷歌的收录以及排名。网站的动转静这时显得很重要。网站动转静也成为了绝大多数网站程序员追求。可是怎么实现网站的动静转换呢?首

    先要熟记网站的不同语言的读写操作,比如:用asp.net来实现动转静:

    (一)读

    string temp = HttpContext.Current.Server.MapPath("~/template/");
           string m = temp + "index.htm";
           System.IO.StreamReader sr = new System.IO.StreamReader(m,System.Text.Encoding.Default,false);
           string html = sr.ReadToEnd();

    对上的一段代码的理解是:定义一个变量temp用来存放网站模板的文件夹的路径。所有的模板都在根目录下的template里面。变量m是指在

    template文件里模板index.htm的路径。sr是System.IO.StreamReader 类型的容器,StreamReader可以简单理解是用来读取文件的类型,用来

    存放从m路径读取到的文件代码。读取完毕(sr.ReadToEnd)后,把代码放到变量html里,这时index.htm里所有的代码都已经放到了html里。

    (二)取代标签

           string title = "我的第一个asp.net动转静";
           string content = "我一定要记住这些语句!";
           html=html.Replace("{title}", title);
           html=html.Replace("{content}", content);

    对上面的代码理解是:定义两个变量title和content。然后把“我的第一个asp.net动转静”放到变量title里面;把“我一定要记住这些语句

    !”放到变量content里面。这些都很容易理解。可是{title},{content}怎么理解呢?简单的说他就是板里标记。你也可以用[title]和

    [content]或者!title和!content来做标记。这就要看个人喜好了。我有一个简单的index.htm的模板。代码如下:

    <html>
    <head>
    <title>
    {title}<!--题目标签,本例要替换的部分-->
    </title>
    </head>
    <body>
    {content}<!--内容标签,本例要替换的部分-->
    </body>
    </html>

    可是怎么替换呢?我们用到了RePlace()这个函数。比如:

    html=html.Replace("{title}", title);//把模板里的{title}标签替换成变量title里的内容。
    html=html.Replace("{contentle}",content););//把模板里的{content}替换成变量content里的内容。

    (三)写

    string path = HttpContext.Current.Server.MapPath("~/index.htm");
    System.IO.StreamWriter sw = new System.IO.StreamWriter(path,false,System.Text.Encoding.Default);
    sw.Write(html);

    对于以上代码的理解是:定义一个变量path,用来存放所要生成页面的路径。比如我要把生成的文件放到要目录下,并且命名为index.htm。那

    么string path = HttpContext.Current.Server.MapPath("~/index.htm");
    这时要用来到StreamWriter这个对象。这个对象是用来执行“写”操作的。格式如下:

    System.IO.StreamWriter sw = new System.IO.StreamWriter(path,false,System.Text.Encoding.Default);

    上面sw表示来用执行“写”操作的对象。用这个对象里有个write方法。就是利用这个方法来执行“写”操作。

    比如:sw.Write(html);//把上面代码中的html变量的内容写到path路径下,并命名为index.htm。

    然后关闭sw对象。比如:sw.Close();

    这样一个简单的动静转换就完成了。

    asp的动静转换也是如此的思想,只不过用到的代码不一样。但“读”“替换”“写”思想是一样的。

    有句话,网站编程不难,难的是编程的思想。

    百度搜索的全是这样的   我看不到不知道是什么回事都是什么模板的 别人要自己设计的前台那写怎么写呢?

    我发现在网上搜索不到一点实用的动转静的技术 就写了这边文章 希望能给Asp.net编程人员有所帮助 Asp.net初学者有帮助  

    这一边文章暂时写到这里 在动转静的过程中 还会遇到一些问题 伪静态没什么问题

    是在真静态的过程中的  真静态在分页过程中的一些问题   我单独写一篇文章写真静态分页的问题

     

    本文转载自:http://hi.baidu.com/gongjiutao/blog/item/75631068616a00e342169458.html

  • 相关阅读:
    AX ERROR: Could not find my mock parent, most likely I am stale 不及格的程序员
    利用Segue在视图控制器间传值的问题 不及格的程序员
    Creating a Singleton Instance 不及格的程序员
    iPad 通知 UIKeyboardWillShowNotification 不会在keyBoard处在Undock状态下接到通知 不及格的程序员
    Why RootViewController's view is rotated Automatically by System when the app first loaded? 不及格的程序员
    如何弹出UIDatePicker最好 不及格的程序员
    jQuery开始做恶了 不及格的程序员
    what is the SEL,id and IMP,Class ,Method? 不及格的程序员
    Objectivec 字符串比较的陷井 不及格的程序员
    Unable to create any keyboard shortcuts after the iOS 6.1.3 update on iPad. 不及格的程序员
  • 原文地址:https://www.cnblogs.com/activities/p/2205307.html
Copyright © 2011-2022 走看看