admin 管理员组

文章数量: 1086019


2024年5月8日发(作者:watermelon什么意思英语)

应用研究 

基于HttpHandler的页面静态化 

沈阳 

(广东岭南职业技术学院电子信息工程学院广东广州510663) 

摘要:HttpHandler ̄ASP.NET服务器端用于进行Http请求处理的核心容器,开发者可以使用HtcpHandler编程处理Http请求,av ̄#g了服 

务器端对Http请求的处理功能。本文通过对HttpHand1er实现动态页面静态化来阐述服务器端编码方式处理请求的过程。 

关键词:ASP.NET HttpHandler页面静态化性能 

中图分类号:TP311.1 文献标识码:A 文章编号:1007—9416(2012)01.0050—02 

1、引言 

ASP.NET是微软推出的一种web服务器端开发技术,我们在 

做ASP.NET开发时通常更多的是考虑页面上实现的功能,例如:数 

据怎么在页面上显示,用户登录该如何实现等。但我们很少考虑在 

服务器端如何通过编程的方式去处理请求,例如:当客户端请求一 

个aspx页面时,默认情况下服务器会编译并执行这个动态页面,并 

将执行结果输出到客户端,这就是一个典型的“请求一响应”的过 

程。但如果该页涉及到大数据量的数据库查询以及较为复杂的逻辑 

运算,特别是在该页面并发访问人数较多的情况下,响应时间会大 

幅度增多,服务器压力也会增加。怎么解决这个问题?我们可以采用 

动态页面静态化技术解决这个问题。 

2、页面静态化的概念 

页面静态化即把动态页面转换成静态页面。页面静态化的优 

势:(1)有利于搜索引擎搜索、(2)没有丢掉动态页面维护内容的方便 

性、(3)性能和安全方面的提升。早期的搜索引擎并不能很好的检索 

如 .jsp,十.aspx等的服务器动态页面,但是对十.html等静态页面 

却有良好的检索效果,于是就产生了一种“动态页面静态化”的技 

术,在ASP.NET中就是把用户对同一个aspx页面的不同请求结果 

保存到不同的html文件中,在以后的对该aspx页面的请求,将调用 

相应html页面作为对客户端的响应,这样将大大节省服务器端处理 

时间,以达到快速响应客户端请求的效果。 

要想实现动态页面的静态化必须先了解ASP.NET ISAPI的 

运行机制。 

2.1 ASP.NET请求的处理过程如下 

(1)当Http请求提交到服务器端时,IIS检查所请求的资源类 

型并调用ASP.NET ISAPI,步骤如下:1)调用ASP.NET辅助进 

程(IIS 6对应为w3wp.exe);2)辅助进程加载.NET运行时环境; 

3)ASP.NET ISAPI将请求转发给辅助进程。 

(2)辅助进程收到请求,通知ASP.NET ISAPI它将进行处理。 

(3)在辅助进程的上下文中执行处理过程,步骤如下:1)在.NET 

运行时环境中执行;2)经HttpModule_ ̄器和HttpHandler容器处理。 

(4)处理完毕,通知ASP.NET ISAPI完成。在这个处理过程中 

我们重点关注的是如何通过HttpModule和HttpHandler来处理 

Http请求。 

2.2 HttpModule和HttpHandler如何处理HTTP请求 

当一个HTTP请求经若干个HttPMOdUl e容器传递到 

HttpHandler容器中时,ASP.NET框架会调用HttpHandler的 

ProcessRequest成员方法来对这个HTTP请求进行真正的处理。以 

个aspx页面为例,正是在这里一个aspx页面才被系统处理解析, 

并将处理完成的结果继续经由HttpModule传递下去,直至到达客 

户端。 

NET Framework提供了一组接口和类,允许开发者对于 

HttP请求进行编程,而实现这一操作的一个主要的接口,就是 

IHttpHandler(另一个是IHttpModule)。IHttpHandler的定义是这 

样的: 

punic interface IHttpHandler{ 

void ProcessRequest(HttpContext context); 

bool IsReusable{get;} 

} 

可以看出IHttpHandler要求实现一个方法和一个属性。其中 

P ro ce ssRequest方法应该放置我们处理请求的主要代码。 

IsReusable属性:获取一个值,该值指示其他请求是否可以使用 

IHttpHandler实例。也就是说后继的Http请求是不是可以继续使 

用实现了该接口的类的实例,一般来说,应把它设置成true。Http请 

求从HttpModule ̄0 HttpHandler的过程如图1所示。 

图1 

3、实现结果及分析 

以下以单个产品详细信息页面生成静态页为例,说明HttpHa 

ndler在处理Http请求中的应用,使用HttpHandler实现页面静态化 

的实现步骤。 

制作html模板,做为静态化页显示部分的基础: 

其中[】部分为占位符,将在HttpHandler中根据不同产品信息 

进行替换,Html代码如下: 

品牌:<span id=”ctl00一cphContent—lbl”>[Brand]</span> 

价格:<span id=”ctl00_cphContent_lblPublisher”>[Price]</ 

span></div> 

4、使用HttpHander生成静态页面 

public class HtmlHandter:IHttpHandler 

{ 

punic void ProcessRequest(HttpContext context) 

//Productld是从context中截取的产品ID,代码略。 

string filePath=context.Server.MapPath( 

” /ProductDetails/Product一”+ProductId+”.htm”); 

ProductManager manager=new ProductManager();// 

业务逻辑层对象 

context.Application.Lock(); //加锁 

if(!File.Exists(filePath))//如果请求的静态页不存在,则 

动态生成该静态页 

{ 

string templatePath=context.Server.MapPath( 

” /ProductDetails/template.htm”);//模板路径 

string template=””; //模板内容 

using(StreamReader sr=new StreamReader 

瓣,十术一一技五  一用一  

(templ

姆 

atePath)) 

{ 

template=sr.ReadToEndO;//读取模板内容 

} 

Product Product=manager.GetProductByld(ProductId);/ 

/获取Product信息 

string html=template.Replace(”[WebRootPath]”, 

context.Request.ApplicationPath) //替换Web路径 

Replace(”[ProductId]”,ProductId.ToString0) 

//依次将html模板中的占位符替换成当前产品的相 

……

应用研究 

<httpHandlers> 

<a d d ve rb=”{”

type=’’HtmlHandler”/> 

P at h=”B 0 0 k S/ .h tm l’’ 

C C=  V 

</httpHandlers> 

当用户访问以产品ID为名称的页面时(如:3234212.htm1),将 

交I!IHttpHandler中进行处理,如果该页面不存在,将服务器将动态 

生成该静态页同时保存下来,并交给客户端。以后对同一个产品的 

请求就可以直接获取该静态页了。 

5、结语 

应信息 

using(StreamWriter SW=new StreamWriter(iflePath)) 

{ 

SW.Write(htm1); 

容 

利用HttpHandler ̄行Http请求中的动态页面静态化,可以加 

快服务器端响应速度,减轻服务器端处理数据的压力,通过WebN0 

试和负载测试,可以看到对于复杂页面处理和请求量比较大的页面 

有着性能上的显著提高。使用HttpHandier还可以实现除页面静态 

//写入静态化页面内 

化以处其他功能,例如数字水印、防盗链等,有很丰富的应用范围。 

参考文献 

[1]李敏波.ASP.NET 2.0高级编程[H].北京:清华大学出版社,2006. 

[2]梁博.测试有道[H].北京:电子工业出版社,2009 

context.Server.Execute(” /ProductDetails/Product一”+ 

[2]王征.项目模型及业务流程分析[J].程序员,2002(1). 

ProductId 

[4]廖江福.基于HttpHandler的ASP.NET软件RSA签名研究[J].重庆 

+”

html”); //转到实际 

工商大学学报。2010.1. 

} 

} 

context.Application.UnLock(); //解锁 

路径 

} 

作者简介 

沈阳(1 9 7 8一),男,安徽合肥人,软件工程硕士,专业教 

师,工作单位:广东岭南职业技术学院,研究方向:软件工 

程,We b及移动设备软件开发。 

} 

web.config中添加如下配置,用于进行静态页与HttpHandler 

的映射: 

……

上接第49页 

号。当IA4的差分输入电压在(ov,+3V】的范围内时,u 的频率在 

【lkHz,30kHz】范围内与输入保持良好的线性关系。通过减小积分 

电容或增加放大器增益可缩短积分时间,提高振荡频率;经测试,最 

高可达300kHz。 

::/ 

tic 

. 

、、 

——— 

. 

/ 

/\ /\ 

\/\v 

n 

: 6 n口n n n n r1门门n n n n n I 

u U U U U U L』LJ r u U U U U LJ L』 ’ 

图3平衡调制电路波形 

n 

n n 

厂———]广———] 

T 

4、结语 

本文介绍了一种基于在系统可编程模拟器件的调制电路设计 

方法,在ispPAC20芯片上实现,将整个电路集成于单块芯片中,提 

图2振荡器工作波形 

高了电路的集成度和可靠性。借助于开发工具PAC Designer可随 

3.2调制电路设计 

提高了电路设计的效率, 

调制电路的内部编程为:IA1的a、b端口分别编程至IN1、IN2, 

时对芯片进行重新编程以升级电路结构,

 

增益为1。输入调制信号H按图1;h-式连至IN1和IN2端,WINDOW端 

降低了设计成本。

经外部连线接至端口选择MSEL端。当 为低电平时,IA1的a端V1选 

参考文献 

通,OA1输出Voutl=一 ;当 为高电平时,b端口被选通,OA1输出 

[1]曾兴雯,刘乃安,陈健.高频电路原理与分析[H].西安电子科技大 

Vout1=u ̄。于是, 的极性按载波频率持续转换,在Voutl输出端得 

学出版社,2006:1 70—1 75. 

到幅度受强控制的平衡调制信号,电路的工作波形如图3所示。一般 

[2]邓重一.ispPAC1 0芯片及其应用[J].现代电子技术。2003,7:72—73. 

地,若编程IA1的增益为 ,则可得到下式所示的输出信号。 

[3]Lattice Semiconductor Co.ispPAC handbook[CD].Version 1.1, 

训:

』【 

ku , 

1999. 

=0V 

作者简介 

该设计方法中,载波产生电路与和调制电路在同一芯片上完 

时伟(1 9 8 1一),男,硕士研究生,助教,主要从事电子设 

成,具有高集成度、高可靠性的优点,可通过设计工具对电路做灵活 

计自动化方面的研究和教学工作。 

修改。若将已调信号Voutl接低通滤波器,则可得到模拟双边带调制 

信号。 


本文标签: 页面 请求 静态 处理 电路