如何生成静态页面的五种方案

2023-10-27

方案1:

///   <summary>
///  传入URL返回网页的html代码
///   </summary>
///   <param name="Url"> URL </param>
///   <returns></returns>
public   static    string  getUrltoHtml( string  Url)
{
errorMsg 
=   "" ;
try
{
System.Net.WebRequest wReq 
=  System.Net.WebRequest.Create(Url);
//  Get the response instance.
System.Net.WebResponse wResp  = wReq.GetResponse();
//  Read an HTTP-specific property
// if (wResp.GetType() ==HttpWebResponse)
// {
// DateTime updated  =((System.Net.HttpWebResponse)wResp).LastModified;
// }
//  Get the response stream.
System.IO.Stream respStream   =  wResp.GetResponseStream();
//  Dim reader As StreamReader = New StreamReader(respStream)
System.IO.StreamReader reader  =   new  System.IO.StreamReader(respStream, System.Text.Encoding.GetEncoding( " gb2312 " ));
return   reader.ReadToEnd();

}
catch (System.Exception ex)
{
errorMsg 
=  ex.Message ;
}
return   "" ;
}

你可以用这个函数获取网页的客户端的html代码,然后保存到.html文件里就可以了。

方案2:

生成单个的静态页面不是难点,难的是各个静态页面间的关联和链接如何保持完整;特别是在页面频繁更新、修改、或删除的情况下;

像阿里巴巴的页面也全部是html的,估计用的是地址映射的功能关于地址映射可参考:http://www.easewe.com/Article/ShowArticle.aspx?article=131

可以看看这个页面,分析一下他的“竞价倒计时”功能http://info.china.alibaba.com/news/subject/v1-s5011580.html?head=top4&Bidding=home5

ASP.Net生成静态HTML页
在Asp中实现的生成静态页用到的FileSystemObject对象!
在.Net中涉及此类操作的是System.IO
以下是程序代码 注:此代码非原创!参考别人代码

// 生成HTML页
   public   static   bool  WriteFile( string  strText, string  strContent, string  strAuthor)
  {
   
string  path  =  HttpContext.Current.Server.MapPath( " /news/ " );
   Encoding code 
=  Encoding.GetEncoding( " gb2312 " );
   
//  读取模板文件
    string  temp  =  HttpContext.Current.Server.MapPath( " /news/text.html " );
   StreamReader sr
= null ;
   StreamWriter sw
= null ;
   
string  str = ""
   
try
   {
    sr 
=   new  StreamReader(temp, code);
    str 
=  sr.ReadToEnd();  //  读取文件
   }
   
catch (Exception exp)
   {
    HttpContext.Current.Response.Write(exp.Message);
    HttpContext.Current.Response.End();
    sr.Close();
   }
   
string  htmlfilename = DateTime.Now.ToString( " yyyyMMddHHmmss " ) + " .html " ;
   
//  替换内容
   
//  这时,模板文件已经读入到名称为str的变量中了
   str  = str.Replace( " ShowArticle " ,strText);  // 模板页中的ShowArticle
   str  =  str.Replace( " biaoti " ,strText);
   str 
=  str.Replace( " content " ,strContent);
   str 
=  str.Replace( " author " ,strAuthor);
   
//  写文件
    try
   {
    sw 
=   new  StreamWriter(path  +  htmlfilename ,  false , code);
    sw.Write(str);
    sw.Flush();
   }
   
catch (Exception ex)
   {
    HttpContext.Current.Response.Write(ex.Message);
    HttpContext.Current.Response.End();
   }
   
finally
   {
    sw.Close();
   }
   
return   true ;

此函数放在Conn.CS基类中了在添加新闻的代码中引用 注:工程名为Hover

    
if (Hover.Conn.WriteFilethis.Title.Text.ToString), this .Content.Text.ToString), this .Author.Text.ToString)))
    {
     Response.Write(
" 添加成功 " );
    }
    
else
    {
     Response.Write(
" 生成HTML出错! " );
    }

模板页Text.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文件!上面只是把传递过来的几个参数直接写入了HTML文件中,在实际应用中需要先添加数据库,然后再写入HTML文件

方案3:给一个客户端参考的例子(SJ)

它的作用在于以客户端的方式获取某个页面的代码,然后可以做为其他用途,本例是直接输出

< script >
    
var  oXmlHttp  =   new  ActiveXObject( " Microsoft.XMLHTTP " );
    oXmlHttp.open(
" GET " , " http://www.webjx.com " false );
    oXmlHttp.send()
    
var  oStream  =   new  ActiveXObject( " ADODB.Stream " );
    
if (oStream  ==   null )
        alert(
" 您的机器不支持ADODB.Stream. " )
    
else
    {
        oStream.Type
= 1 ;
        oStream.Mode
= 3 ;
        oStream.Open() ;
        oStream.Write(oXmlHttp.responseBody);
        oStream.Position
=   0 ;
        oStream.Type
=   2 ;
        oStream.Charset
= " gb2312 " ;
        
var  result =  oStream.ReadText();
        oStream.Close();
        oStream 
=   null ;
 
      var  aa  =  window.open( "" , "" )
        document.write(result);
        aa.document.write(result);
    }
</ script >

 

方案4:学csdn一样。用xml保存数据,模版XSL也只有一个文件。

使用xml来保存数据,使用xsl来定义模板并且生称数据。可以通过xsl来很方便的在客户端或者服务段显示数据。如果要生成静态叶面那更简单了。去查一下.net的xml类包问题解决。

优点:可以方便快速转换成你想要的格式和内容。
缺点:需要学习更多的内容,不好入门。

方案5:

思路一:

1. 利用如

这样的工具生成html格式的模板,在需要添加格式的地方加入特殊标记(如$htmlformat$),动态生成文件时利用代码读取此模板,然后获得前台输入的内容,添加到此模板的标记位置中,生成新文件名后写入磁盘,写入后再向数据库中写入相关数据。
2. 使用后台代码硬编码Html文件,可以使用HtmlTextWriter类来写html文件。

优点:

1. 可以建立非常复杂的页面,利用包含js文件的方法,在js文件内加入document.write()方法可以在所有页面内加入如页面头,广告等内容。

2. 静态html文件利用MS Windows2000的Index Server可以建立全文搜索引擎,利用asp.net可以以DataTable的方式得到搜索结果。而Win2000的Index服务无法查找xml文件的内容。如果包括了数据库搜索与Index索引双重查找,那么此搜索功能将非常强大。

3. 节省服务器的负荷,请求一个静态的html文件比一个aspx文件服务器资源节省许多。

缺点:

思路二: 如果用硬编码的方式,工作量非常大,需要非常多的html代码。调试困难。而且使用硬编码生成的html样式无法修改,如果网站更换样式,那么必须得重新编码,给后期带来巨大的工作量。

因此这里采用的是第一种思路

示列代码

1.定义(template.htm)html模板页面

< html >
< head >
< title ></ title >
< meta  http-equiv ="Content-Type"  content ="text/html; charset=gb2312" >
</ head >
< body  >
< table  $htmlformat[0] height ="100%"  border ="0"  width ="100%"  cellpadding ="10"  cellspacing  ="0"  bgcolor ="#eeeeee"  style ="border:1px solid #000000" >
< tr >
< td  width ="100%"  valign ="middle"  align ="left" >
< span  style ="color: $htmlformat[1];font-size: $htmlformat[2]" > $htmlformat[3] </ span >
</ td >
</ tr >
</ table >
</ body >
</ html >

 

2.asp.net代码:

 

// ---------------------读html模板页面到stringbuilder对象里----

string [] format = new   string [ 4 ]; // 定义和htmlyem标记数目一致的数组
StringBuilder htmltext = new  StringBuilder();
try
{
   
using  (StreamReader sr  =   new  StreamReader( " 存放模板页面的路径和页面名 " ))
    {
        String line;
        while  ((line  =  sr.ReadLine())  !=   null )
        {
            htmltext.Append(line);
        }
        sr.Close();
    }

catch
{
    Response.Write(
" <Script>alert('读取文件错误')</Script> " );

// ---------------------给标记数组赋值------------
format[
0 ] = " background= " / blog / bg.jpg "" ; // 背景图片
format[
1 ] =   " #990099 " ; // 字体颜色
format[
2 ] = " 150px " ; // 字体大小
format[
3 ] =   " <marquee>生成的模板html页面</marquee> " ; // 文字说
// ----------替换htm里的标记为你想加的内容
for ( int  i = 0 ;i< 4 ;i ++ )
{
    htmltext.Replace(
" $htmlformat[ " + i + " ] " ,format[i]);
}
// ----------生成htm文件------------------――
try
{
    using (StreamWriter sw = new  StreamWriter( " 存放路径和页面名 " , false ,System.Text.Encoding.GetEncoding( " GB2312 " )))   
    {
        sw.WriteLine(htmltext);
        sw.Flush();
        sw.Close();
    }
}
catch
{
    Response.Write (
" The file could not be wirte: " );
}

小结
用此方法可以方便的生成html文件。程序使用了是循环替换,因此对需替换大量元素的模板速度非常快。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何生成静态页面的五种方案 的相关文章

  • 第11节-PhotoShop基础课程-索套工具

    文章目录 前言 1 索套工具 选中后按Ctrl 可以移动 2 加 减 交叉 shift alt 2 多边形索套工具 手动首尾相连 或者双击空地 1 单击绘制直线选区 2 双击结束绘制 3 加 减 交叉 4 delete可以删除节点 3 磁性
  • MySQL数据管理

    一 外键的创建 方法1 在创建表的时候 增加约束 这个方法比较复杂麻烦 CREATE TABLE grade gradeid INT 10 NOT NULL AUTO INCREMENT COMMENT 年级id gradename VAR
  • 《计算机网络》谢希仁第七版课后答案完整版

    文章目录 第一章 概述 1 01 计算机网络向用户可以提供那些服务 1 02 简述分组交换的要点 1 03 试从多个方面比较电路交换 报文交换和分组交换的主要优缺点 1 04 为什么说因特网是自印刷术以来人类通信方面最大的变革 1 05 因
  • c语言——找零问题

    某人购买物品一共花了x元 x lt 100 用100元现金去支付 售货员需要找零 请设计程序给出一个找零方案 并使找零的张数最少 设现有人民币面值包括 100元 50元 20元 10元 5元 1元 5角和1角 当x包含1角以下的金额时 按照
  • Arduino基本知识

    1 程序结构 2 变量 局部变量和全局变量 3 调用Arduino的函数 4 通过点亮led IO设置为输出模式 学习pinMode 和digitalWrite 5 按键开关 IO设置为输入模式 6 初识赋值运算符和逻辑运算符 和布尔类型
  • uni-popup使用uni-grid显示错误问题

    在uni popup中 使用了uni grid 内部item显示错误 重叠 解决方式 为item设置style 比如我设置的列数是4 那么style中的width设置为25 item中的文字也需要设置宽度 否则文字方向不对 原因 暂时未知
  • c语言 教学目标,c语言选择结构程序设计教学目标

    c语言选择结构程序设计教学目标 选择结构程序设计 教学目标 能力要求 a 能够使用 if 语句编写条件选择程序 b 能够使用嵌套 if 语句和 switch 语句编写多分支选择结构程序 基础能力落实 1 判断一个数的正 负 输出相应信息 2
  • C++11 -- 类的新功能

    文章目录 类的新功能 默认成员函数 类成员变量初始化 强制生成默认函数的关键字default 禁止生成默认函数的关键字delete 继承和多态中的final和override关键字 类的新功能 默认成员函数 原来在C 类中 有6个默认成员函
  • 爬虫IP列表

    百度爬虫IP列表220 181 51 180 149 130 123 125 71 180 76 5 66google爬虫列表67 221 235 66 249 68 66 249 67 203 208 60 66 249 72 66 24
  • 目标检测中计算图像的交并比(IOU)

    交并比为目标检测中一个重要的概念 来进行预测框 ground truth 与标注框的重合率来对检测的正确率进行比较 图示如下 交并比计算公式 I O U C
  • 被攻击了使用高防服务器有用吗?业务放在高防服务器里面还会不会被攻击?

    高防服务器和无防服务器最大的区别就是在于防火墙 而且怎么样的防火墙可以防止攻击呢 防火墙是网络基础设施中用于网络安全的设备 是用于网络安全的第一道防线 高防防火墙是硬件组成 防火墙的作用是检查通过防火墙的数据包并根据预设的安全策略决定数据包
  • 云计算与大数据作业

    第一章 云计算 云计算的定义 维基百科 云计算是一种动态扩展的计算模式 通过计算机网络将虚拟化的资源作为服务提供给用户 什么是云计算 像水 电 煤 资源性产品 一样利用你的IT资源 计算机存储网络资源 关键词 按需使用 超大规模 高弹性 定
  • Pycharm社区版安装Django并完成Python入门到实践Django实验

    安装流程 首先 随便打开一个项目 然后在pycharm界面的左下角有Terminal终端的图标 点开 在命令行里进入想要的目录 我进的是cd C Users yasuo Desktop py 建立虚拟环境 在这个目录下输入python m
  • Intent见解

    今天做了一个很有意思的实验 三个程序的关系如图 1 先上3个代码 ActionAttr java文件 package org crazyit intent import android app Activity import android
  • 《深入剖析tomcat》读书笔记3--servlet容器

    主要是 深入剖析tomcat 的第五章和第十一章 个人觉得如下3点是关键 1 pipeline相关概念及其执行valve的顺序 2 standardwrapper的接受http请求时候的调用序列 3 standardwrapper基础阀加载
  • Redis 事务 - 监控测试

    Redis 基本事务操作 Redis事务本质 一组命令的集合 一个事务中的所有命令都会被序列化 在事务执行过程的中 会按照顺序执行 Redis事务是一组Redis命令的有序集合 这些命令在事务中按照顺序执行 但在事务执行过程中不会立即执行
  • Python之第十二章 处理Excel电子表格

    一 Excel文档 工作薄 xlsx文件 包含多个表 工作表 活动表 用户当前查看的表 关闭Excel前最后查看的表 二 安装openpyxl模块 import openpyxl 三 读取Excel表格 先制作一张例表1 xlsx 1 用o
  • Oracle数据库问题汇总

    Oracle自动维护任务 周日上午六点数据库报警 报ORA 1652错误 根据微信告警信息及告警时间点确认是Oracle自动维护任务启动 导致临时表空间不足 SQL Tuning Advisor这个自动任务很早就是要禁用掉的 本身数据库仅作
  • 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。

    示例 1 输入 nums 1 2 3 1 输出 true 示例 2 输入 nums 1 2 3 4 输出 false 示例 3 输入 nums 1 1 1 3 3 4 3 2 4 2 输出 true 实现代码 public class So
  • new String和String直接赋值的区别

    栈区存引用和基本类型 不能存对象 而堆区存对象 是比较地址 equals 比较对象内容 在hotspot虚拟机中 jdk1 8之后 String常量池是在堆中的 单纯的String str aaa 是从虚拟机栈中的变量直接指向String常

随机推荐

  • 单点登录CAS学习(一):初识单点登录

    一 单点登录应用场景 不少业主单位随着自身的发展 建立不少业务支撑系统 往往会采用不同的开发商进行系统开发和建设 因此必然形成如下一种局面 工作人员需要登录多个业务系统才能将自己的工作全部完成 给工作人员带来了额外的负担 因此单点登录变应运
  • CentOS 6.9下的iptables在本机用DNAT转发指定IP到内网IP无效的问题解决(127.0.0.1)...

    比如 iptables t nat A OUTPUT p tcp d 192 168 1 0 24 dport 2222 j DNAT to destination 127 0 0 1 2222或者iptables t nat A OUTP
  • [个人笔记] Windows配置NTP时间同步

    Windows 运维篇 第六章 Windows配置NTP时间同步 Windows 运维篇 系列文章回顾 Windows配置NTP时间同步 域控环境的NTP配置 工作组环境的NTP配置 Windows的CMD部分命令集 参考来源 系列文章回顾
  • Angular表单实现双向数据绑定

    创建组件过程省略 实现双向数据绑定 要在app module中引入并声明 表单组件内容 import Component from angular core Component selector app form templateUrl f
  • mysql开启日志general_log

    general log会记录下发送给MySQL服务器的所有SQL记录 因为SQL的量大 默认是不开启的 一些特殊情况 如排除故障 可能需要临时开启一下 开启MySQL的general log MySQL有三个参数用于设置general lo
  • OBS直播画质怎么调?

    有用户在使用OBS软件直播时 发现直播的画质太差了 想要调高画质 但是却不知道如何调整 OBS参数设置教程 1 双击或者右击打开OBS软件 接着点击右下角箭头所指的设置选项 2 来到设置界面后 点击页面左侧的输出选项 3 在下图所示的输出页
  • Python学习总结1(知识+示例)

    学习环境 Ubuntu18 04系统 Geany编辑器 Python3 Pyhton3 安装 sudo add apt repository ppa fkrull deadsnakes sudo apt get update sudo ap
  • 故障注入测试(Fault Injection Test)评价类型说明

    这周新一篇技术文章来袭 上周我们对故障注入测试 Fault Injection Test 方法进行了初步的了解 本周要分享的技术文章是 故障注入测试 Fault Injection Test 评价类型说明 将针对故障注入测试进行更深层的说明
  • Linux 字符串截取方法

    八种截取方法 场景 var http www baidu com abc html 1 删除左边字符 保留右边字符 例 echo var 输出内容 www baidu com abc html 表示所有 获取变量var从左边遍历开始遇到的第
  • linux常用压缩、解压缩文件或文件夹命令tar、zip

    前言 工作中 压缩 解压缩文件或文件夹是比较基本的操作了 利用 tar或zip 命令可以把一大堆的文件和目录打包成一个文件 这对于备份文件或是将几个文件组合成为一个文件进行网络传输是非常有用的 tar压缩文件 tar 选项 源文件或目录 选
  • 微信支付接入

    目 录 第1章 微信支付接入 2 第2章 微信小程序申请微信支付 3 2 1 申请微信支付 3 2 2 微信审核 3 2 3 账户参数说明 4 第3章 微信公众号申请微信支付 5 3 1 支付申请 5 3 2 提交资料 6 3 3 填写商户
  • 多益网络校招前端面经(2020.09.24)

    多益网络校招前端面经 2020 09 24 面试平台 QQ视频通话 时长 大约半小时 过程 自我介绍 项目问题 项目中遇到的问题以及解决方式 在团队开发过程中个成员合作方式 遇到问题的解决方式 css命名冲突 http和https http
  • PyCharm使用教程(详细版 - 图文结合)

    目录 一 创建项目 二 运行 三 错误提示 四 安装三方包 PyCharm的使用贯穿整个Python的学习 所以单独拿出来出教程不合适 说多了对于新手来说也还是不明白 这里我们先从学习开始前大家需要用到PyCharm的一些功能讲起 后面的p
  • PHP实现用户登录注册(详细教程)

    教程前先给大家看看小编的实现成果吧 图1 图2 图3 教程 实现这个功能我们需要五个php文件 login php 登录界面 如图2
  • unity通过全局事件对项目进行解耦

    一个类要是想调用另一个类的方法 例如A想调用B的方法 方式一 引用 最简单的方式是A持有一个B类的引用 即A拥有一个B的成员对象 方式二 设计模式 中介者模式 或者A和B同属于一个对象C 通过对象C调用对方 中介者模式 例如QQ群 A和B互
  • 如何将二维数组作为函数的参数传递

    今天写程序的时候要用到二维数组作参数传给一个函数 我发现将二维数组作参数进行传递还不是想象得那么简单里 但是最后我也解决了遇到的问题 所以这篇文章主要介绍如何处理二维数组当作参数传递的情况 希望大家不至于再在这上面浪费时间 正文 首先 我引
  • android 弹出式对话框实现自定义菜单栏

    第一步 创建菜单项实体类 Menu 菜单栏选项类 public class Menu 标题 private String title Id 图片Id private int iconID public Menu String title i
  • OpenWrt安装使用教程(x86/64架构)

    什么是OpenWrt 官网简介 OpenWrt项目是一个针对嵌入式设备的Linux操作系统 OpenWrt不是一个单一且不可更改的固件 而是提供了具有软件包管理功能的完全可写的文件系统 这使您可以从供应商提供的应用范围和配置中解脱出来 并且
  • springboot 实现权限管理(一)

    一 背景 1 为什么进行权限管理 生活在形形色色的世界之中 我们各自扮演着各自的角色 拥有不同的权利和义务 映射在计算机系统之中 也一样需要 角色 权限 来进行对用户的分类 限制访问资源 保证资源地合理被使用 使人各司其职 2 应用场景 假
  • 如何生成静态页面的五种方案

    方案1