三:理解Page类的运行机制(例:在render方法中生成静态文件)
我这里只写几个常用的事件
1.OnPreInit:此事件后将加载个性化信息和主题
2.OnInit:初始化页面中服务器控件的默认值但控件的状态没有加载,没有创建控件树
3.OnPreLoad:控件完成状态和回传数据的加载
4.Page_Load:此事件是在OnInit中订阅的
5.Render:呈现最终页面的内容
假设有一个文章数据库
以前都是通过article.aspx?id=123的动态形式访问的
现在我们想要减轻服务器压力,把文章生成静态文件
先看article.aspx的程序
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Text;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.IO;//StringWriter名称空间 namespace _1
{
public partial class article : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(!string.IsNullOrEmpty(Request["id"]))
Label1.Text = "文章内容为:"+ Request["id"].ToString();
} protected override void Render(HtmlTextWriter writer)
{
StringWriter sw = new StringWriter();//这个和StringBuilder没太大区别
HtmlTextWriter htmlw = new HtmlTextWriter(sw);
base.Render(htmlw);//不用传递进来的writer
htmlw.Flush();
htmlw.Close();
string PageContent = sw.ToString();
string path = Server.MapPath("~/Article/");
string pageurl = xland.MyModule.GetFileName(HttpContext.Current);
using (StreamWriter stringWriter = File.AppendText(path + pageurl))
{
stringWriter.Write(PageContent);
}
Response.Write(PageContent);
}
}
}
我们还是通过自定义httpModules来实现url重写
webconfig文件没有太大变化
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true"></compilation>
<httpModules>
<add name="myModule" type="xland.MyModule" />
</httpModules>
</system.web>
</configuration>
MyModule程序
using System;
using System.Collections.Generic;
using System.Web;//引用web命名空间
using System.Text;
using System.IO; namespace xland
{
public class MyModule:IHttpModule
{
public void Init(HttpApplication context)
{
context.BeginRequest +=new EventHandler(context_BeginRequest);
}
public void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
//AppRelativeCurrentExecutionFilePath这里不包括传过来的参数
if (context.Request.AppRelativeCurrentExecutionFilePath.ToLower().EndsWith(".aspx"))
{
string fileurl = "~/article/" + GetFileName(context);
if (File.Exists(context.Server.MapPath(fileurl)))
{
context.RewritePath(fileurl, false);
}
}
}
public static string GetFileName(HttpContext context)
{
return context.Request.AppRelativeCurrentExecutionFilePath.ToLower().Replace(".aspx", "").Replace("~/", "") + context.Request.Url.Query.Replace("?id=", "_") + ".html";
}
public void Dispose() { }
}
}
注释就不多写了,相信大家能看懂
这个示例程序只是为了说明page类的Render事件
如果要用到项目中,请慎重
因为会造成大量的服务器IO
而且这也不是生成静态页面的最佳方案
三:理解Page类的运行机制(例:在render方法中生成静态文件)的更多相关文章
- 四:理解Page类的运行机制(例:基于PageStatePersister的页面状态存取)
有人说类似gridview datalist这样的控件最好不要用在高并发,IO大的网站中企业应用中为了快速开发到可以用一用因为这是一类"沉重"的组件我们姑且不谈这种看法的正确性(我 ...
- 五:理解控件的运行机制(例:基于Control命名空间的简单控件)
一:先用最简短的话说点理论的1.asp.net中所有的标准控件都可以重写 2.和控件相关的命名空间有 System.Web.UI.Control是所有控件的基类只提供简单的呈现逻辑,不支持样式表 Sy ...
- 一:理解ASP.NET的运行机制(例:通过HttpModule来计算页面执行时间)
一:简要介绍一下asp.net的执行步骤 1.IIS接收到客户请求 2. IIS把请求交给aspnet_isapi.dll处理 3.(如果是第一次运行程序)装载bin目录中的dll 4.(如果是第一次 ...
- 六:理解控件的运行机制(例:基于WebControl命名空间的控件)
Control类的Render方法在WebControl类中被被分成三部分1:RenderBeginTag,呈现标签的开始2:RenderContents,呈现标签的内容3:RenderEndTag, ...
- 二:理解ASP.NET的运行机制(例:基于HttpHandler的URL重写)
url重写就是把一些类似article.aspx?id=28的路径重写成 article/28/这样的路径 当用户访问article/28/的时候我们通过asp.net把这个请求重定向到article ...
- 七:理解控件的运行机制(例:基于CompositeControl命名空间的控件)
组合控件与WebControl控件的事件和属性相差不大组合控件,顾名思义就是把一些控件组合起来形成一个控件这个控件将包含这些控件称为他的子控件 CompositeControl类实现了INameCon ...
- 全面理解Java异常的运行机制
1. 引子 try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单.听话. ...
- 万字长文,带你彻底理解EF Core5的运行机制,让你成为团队中的EF Core专家
在EF Core 5中,有很多方式可以窥察工作流程中发生的事情,并与该信息进行交互.这些功能点包括日志记录,拦截,事件处理程序和一些超酷的最新出现的调试功能.EF团队甚至从Entity Framewo ...
- 一张图,理解JAVA体系结构、运行机制、JVN运行机制、Java平台(初学)
初学JAVA,学一门语言不仅仅是学其语法,逻辑思维能力,还有每一门语言都有自己独特的一方面,所以才有那么多语言要学啊 = =,所以想要真的学好语言,其编译机制,运行机制多少也要涉猎一些啊.这是初学JA ...
随机推荐
- 【慕课网实战】Spark Streaming实时流处理项目实战笔记十二之铭文升级版
铭文一级: ======Pull方式整合 Flume Agent的编写: flume_pull_streaming.conf simple-agent.sources = netcat-sources ...
- 关于在Silverlight中添加图片的问题
在Silverlight中添加图片,目前支持的Image格式有jpg和png两种,如何在目录中添加,有些什么技巧呢? <StackPanel Background="White&quo ...
- Java异常、事件、多线程
异常 捕捉异常,以便程序继续执行,同时可进行异常处理使程序更加健壮. Throwble类,派生Exception类和Error类,Exception类供应用程序用,Error类系统保留 ...
- ( 递归 )Fractal -- POJ -- 2083
http://poj.org/problem?id=2083 Fractal Time Limit: 1000MS Memory Limit: 30000K Total Submissions: ...
- android ActivityGroup接收不到onActivityResult
android 框架嵌套,用viewgroup是很好用的.首先实现一个框架的activity,可以继承ActivityGroup 将需要切换的界面,放到ViewGroup里面. 切换如下: Inten ...
- hdu 5088 高斯消元n堆石子取k堆石子使剩余异或值为0
http://acm.hdu.edu.cn/showproblem.php?pid=5088 求能否去掉几堆石子使得nim游戏胜利 我们可以把题目转化成求n堆石子中的k堆石子数异或为0的情况数.使用x ...
- 一个前端小白,关于vue\react等框架下table的应用总结
出来实习一个月多,对于前端,运用相关的最多的就是table,想总结一下先关的内容 一.table提供的功能 1.显示表 2.可编辑:分为可编辑行和可编辑块,但是原理都一样就是设置一个flag,true ...
- SRM469
250pt 在一个10^9 * 10^9大的剧院里,有最多47个位子有人,然后有一对couple想找一对左右相邻的位子,问有多少种选择方式. 思路: 总共有 n * (m-1)种方案,然后扣掉有人位置 ...
- django运行时报错
我是python manage.py runserver的时候报以下错误,import sqlite3也报同样的错误,ImportError: No module named _sqlite3,我的系 ...
- Swift3 页面顶部实现拉伸效果代码
//懒加载 //顶部需要拉伸自定义视图 lazy var headView:MyHeaderView = { //let hframe = CGRect(x: 0, y: 0, width: swid ...