.Text学习笔记(一)
2004-04-24 17:32
169 查看
看了小春的这篇文章,我觉得有必要贴出我以前未完成的一篇文章,这篇文章也许对理解IHttpHandlerFactory有点帮助。文章如下:
.Text请求处理过程:
请求被分成三种:*.asmx、Error.aspx、其他
*.asmx被System.Web.Services.Protocols.WebServiceHandlerFactory处理
Error.aspx被System.Web.UI.PageHandlerFactory
其他都被Dottext.Common.UrlManager.UrlReWriteHandlerFactory
所以研究.Text的请求处理过程,关键是理解Dottext.Common.UrlManager.UrlReWriteHandlerFactory如何处理请求的?
Dottext.Common.UrlManager.UrlReWriteHandlerFactory实现了IHttpHandlerFactory接口,该接口只有两个成员GetHandler(返回实现 IHttpHandler 接口的类的实例),ReleaseHandler(使工厂可以重用现有的处理程序实例)。.Text中是如何根据不同的请求得到不同的HttpHandler?所有有关HttpHandler的配置信息都放在web.config的<HandlerConfiguration>中。<HandlerConfiguration>被返序列化产生Dottext.Common.UrlManager.HandlerConfiguration的实例。通过Dottext.Common.UrlManager.HandlerConfiguration的属性HttpHandlers就可以得到所有的HttpHandler。在UrlReWriteHandlerFactory.GetHandler中,通过正则表达式,获得不同请求的HttpHandler。这里的HttpHandler实际上是Dottext.Common.UrlManager.HttpHandler类的实例。HttpHandler有个属性HandlerType,HandlerType是enum变量,UrlReWriteHandlerFactory根据HandlerType来对不同的请求进行处理。HandlerType有三个值Page、Direct、Factory。
现在,我们以Page类型(也是默认类型)为例,说明一下具体的处理过程:
对于Page类型,由UrlReWriteHandlerFactory.ProccessHandlerTypePage()处理,在ProccessHandlerTypePage中,先得到FullPageLocation,在web.config中可以配置,默认是DTP.aspx,然后调用HandlerConfiguration.SetControls(它只一行处理语句:context.Items.Add("Dottext.Common.UrlManager.ControlContext",controls);),context.Items是IHttpModule 和 IHttpHandler 之间共享数据区。这里我的理解是:将需要显示哪些controls的配置信息存储在context.Items中,以便在后来的处理中从context.Items读取(实际上是在DottextMasterPage中读取并显示controls的,这就是.Text中动态加载ASC控件的原理)。最后,通过PageParser.GetCompiledPageInstance(url,pagepath,context);返回一个HttpHandler,该方法的功能我的理解是为url请求创建一个pagepath的实例,类似于Response.Redirect。
.Text请求处理过程:
请求被分成三种:*.asmx、Error.aspx、其他
*.asmx被System.Web.Services.Protocols.WebServiceHandlerFactory处理
Error.aspx被System.Web.UI.PageHandlerFactory
其他都被Dottext.Common.UrlManager.UrlReWriteHandlerFactory
所以研究.Text的请求处理过程,关键是理解Dottext.Common.UrlManager.UrlReWriteHandlerFactory如何处理请求的?
Dottext.Common.UrlManager.UrlReWriteHandlerFactory实现了IHttpHandlerFactory接口,该接口只有两个成员GetHandler(返回实现 IHttpHandler 接口的类的实例),ReleaseHandler(使工厂可以重用现有的处理程序实例)。.Text中是如何根据不同的请求得到不同的HttpHandler?所有有关HttpHandler的配置信息都放在web.config的<HandlerConfiguration>中。<HandlerConfiguration>被返序列化产生Dottext.Common.UrlManager.HandlerConfiguration的实例。通过Dottext.Common.UrlManager.HandlerConfiguration的属性HttpHandlers就可以得到所有的HttpHandler。在UrlReWriteHandlerFactory.GetHandler中,通过正则表达式,获得不同请求的HttpHandler。这里的HttpHandler实际上是Dottext.Common.UrlManager.HttpHandler类的实例。HttpHandler有个属性HandlerType,HandlerType是enum变量,UrlReWriteHandlerFactory根据HandlerType来对不同的请求进行处理。HandlerType有三个值Page、Direct、Factory。
现在,我们以Page类型(也是默认类型)为例,说明一下具体的处理过程:
对于Page类型,由UrlReWriteHandlerFactory.ProccessHandlerTypePage()处理,在ProccessHandlerTypePage中,先得到FullPageLocation,在web.config中可以配置,默认是DTP.aspx,然后调用HandlerConfiguration.SetControls(它只一行处理语句:context.Items.Add("Dottext.Common.UrlManager.ControlContext",controls);),context.Items是IHttpModule 和 IHttpHandler 之间共享数据区。这里我的理解是:将需要显示哪些controls的配置信息存储在context.Items中,以便在后来的处理中从context.Items读取(实际上是在DottextMasterPage中读取并显示controls的,这就是.Text中动态加载ASC控件的原理)。最后,通过PageParser.GetCompiledPageInstance(url,pagepath,context);返回一个HttpHandler,该方法的功能我的理解是为url请求创建一个pagepath的实例,类似于Response.Redirect。
相关文章推荐
- h5学习笔记:weui text/template 使用
- UGUI 学习笔记 3 Text 和 Rect Transform
- Android 学习笔记---常用技巧(从TextView提取整数)
- 4.19学习笔记:android电量排行、okhttp与SPYD协议、重写editview的addTextChangedListenerBUG
- XML学习笔记(三):写入XML文档的XmlTextWriter
- 【C++学习笔记】wchar_t、WCHAR、TCHAR数据类型,宏L、TEXT、_TEXT、_T
- Android UI学习笔记之 MultiAutoCompleteTextView和AutoCompleteTextView
- ReactNative 学习笔记 Component - View,Text
- iOS学习笔记之textfield判断是否是全汉字、全数字、全字母!
- JQuery学习笔记(1):bind()、 html()、val()、text()方法
- JS学习笔记3 TextUtil.js
- NLP︱高级词向量表达——FastText(简述、学习笔记)
- 雾山的Robotium学习笔记---typeText与enterText的区别
- Java学习笔记(12)Exception Handling and Text I/O
- 学习笔记 AppCompatEditText
- System.Text.Encoding 学习笔记
- 雾山的Robotium学习笔记---typeText与enterText的区别 .
- 【转】Android开发学习笔记:EditText的属性介绍
- Udacity DEEPLEARNING 学习笔记 L4 TEXT AND SEQUENCE MODEL
- java.text.DecimalFormat学习笔记