博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(实战篇)httphandler登场亮相
阅读量:6315 次
发布时间:2019-06-22

本文共 4402 字,大约阅读时间需要 14 分钟。

项目中用到了很多httphandler,这里抓出来一个,不算壮丁,但同样足以说明问题,如下:

(1)web.config中配置

 
这里配置是何意,其实一目了然,就是说所有请求FWMODALDIALOG.ASPX页面的都交给CIT.OA.CommonUI.HttpHandler.FWHttpHandlerFactory整个类来处理,而所有请求FWAJAX.ASPX的也都交给CIT.OA.CommonUI.HttpHandler.FWHttpHandlerFactory处理
 

 

(2)项目中何处用到了呢?以一个最简单的应用来说明 来看一段脚本:
var returnValue = PopSelect_pop_ModalDialog(DialogTitle, "SystemManage/ResourceOperate.aspx?type=add", "700", "300"); if (returnValue != "refresh") return false;此脚本的意思就是打开一个模态窗口,有返回值则刷新父页面,来看PopSelect_pop_ModalDialog方法的定义function PopSelect_pop_ModalDialog(title, url, w, h) {    var winreswidth = w;    var winresheight = h;    var aboutbox = "";    var filename = "FWMODALDIALOG.ASPX?title=" + escape(title)            + "&url=" + escape(url)    aboutbox = showModalDialog(filename, window, "dialogWidth:" + winreswidth + "px; dialogHeight:" + winresheight + "px;unadorned:no;help:no;toolbar=no;menubar=no;location=no;status=no;scrollbars=1;resizable=1");    //open(filename, "", "");    return aboutbox;}

 

此方法打开FWMODALDIALOG.ASPX页面,而由于我们在web.config里做了配置,请求将导向CIT.OA.CommonUI.HttpHandler.FWHttpHandlerFactory处理 接下来看这个类的主要实现
 
public class FWHttpHandlerFactory : IHttpHandlerFactory, IRequiresSessionState    {        #region IHttpHandlerFactory 成员         ///         /// 使工厂可以重用现有的处理程序实例。        ///         /// 要重用的 IHttpHandler 对象        public void ReleaseHandler(IHttpHandler handler) { }         ///         /// 返回实现 IHttpHandler 接口的类的实例        ///         /// HttpContext 类的实例,它提供对用于为 HTTP 请求提供服务的内部服务器对象(如 Request、Response、Session 和 Server)的引用。        /// 客户端使用的 HTTP 数据传输方法(GET 或 POST)。         /// 所请求资源的 RawUrl。        /// 所请求资源的 PhysicalApplicationPath。        /// 
处理请求的新的 IHttpHandler 对象。
public IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated) { string filename = context.Request.FilePath; filename = filename.Substring(filename.LastIndexOf("/") + 1).ToUpper(); //访问不同的 Page 用不同的 Class 处理 switch (filename) { case "FWAJAX.ASPX": { return new FWAJAXHander(); } case "FWMODALDIALOG.ASPX": { return new FWModalDialog(); } default: { return context.Handler; } } } #endregion IHttpHandlerFactory 成员 }

 

此工厂类再次将请求导向到其它类处理,如下:
 
public class FWModalDialog : IHttpHandler, IRequiresSessionState    {        #region 接口实现         ///         /// 通过实现 IHttpHandler 接口的自定义 HttpHandler 启用 HTTP Web 请求的处理。        ///         ///          #region public void ProcessRequest(HttpContext context)         public void ProcessRequest(HttpContext context)        {            //初始化参数            string strTitle = CommonFunc.ObjectToNullStr(context.Request["title"]);            string strUrl = CommonFunc.ObjectToNullStr(context.Request["url"]);            string strScrolling = CommonFunc.ObjectToNullStr(context.Request["scrolling"]);            if (CommonFunc.IsNullString(strScrolling))            {                strScrolling = "auto";            }            strTitle = CommonFunc.UrlDecode(strTitle);            strUrl = CommonFunc.UrlDecode(strUrl);            if (!strUrl.ToLower().StartsWith("http://"))            {                strUrl = FWConfig.AppPath + strUrl;            }             //组成  ModalDialog 的页面            HttpResponse hr = context.Response;            hr.Expires = -1;            //            hr.CacheControl="no-cache,must-revalidate";            StringBuilder sbContext = new StringBuilder();            sbContext.Append("\r\n");            sbContext.Append("\r\n");            sbContext.Append("
"); sbContext.Append("
"); sbContext.Append("
"); sbContext.Append("
"); sbContext.Append("" + strTitle + "\r\n"); sbContext.Append("\r\n"); sbContext.Append("\r\n"); sbContext.Append("\r\n"); sbContext.Append("\r\n"); sbContext.Append("\r\n"); hr.Write(sbContext.ToString()); }

 

  至此就实现了通过一段脚本,打开模态窗口,而其如何打开的,则是通过httphandler进行处理后打开的,
以上应用虽小,但以够说明问题,记下以作参考之用!

转载于:https://www.cnblogs.com/jangwewe/archive/2013/03/20/2970616.html

你可能感兴趣的文章
Oracle 连接、会话数的查看,修改
查看>>
英语学习的重要性
查看>>
原产地政策,jsonp跨域
查看>>
ffmpeg参数具体解释
查看>>
记一次公司仓库数据库服务器死锁过程
查看>>
Oracle 11g password过期被锁定报道 ORA-28000 the account is locked
查看>>
【Struts2学习笔记(2)】Action默认值和配置Action于result各种转发类型
查看>>
轨磁条简介
查看>>
(算法)交错的字符串
查看>>
hdu 5471(状压DP or 容斥)
查看>>
oracle.jdbc.driver.OracleDriver和oracle.jdbc.OracleDriver这两个驱动的区别
查看>>
NSQ部署
查看>>
git常用命令记录
查看>>
唯品会HDFS性能挑战和优化实践
查看>>
大厂前端高频面试问题与答案精选
查看>>
我们用5分钟写了一个跨多端项目
查看>>
Visual Studio 15.4发布,新增多平台支持
查看>>
有赞透明多级缓存解决方案(TMC)设计思路
查看>>
如何设计高扩展的在线网页制作平台
查看>>
Git 2.5增加了工作树、改进了三角工作流、性能等诸多方面
查看>>