首页 > 其他分享 >页面静态化技术

页面静态化技术

时间:2023-08-15 20:12:33浏览次数:23  
标签:string 静态 技术 new public 模板 页面

页面静态化技术

好处:

(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>

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

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

标签:string,静态,技术,new,public,模板,页面
From: https://www.cnblogs.com/hyh749/p/17632320.html

相关文章

  • mysql复制技术、mysql集群
    mysql复制技术/mysql集群准备1.四台虚拟机都关闭防火墙systemctlstopfirewalldsystemctldisablefirewalld2.四台虚拟机都设置好host域名解析,在/etc/hosts文件中添加如下[root@mysql01~]#vim/etc/hosts192.168.70.33master1192.168.70.34master2192.168.70.35......
  • 阿里云容器服务 ACK 产品技术动态(202307)
    ......
  • 【Alibaba中间件技术系列】「RocketMQ技术专题」让我们一起实践RocketMQ的服务搭建及
    推荐超值课程:点击获取RocketMQ是一款分布式、队列模型的消息中间件,具有以下特点1、能够保证严格的消息顺序2、提供丰富的消息拉取模式3、高效的订阅者水平扩展能力4、实时的消息订阅机制5、亿级消息堆积能力搭建一个双节点的RocketM环境背景:虚拟机:vmware12操作系统:ce......
  • 【Alibaba中间件技术系列】「RocketMQ技术专题」让我们一起探索一下DefaultMQPushCons
    推荐超值课程:点击获取RocketMQ开源是使用文件作为持久化工具,阿里内部未开源的性能会更高,使用oceanBase作为持久化工具。在RocketMQ1.x和2.x使用zookeeper管理集群,3.x开始使用nameserver代替zk,更轻量级,此外RocketMQ的客户端拥有两种的操作方式:DefaultMQPushConsumer和DefaultMQPu......
  • 基于Hexo和Butterfly创建个人技术博客,(15) 开发个人hexo主题-stylus动态样式语法
    stylus可以简单理解为一个动态的css样式表,在原有W3C规定的基础上增加了编程的能力,在使用前通过插件会再编译成普通的css文件。本章目标:掌握stylus样式语法,本章开始我们会从头开始编写自己的博客主题,同样采用pug和styl语法,官方帮助文档:stylus一、概述Stylus语法是python式基于缩进......
  • 微信小程序:排行榜页面模板
    文章目录1前言2模板代码3结语1前言在开发一款背单词的微信小程序时,为了加强用户的体验感,刺激用户积极学习,小程序中需要有排行榜的模块。通过打卡天数来排名,让用户有攀比学习的心里。具体的页面截图如下:2模板代码wxml<viewclass="container"><viewclass="rank-item"sty......
  • Streamlit 讲解专栏(三):两种方案构建多页面
    文章目录1前言2第一种方案:使用SessionState实现多页面交互2.1SessionState简介2.2多页面应用的基本结构2.3实现多页面交互的代码示例2.4SessionState机制的优缺点3第二种方案:Streamlit内置多页面方案(更为推荐)3.1如何运行多页面应用程序3.2添加页面3.3页面在用户界面......
  • 微信开发之一键搜码佳群的技术实现
    好友将群二维码发送给机器人,机器人调用本接口将自动识别入群请求URL:http://域名地址/scanJoinRoom请求方式:POST请求头Headers:Content-Type:application/jsonAuthorization:login接口返回参数:参数名必选类型说明wId是string登录实例标识url是string群二维码url(二维码解析后的url)type否......
  • 微信开发之一键扫码入群的技术实现
    好友将群二维码发送给机器人,机器人调用本接口将自动识别入群请求URL:http://域名地址/scanJoinRoom请求方式:POST请求头Headers:Content-Type:application/jsonAuthorization:login接口返回参数:参数名必选类型说明wId是string登录实例标识url是string......
  • vue页面对字段进行校验,必填未填则进行提示
    <el-form:model="form"><el-form-itemlabel="等级名称":label-width="formLabelWidth"prop="name":rules="[{required:true,message:'请输入等级名称',trigger:'blur'}]"></el-fo......