这次的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. 类js效果

    类似js效果,点击看看  代码 onclick="return confirm('您确定要看看吗?')" 放入a标签里面

  2. BZOJ 1861: [Zjoi2006]Book 书架

    1861: [Zjoi2006]Book 书架 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 1290  Solved: 740[Submit][Stat ...

  3. 关于操作系统中多个fork()会创建几个进程的理解

    最近在看操作系统的书,在讲到用fork()创建子进程时,有些地方一时迷惑,最终理解,特记录下来.如下: //创建一个子进程:#include "csapp.h" int main( ...

  4. 2019春第十周作业Compile Summarize

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 在这里 我在这个课程的目标是 能够对C语言的编写更加得心应手 这个作业在那个具体方面帮助我实现目标 结构体更进一步 参考文献与网址 C语言 ...

  5. c++入门之类——进一步剖析

    通常的,关于一个类,包含了下面几个方面: 1  声明类成员和接口:2 定义类接口函数(方法)3通过接口调用类 下面先给出第一条:声明类成员和接口 # ifndef MYTIME0_H_ # defin ...

  6. Linux 搭建git 自己拉取本地 git pull,其他地方的git仓库拉取代码

    Linux 下建立 Git 与 GitHub 的连接 Git 是一款开源的分布式版本控制系统,而 GitHub 是依托 Git 的代码托管平台. GitHub 利用 Git 极其强大的克隆和分支功能, ...

  7. Centos7 64位 -- glibc-2.29 编译升级方法(已成功)

    某软件出现漏洞,需要升级解决(忘了哪个)结果提示glibc版本过低. 懵懂无知的我以为glibc想其他软件一样编译升级一下就好.. 结果? 重装系统! 说真的,如非必要(或学习),请勿升级 glibc ...

  8. MD5解密

      国外http://md5.rednoize.com/http://www.milw0rm.com/md5/list.php国内http://www.neeao.com/md5/http://www ...

  9. Nexus3.x.x上传第三方jar

    exus3.x.x上传第三方jar: 1. create repository 选择maven2(hosted),说明: proxy:即你可以设置代理,设置了代理之后,在你的nexus中找不到的依赖就 ...

  10. python3+unittest+HTMLTestRunner

    参考博客1 参考博客2 python3版HTMLTestRunner.py见博客园‘链接’(已经上传到博客园) import unittest class operatinon_unittest(un ...