IHttpHandlerFactory 之完美应用, 自定义页面引擎

本文介绍基于IHttpHandlerFactory应用的页面引擎技术。思路是客户端发请求时,利用实现相关接口的对象实例化页面,调用对应xml,读取显示模块,实例化标记对象,转换xslt为html替换模块。该技术可实现页面与代码分离,定义样式易,执行效率高。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        对于IHttpHandlerFactory,IHttpHandler,xml,  xslt 的介绍,网上有很多,我这里不多介绍。这里介绍一个基于IHttpHandlerFactory 应用的页面引擎技术。

        我的思路是当客户端发出http请求时利用实现IHttpHandlerFactory接口的对象实例化实现IHttpHandler接口的页面objExample.exml,在objExample.exml中调用其对应的objExample.xml, 从xml中读取相应的显示模块template,根据template的描述实例化template中标记的对象objTemplate,并读取template中标记的template.xslt,然后用objTemplate把template.xslt转换成html发回替换objExample.xml中的template模块。

       这样做的好处是很容易的实现页面和代码的分离,定义页面样式容易,执行效率高。我做了几个应用,网址为:http://www.cheagle.comhttp://www.ganenfang.com,在我今后的应用中,还会加入css2.0的标准,用div代替table。

        下面是我写的一些此技术应用的代码:

       
       1:实现IHttpHandlerFactory接口
      

None.gif using  System;
None.gif
using  System.Web;
None.gif
using  System.Web.SessionState;
None.gif
using  CommonTools.PageEngine;
None.gif
None.gif
namespace  MainEngine
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif    
/**//// <summary>
InBlock.gif    
/// ExmlFactory 的摘要说明。
ExpandedSubBlockEnd.gif    
/// </summary>

InBlock.gif    public class ExmlFactory : System.Web.IHttpHandlerFactory,System.Web.SessionState.IRequiresSessionState
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
private readonly string namespaceStr = "MainEngine.Page.";
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
实现接口#region 实现接口
InBlock.gif        
public virtual IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated) 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
string pageName = this.GetPageName(context.Request.Url.AbsolutePath);
InBlock.gif            
object obj = Activator.CreateInstance(this.GetHandlerType(pageName));
InBlock.gif            IBaseHandler iobj 
= (IBaseHandler)obj;
InBlock.gif            iobj.InitData(context);
InBlock.gif            
return (IHttpHandler)obj;
ExpandedSubBlockEnd.gif        }

InBlock.gif        
public virtual void ReleaseHandler(IHttpHandler handler) 
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif        
#endregion

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
得到page名 GetPageName#region 得到page名 GetPageName
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 得到page名
InBlock.gif        
/// </summary>
InBlock.gif        
/// <param name="url">url地址</param>
ExpandedSubBlockEnd.gif        
/// <returns>page名</returns>

InBlock.gif        private string GetPageName(string url)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
string fname = url.Substring(url.LastIndexOf('/'+ 1);
InBlock.gif            
string cname = fname.Substring(0, fname.IndexOf('.'));
InBlock.gif            
return cname.ToLower();
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif        %

转载于:https://www.cnblogs.com/laiwen/archive/2005/08/07/209225.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值