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接低通滤波器,则可得到模拟双边带调制
信号。
版权声明:本文标题:基于HttpHandler的页面静态化 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1715149972a686008.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论