页面静态化技术

页面静态化技术

好处:

(1)有利于搜索引擎搜索,搜索引擎在网页上搜索网页时首先获取的是后缀名为.html的静态网页,其次才是后缀名为.aspx的动态网页

(2)页面静态化技术也是使用后代处理进行,其实它并没有失去动态页面易于维护的优势

    页面静态化技术并不是真真正正的静态页面,而是通过动态页面去生成一个静态页面化的一个技术

    所以页面的内容仍然可以随服务器的请求而更新易于维护的优势仍然保持着

(3)有利于提升网页的性能和安全

    因为他是一个静态页面访问的是一个静态页面,所有在用户读取的时候并不能进行恶意攻击进等等的操作

 

下面是页面静态化的使用

1、再Index窗体中  Car是一个文件夹,用于存放静态页面

<form id="form1" runat="server">
        <div>
            <h3>汽车列表</h3>
            <p> <a href="Car/info_0.html">奥迪</a></p><!--静态页面路径-->
            <p> <a href="Car/info_1.html">宝马</a></p>
        </div>
    </form>

2、这里没用到数据库,所有就创建一个Car汽车类来创建字段

    public class Car
    {
        public int CarID { get; set; }//汽车编号
        public string Carname { get; set; }//汽车类型
        public string Brand { get; set; }//汽车品牌
        public string Piccuter { get; set; }//汽车图片路径
    }

3、建一个CaManger类 声明一个泛型集合用于保存初始化汽车的数据

复制代码
  public class Carmanger
    {
        //创建泛型集合模仿数据库
        public List<Car> cars = new List<Car>();
        //对集合初始化
        public Carmanger()
        {
            cars.Add(new Car() { Brand = "奥迪", CarID = 0, Carname = "奥迪A6L", Piccuter = "ad.jpg" });
            cars.Add(new Car() { Brand = "宝马", CarID = 1, Carname = "宝马5系", Piccuter = "bm.jpg" });
        }
    }
复制代码

4、再Car文件夹中添加一个Html页面(静态页面)也就是静态页面的模板 名为Template.html,并在页面设置显示的操作

复制代码
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <style>
        .car{
            width:25%;
            margin:0px auto;
        }
        .car dd{
            line-height:30px;
        }
    </style>
</head>
<body>
    <div class="car">
        <dl>
            <dt><img src="../imges/{$picture}" alt="Alternate Text" /></dt>
            <dd>车型:{$Carname}</dd>
            <dd>品牌:{$Brand}</dd>
        </dl>
    </div>
</body>
</html>
复制代码

5.添加一个一般处理程序(Handler1.ashx)选择项目-->新建现-->选Web-->滑到最底步-->选择一般处理程序

在一般处理程序中进行代码操作

复制代码
 /// <summary>
    /// CarHandler1 的摘要说明
    /// </summary>
    public class CarHandler1 : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            //获取当前路径
            string Url = context.Request.RawUrl;
            //找到下划线和点.的位置
            int line = Url.LastIndexOf("_");
            int dot = Url.LastIndexOf(".");
            //对原始路径进行截取路径编号
            int CarID = int.Parse(Url.Substring(line + 1, dot - line - 1));
            //拼接静态物理路径
            string carFliePath = context.Server.MapPath("~/Car/info_" + CarID + ".html");
            //判断路径是否存在
            if (!File.Exists(carFliePath))
            {
                //不存在就创建静态页面
                //先创建汽车数据列表
                Carmanger cm = new Carmanger();
                //new汽车列表
                List<Car> cars = cm.cars;//把汽车数据列表赋值到汽车列表集合里
                //获取其路径  真正实际的存在的模板路径获取
                string template = context.Server.MapPath("~/Car/Template.html");
                //获取的模板进行读取出来  需要新建一个方法专门去读取模板内容

                //跟据文件路径获取到模板的内容
                string templateHtml = ReadTemplate(template);
                //读取模板的内容 替换模板数据内容 Replace替换
                templateHtml = templateHtml.Replace("{$Carname}", cars[CarID].Carname);
                templateHtml = templateHtml.Replace("{$Brand}", cars[CarID].Brand);
                templateHtml = templateHtml.Replace("{$picture}", cars[CarID].Piccuter);
                //根据路径保存进去  静态路径    模板内容
                WriteHtmlFile(carFliePath, templateHtml);
            }
            //发送到客户端
            context.Response.WriteFile(carFliePath);
        }

        //模板读取方法
        private string ReadTemplate(string templatePlate)//传入的参数是模板文件名
        {
            //判断文件是否存在
            if (!File.Exists(templatePlate))
            {
                //不存在则返回路径有问题
                throw new Exception("汽车详情的页面模板文件未找到!");
            }
            //创建文件流,把模板数据读取出来   模板文件       打开IO流
            FileStream fs = new FileStream(templatePlate,FileMode.Open);
            //打开后,进行读取  StreamReader对象 就是在IO流中取到其流中的数据(抽象理解为在开通的河流中取到河流中的水)
            StreamReader sr = new StreamReader(fs); //fs-->对上面创建的IO流数据进行读取
            //把模板文件流的数据全部读取出来
            string templatHtml = sr.ReadToEnd();
            //关闭文件流
            sr.Close();
            //将读取到的数据返回
            return templatHtml;
        }

        //模板读取之后 再根据页面的ID重新写新的静态网页
        private void WriteHtmlFile(string savePath,string htmlstr)//传入的第一参数是存储到哪个地方?
        {                                                         //第二个是html文件存储的内容 
        //FileStream对象对文件的读取和写入操作的功能  FileMode.Create表示创建一个新的文件,如果文件已存在,则会覆盖已有文件
            FileStream fs = new FileStream(savePath, FileMode.Create);
            //StreamWriter对象向文本文件写入数据
            StreamWriter sw = new StreamWriter(fs);
            //写入文本数据  参数:写到哪里?
            sw.Write(htmlstr);
            //先关闭读写
            sw.Close();
            //关闭文件IO流
            fs.Close();
            
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
复制代码

6.最后在配置文件中配置Web.config文件

在配置文件中添加静态页面的配置文件

 <!--静态页面化配置文件-->
  <system.webServer>
    <handlers>
      <add verb="*" path="Car/*.html" type="页面静态化.CarHandler1" name="ch"/>
    </handlers>
  </system.webServer>

到这里就可以是实现页面静态化技术的基本用法了

----感谢观看,欢迎大佬指点!

posted @   花是花树是树  阅读(150)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示