资源描述
单击此处编辑母版标题样式,http:/,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,中国十大品牌,IT,教育机构,HTTP,请求处理器,A,SP.NET,企业级应用编程,第,十,一章,MVC,模式,页面控制器:,Page,基类,页面上下文对象:,Context,请求处理器:,IHttpHandle,本章目标,MVC,模式,什么是,MVC,MVC,由,Trygve,Reenskaug,提出,首先被应用在,SmallTalk-80,环境中,是许多交互和界面系统的构成基础。,根据界面设计可变性的需求,,MVC,(,Model-View-Controller,)把交互系统的组成分解成模型、视图、控制器三种部件。,MVC,模式,MVC,基本结构,MVC,模式,视图,视图是模型的表示,它提供用户交互界面。,在,ASP.NET,中主要是指界面的设计,主要包括:,WEB,页面基类,PageBase,页面布局策略类,PageLayout,用户控件基类,UserControlBase,即用户控件框架,用于动态加载检验部件,以及实现用户控件的个性化,MVC,模式,控制器,控制器提供一个控制和处理请求的集中入口点,它负责接收、截取并处理用户请求;并将请求委托给分发者类,根据当前状态和业务操作的结果决定向客户呈现的视图。,MVC,模式,模型,MVC,系统中的模型从概念上可以分为两类,系统的内部状态和改变系统状态的动作,模型是所有的商业逻辑代码片段所在,MVC,模式,在,ASP.NET,中实现,MVC,视图部分:,.,aspx,页面,控制器部分:,.,aspx.cs,代码,模型部分:业务处理类,案例演示,MVC,模式,ASP.NET,中实现,MVC,模式有如下优缺点,优点:,能够减少依赖。,能够减少代码的复制。,能够把不同人员的责任分开。,使性能优化的成为可能,易测试性,缺点:,增加了代码的复杂度,页面控制器:,Page,基类,服务器处理,Http,请求的基本原理,页面控制器:,Page,基类,Page,基类基本介绍,默认情况下,,ASP.NET,应用程序中的所有,Web,窗体页面,都继承自,System.Web.UI.Page,。这个类实现了作为,HttpHandler,的必要功能,,ASP.NET,运行库在检测到调用某个页面的请求时,就会调用这个类。,HttpHandler,是处理请求的终端,,Page,类是,HttpHandler,用于处理和显示,Web,窗体的一种特定实现方式。,页面控制器:,Page,基类,Page,基类的作用,利用,Page,基类可以通过抽象页面中的共性部分,从而减少代码的冗余,同时也提高了系统搭建的灵活性。,页面上下文对象,Context,Context,基本介绍,Context,对象是,System.Web.HttpContext,类型的对象,使用,Context,对象来共享页之间的信息,其最大的特点就是可以通过用户控件和业务对象获得该对象,页面上下文对象,Context,对象,说明,Response,用于创建,HTTP,响应的设置和内容。,Response,是,System.Web.HttpResponse,类型。,Request,有关,HTTP,请求的信息,包括浏览器信息、,Cookies,以及在窗体或查询字符串中传递的值。,Request,是,System.Web.HttpRequest,类型,Server,服务器是一个实用程序类,带有一些有用的帮助器方法,包括,Server.Execute,(),、,Server.MapPath,(),和,Server.HtmlEncode,(),。,Server,是,System.Web.HttpServerUtility,类型的对象。,Session,值的关键字,/,值对集合,可由应用程序的单个用户访问。,Session,是,System.Web.HttpSessionState,类型。,Application,值的关键字,/,值对集合,可由应用程序的每个用户访问。,Application,是,System.Web.HttpApplicationState,类型。,Trace,的,Trace,对象,提供对跟踪功能的访问。,Error,处理页时遇到的第一个错误(如果有)。,重要的,Context,对象,Context,的使用,从业务类中生成一个,ASP.NET,跟踪语句,using System;,using,System.Web,;,namespace Context,public class,TraceEmit,public void,SomeMethod,(),/,获取请求上下文,HttpContext,_context=,HttpContext.Current,;,/,使用上下文编写跟踪语句,_,context.Trace.Write,(,在,TraceEmit.SomeMethod,中,);,Context,的使用,在业务类中访问,Session,using System;,using,System.Web,;,namespace Context,public class,UseSession,public void,SomeMethod,(),/,获取请求上下文,HttpContext,_context=,HttpContext.Current,;,/,访问内部会话,object _value=_,context.SessionTheValue,;,请求处理器:,HttpHandler,处理请求的管道模型,请求开始,模块动作,最终处理,处理返回,请求处理器:,HttpHandler,Httphandler,的实现,ProcessRequest,:该方法用来处理,http,请求,是,httphandler,最核心的方法,IsReusable,:一个属性,返回一个,bool,值,来表示这,httphandler,的实例是否能被重用来处理多个同类型的,http,请求。,请求处理器:,HttpHandler,在配置文件中注册,httpHandler,verb,属性,,verb,属性则为,POST,GET,;如果支持所有的请求方式,,verb,属性则用,*,path,属性说明了对哪些文件的请求才调用该,handler,来处理。,type,属性中指定了,handler,类的命名空间、类名。,实现,IHttpHandler,接口演示,public class,NewHandler,:,IHttpHandler,public,NewHandler,(),/TODO:Add constructor logic here,#region Implementation of,IHttpHandler,public void,ProcessRequest(System.Web.HttpContext,context),HttpResponse,objResponse,=,context.Response,;,objResponse.Write,(,Hi,This,is a test!);,objResponse.Write,();,public,bool,IsReusable,get,return true;,#,endregion,如果想使用,Session,,则还需要实现,IRequiresSessionState,接口,实现,IHttpHandler,接口演示,添加配置,实现,IHttpHandler,接口演示,在,IIS,中添加扩展,当在浏览器里输入,http:/,localhost/MyHandler/xxx.possible,时,该,handler,将被调用。,IHttpHandler,工厂,IHttpHandlerFactory,public interface,IHttpHandlerFactory,IHttpHandler,GetHandler(HttpContext,ctx,string,requestType,string,url,string,pathTranslated,);void,ReleaseHandler(IHttpHandler,handler);,GetHandler,方法在请求开始的时候被调用,ReleaseHandler,在请求结束,所有的,Handler,都不再需要的时候被调用,IHttpHandler,工厂演练,定义实际处理,HttpHandler,的类,public class,CommonUser,:,IHttpHandler,public virtual void,ProcessRequest(HttpContext,context),context.Response.Write,(,普通用户,);,public virtual,bool,IsReusable,get return true;,public class,VIPUser,:,IHttpHandler,public virtual void,ProcessRequest(HttpContext,context),context.Response.Write,(,贵宾,);,public virtual,bool,IsReusable,get return true;,IHttpHandler,工厂演练,定义,HandlerFactory,public class,UserHandlerFactory,:,IHttpHandlerFactory,public,IHttpHandler,GetHandler(HttpContext,ctx,string,requestType,string,url,string,pathTranslated,)string,fname,=url.Substring(url.LastIndexOf(/)+1);,string,cname,=fname.Substring(0,fname.IndexOf,(.);,string,className,=Shop.+,cname,;,object h=,Activator.CreateInstance(Type.GetType(className,);,return(,IHttpHandler)h,;,public void,ReleaseHandler(IHttpHandler,handler),IHttpHandler,工厂演练,添加配置,IHttpHandlerFactory,的思想就是,Factory,设计模式,利用给,Factory,对象传递不同的参数,以返回具有相同基类或实现了同一接口的对象,这里指返回具有同一,IHttpHandler,接口的对象。,总结,MVC,是什么意思?在,ASP.NET,中如何开发基于,MVC,的架构?,Page,基类都实现了哪个接口?,简单描述,ASP.NET,的处理过程。,IHttpHandle,包含几个需要实现的成员,它们各自代表什么意思?,
展开阅读全文