学海无涯

网络是最好的老师

导航

公告

随笔分类

收藏夹

随笔档案

最新评论

统计

常用链接

.net

AOP

goold site

js

Sql

设计模式

友朋自网络来

阅读排行榜

评论排行榜

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

        对于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


        
#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();
        }

        %

posted on 2005-08-07 10:09 来问(zljGood@hotmail.com) 阅读(1651) 评论(6) 编辑 收藏