静态页、Url重写

页面静态化

  优点:降低数据库、web服务器压力,访问速度比较快; 同时,让搜索引擎搜录该链接的几率大,有助于seo

  思路:将"newsDetail.aspx?id=101"动态的生成的网页,下载到自定的文件夹,然后重新命名:20120319/101.htm。这样用户在访问的时候,就直接访问101.htm,静态页的好处这时就体现了。

  示例代码:

            //文章编号id
       string newPath = id + ".htm";
            string localPath = HttpContext.Current.Server.MapPath("~/20120319/" + newPath); //HostingEnvironment.MapPath();
            //创建文件夹
              Directory.CreateDirectory(Path.GetDirectoryName(localPath));
            WebClient wc = new WebClient();
            wc.Encoding = Encoding.UTF8;
            //通过WebClient向服务器发Get请求,把服务器返回的html内容保存到磁盘上。以后用户直接请求html文件请求。
              wc.DownloadFile("http://localhost:7930/newsDetail.aspx?id=" + art.id, localPath);

   页面的a标签就可以这么写:<a href='20120319/<%#Eval("id") %>.htm'><%#Eval("title")%></a>

  静态页注意几个问题:

  1.页面编码问题:需要保存的页面指明编码方式(<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />),

   WebClient下载网页时,也要注意编码问题。

  2.路径: 图片、js、css等都用绝对路径

      3.页面上不要使用服务器控件,都用ajax处理

Url重写

  页面静态化和URL重写目的不一样,URL重写和页面静态化都可以SEO,

  但是URL重写SEO的开发难度小,页面静态化除了SEO之外还能大大降低服务器的压力。只有经常被访问的、很少变化的内容做成静态化。

  示例代码

   protected void Application_BeginRequest(object sender, EventArgs e)
        {
            string url = HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath;//获得用户要访问的资源。这个属性获得的是虚拟路径
              //判断用户访问的是否是/Art/newsDetail-101.aspx格式
              Match match = Regex.Match(url, @"~/Art/newsDetail-(\d+)\.aspx");
            if (match.Success)
            {
                string id = match.Groups[1].Value;
                //把客户端请求发给内部的其他页面
                  HttpContext.Current.RewritePath("~/Art/newsDetail.aspx?id=" + id);
            }
        }

   

  顺便提下:C#跳转页的方式

  Server.Transfer仅是服务器中控制权的转向,就同Application_BeginRequest事件处理一样,在客户端浏览器地址栏中不会显示出转向后的地址;        Response.Redirect则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。

  Server.Transfer是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。 这个过程中浏览器和Web服务器之间经过了一次交互。

    Response.Redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求。这个过程中浏览器和Web服务器之间经过了两次交互。

  很形象的例子:

  你去专卖店里买电脑,告诉销售员A要买的型号,当前店里没有此型号的产品。

  (Server.Transfer)方式是:A联系其他店里的销售员B,然后让B把货物送到A这里,你就可以顺利买到货物。

  (Response.Redirect)方式是:A直接告诉B地有此型号的商品,你就跑到B的自己买去了,也买到货物了。

   都可以买到货物,自己选择。

posted on 2012-03-19 23:19  ancient_sir  阅读(2057)  评论(0编辑  收藏  举报