这次的Demo是,一个根页面,点击链接创建子页面,子页面都是一个Template页面进行替换的

一个根页面

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="List.aspx.cs" Inherits="Static.List" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h2>体育新闻</h2> <p><a href="News/Info_0.html">中国拳手</a></p>
<p><a href="News/Info_1.html">纳斯很少情绪激动</a></p>
</div>
</form>
</body>
</html>

新建一个类,做假数据用,代替数据库的表

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace Static
{
public class News
{
public int Id { get; set; }
public string Title { get; set; }
public string Time { get; set; }
public string Content { get; set; }
}
}

建一个类,使用List进行加载数据

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace Static
{
public class NewsManager
{
public List<News> lists = new List<News>();
public NewsManager()
{
lists.Add(new News()
{
Id=1,
Time="1019年1月1日",
Content="拳手的内容",
Title="拳手的标题"
});
lists.Add(new News()
{
Id = 2,
Time = "10年1月1日",
Content = "情绪的内容",
Title = "情绪的标题"
});
}
}
}

新建一个News文件夹,建一个Tamplate的网页,用来规范网页

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<div>
<p>{$Title}</p> <p>{$Time}</p>
<p>{$Content}</p>
</div>
</body>
</html>

建一个类进行操作,继承IHttpHandlers

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web; namespace Static
{
public class FileStaticHandler : IHttpHandler
{
public bool IsReusable => true; public void ProcessRequest(HttpContext context)
{
string url = context.Request.RawUrl;
//通过Url把id取到
int last = url.LastIndexOf("_");
int dot = url.LastIndexOf(".");
int newId = int.Parse(url.Substring(last + 1, dot - last - 1));
//生成路径
string userFilePath = context.Server.MapPath("~/News/Info_" + newId + ".html");
//如果此路径没文件的话,就生成
if (!File.Exists(userFilePath))
{
//我的加载在类里面写的
NewsManager newsManager = new NewsManager();
List<News> news = newsManager.lists;
//获取某个文件的路径
string tempPath = context.Server.MapPath("~/News/Template.html");
//把此文件里面的关键字替换掉
//把这个文件序列化保存
string tempHtml = ReadTemplate(tempPath);
tempHtml = tempHtml.Replace("{$Title}", news[newId].Title);
tempHtml = tempHtml.Replace("{$Time}", news[newId].Time);
tempHtml = tempHtml.Replace("{$Content}", news[newId].Content);
//输出此文件
WriteHtmlFile(userFilePath, tempHtml);
}
//输出文件
context.Response.WriteFile(userFilePath); } private void WriteHtmlFile(string userFilePath, string tempHtml)
{
FileStream fs = new FileStream(userFilePath, FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
sw.Write(tempHtml);
sw.Close();
fs.Close(); } private string ReadTemplate(string tempPath)
{
if (!File.Exists(tempPath))
{
throw new Exception("新闻详情页面模板文件未找到!");
}
FileStream fs = new FileStream(tempPath, FileMode.Open);
StreamReader sr = new StreamReader(fs);
string tempHtml = sr.ReadToEnd();
sr.Close();
fs.Close();
return tempHtml; }
}
}

既然用了Handler,就要进行配置文件

<system.webServer>
<handlers>
<add name="test" path="News/*.html" verb="*" type="Static.FileStaticHandler" />
</handlers>
</system.webServer>

根页面效果图(记得显示全部文件,否则会不显示)

点击了第一个链接,就生成了页面

ASP.NET使用HttpHandler进行页面静态化(自动生成页面)的更多相关文章

  1. ASP.NET关于书籍详情和删除的Demo(HttpHandler进行页面静态化[自动生成html网页]+Entity Framework通过类创建数据库+EF删查)

    这次的Demo如标题所示, 首先第一步EF创建数据库 创建两个类,一个是图书类,一个是图书类别的类 using System; using System.Collections.Generic; us ...

  2. Spring MVC 学习总结(七)——FreeMarker模板引擎与动态页面静态化

    模板引擎可以让程序实现界面与数据分离,业务代码与逻辑代码的分离,这就提升了开发效率,良好的设计也使得代码复用变得更加容易.一般的模板引擎都包含一个模板解析器和一套标记语言,好的模板引擎有简洁的语法规则 ...

  3. 转:php页面静态化之真静态

    之前的缓存和现在所说的页面静态化都是为网站提速的,如果是访问量小的小型网站可能不需要但是如果网站规模或访问量很大,那么页面静态化和缓存就会体现出各自的价值了下面先来了解下页面静态化的分类 页面静态化的 ...

  4. Django框架开发web网站的网页优化—页面静态化

    网站优化-页面静态化 1)概念 提前将页面所用到的数据从数据库查询出来,然后生成一个静态页面,之后用户来访问的时候,直接返回静态页面. 举例:首页静态化:获取首页用到的数据表中的数据,生成静态首页in ...

  5. freemark 页面静态化

    1. 页面静态化是什么? 页面静态化有非常多含义,在WEB开发中.静态网页一般理解为站点中大部分超级链接所引用的页面是单独的HTML静态页面文件(如.htm..html等页面文件,html语言本身是静 ...

  6. 量体裁衣方得最优解:聊聊页面静态化架构和二级CDN建设

    量体裁衣方得最优解:聊聊页面静态化架构和二级CDN建设 上期文章中我们介绍了CDN和云存储的实践,以及云生态的崛起之路,今天,我们继续聊一聊CDN. 我们通常意义上讲的CDN,更多的是针对静态资源类的 ...

  7. Asp.Net MVC页面静态化功能实现二:用递归算法来实现

    上一篇提到采用IHttpModule来实现当用户访问网站的时候,通过重新定义Response.Filter来实现将返回给客户端的html代码保存,以便用户下一次访问是直接访问静态页面. Asp.Net ...

  8. Asp.Net MVC页面静态化功能实现一:利用IHttpModule,摒弃ResultFilter

    上一篇有提到利用IHttpModule和ResultFilter实现页面静态化功能.后来经过一些改动,将ResultFilter中要实现的功能全部转移到IHttpModule中来实现 Asp.Net ...

  9. Asp.Net MVC页面静态化功能实现一:利用IHttpModule和ResultFilter

    由于公司现在所采用的是一套CMS内容管理系统的框架,所以最近项目中有一个需求提到要求实现页面静态化的功能.在网上查询了一些资料和文献,最后采用的是小尾鱼的池塘提供的 利用ResultFilter实现a ...

随机推荐

  1. salesforce零基础学习(九十七)Event / Task 针对WhoId的浅谈

    我们在Sales Cloud中经常会创建顾客,如果针对TO C业务,会启用个人顾客,比如针对车企行业,有一些场景是需要卖给个人的,而不只是企业采购.当通过打电话或者其他的场景有潜在客户并且转换成客户以 ...

  2. learn from collection framework design

    最难忍受的痛苦,也许是想干一件事情而又不去干.--罗曼·罗兰 前言 本篇文章算是拾人牙慧吧,偶尔谷歌到一个能很好把collection framework design讲好的文档,一是为了总结提升,也 ...

  3. 永磁同步电机 spmsm 和 ipmsm 的区别总结

    layout: post tags: [motor control] comments: true 永磁同步电机的分类 永磁同步电机根据转子上永磁体的位置不同,可以分为: 表贴式永磁同步电机--S-P ...

  4. 网站主机技术+linux教程

    一.Linux 云服务器 自己安装服务器还是麻烦了些,现在一般都推荐大家使用云服务器,比较方便,价格也不贵. 目前市场上的云服务器很多,这边比较下腾讯云跟阿里云的服务器优惠活动,现在看来腾讯云性价比会 ...

  5. Spark2.4.5集群安装与本地开发

    下载 官网地址:https://www.apache.org/dyn/closer.lua/spark/spark-2.4.5/spark-2.4.5-bin-hadoop2.7.tgz 验证Java ...

  6. Windows10系统优化(批处理)

    经历过XP.Win7.Vista.Win8之后,Win10有了很大的改变,虽然Win10刚出时,非常糟糕,甚至很长一段时间被认为没有Win7,但是随着Win10的不断优化不断更新,已经慢慢的变得更好了 ...

  7. tp5.1的事务操作

    普通的事务操作很简单,最简单的方式是使用 transaction 方法操作数据库事务, 当闭包中的代码发生异常会自动回滚, 例如: Db::transaction(function () { Db:: ...

  8. git命令之切换分支

    Git一般有很多分支,我们clone到本地的一般都是master分支,如何进行分支的切换呢?那么下面带大家简单的看看如何通过命令来切换: 1.查看远程仓库及本地的所有分支 命令:git branch ...

  9. 2-SAT问题简述

    前置知识 强连通分量 k-SAT问题 k-SAT问题中的SAT意思就是(stability),也就是适应性问题.本意是给出n个变量,每一个变量有k个状态,并且也给出一些约束条件,要求你求出是否存在每一 ...

  10. 关于Docker的实践

    docker 安装 wget -qO- https://get.docker.com/ | sh 镜像 images search pull commit build tag 查看本地镜像:docke ...