您的位置:首页 > 理论基础 > 计算机网络

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

2005-08-07 10:09 513 查看
对于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接口

using System;
using System.Web;
using System.Web.SessionState;
using CommonTools.PageEngine;

namespace MainEngine
{
/**//// <summary>
/// ExmlFactory 的摘要说明。
/// </summary>
public class ExmlFactory : System.Web.IHttpHandlerFactory,System.Web.SessionState.IRequiresSessionState
{
private readonly string namespaceStr = "MainEngine.Page.";

实现接口#region 实现接口
public virtual IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated)
{
string pageName = this.GetPageName(context.Request.Url.AbsolutePath);
object obj = Activator.CreateInstance(this.GetHandlerType(pageName));
IBaseHandler iobj = (IBaseHandler)obj;
iobj.InitData(context);
return (IHttpHandler)obj;
}
public virtual void ReleaseHandler(IHttpHandler handler)
{
}
#endregion

得到page名 GetPageName#region 得到page名 GetPageName
/**//// <summary>
/// 得到page名
/// </summary>
/// <param name="url">url地址</param>
/// <returns>page名</returns>
private string GetPageName(string url)
{
string fname = url.Substring(url.LastIndexOf('/') + 1);
string cname = fname.Substring(0, fname.IndexOf('.'));
return cname.ToLower();
}
%
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐