企业技术

缓存使用条件: 1.访问量大 2.数据不经常更新 缓存缺点:容易产生【脏数据】---  即:当用户第一次访问页面,读取数据库,并将数据存入缓存后,在该缓存失效前,其他访问都是读取缓存中的数据;但如果此期间数据库的数据发生改变,那么 缓存里保存的数据 和 数据库的数据就不一致了!这就是所谓的缓存脏数据。 解决问题:使用【缓存依赖】可以解决这个【脏数据】问题。即:启用依赖机制,此机制会负责监测物理数据(数据库/文本文件)是否发生改变,一旦发生改变则去缓存中删除对应的缓存(键值对)。

Session和Cache相同点: 1.都是保存状态的机制 2.都存在服务器端 3.键值对

Session和Cache的区别: Cache:所有用户都共有的,共享数据。 Session:单个用户使用,相互之间不共享Session数据。根据浏览器用Cookie保存的SessionId来决定访问的数据。

浏览器端缓存机制: 1.当浏览器使用get方式请求服务器时,浏览器会先到浏览器端临时文件夹中 根据页面名称 查找看是否有缓存版本,如果有,则直接读取,不再发送请求到服务器。 2.当浏览器使用post方式请求服务器时,浏览器会直接发送请求报文到服务器,而不去检查临时文件夹。   当时,当请求报文中包含If-Modified-Since时间的时候,服务器会根据该时间判断服务端缓存是否失效,如果没有失效,则返回304状态码给浏览器,浏览器则读取缓存。

服务器为什么会根据If-Modified-Since来生成304状态码? 1.服务器就知道浏览器端有缓存。 2.服务器就不再读取服务器端的缓存。 3.服务器生成的响应报文中就不必包含报文体(页面html代码),从而减轻了回传的数据量。 4.此机制也可以保证,浏览器端页面缓存和服务器端的缓存一致。

使用进程外Session的缺点: 1.必须序列化和反序列化 2.因为要把session数据发给 状态服务程序 或 数据库,所以存在发送数据时的资源消耗。 注意:当我们把网站部署到IIS后,配置文件里如果使用进程外 Session(数据库),就必须再配置文件中制定 数据库连接字符串。

1.HttpApliationFactory ->    1.1GetNormalApplicationInstance(HttpContext context) :        1.1.1通过反射的方式创建了 HttpApplication或者 Global.asax类对象        代码application = (HttpApplication) HttpRuntime.CreateNonPublicInstance(this._theApplicationType);        1.1.2调用程序员写的过滤器(HttpModule)集合里的Init方法为HttpApplication对象的事件注册方法。

http://localhost:3229/web/NewDetail/1

http://localhost:3229/web/NewDetail.aspx?id=1

ProcessRequestMain-> if (this.IsInAspCompatMode){AspCompatApplicationStep.OnPageStartSessionObjects();} PreInit-PerformPreInit()-> //预初始化:准备初始化页面控件,设置皮肤。 Init-InitRecursive(null)->//页面对象初始化 InitComplete(OnInitComplete-EventArgs.Empty)->//页面初始化完成:登记用户触发的事件。 if (this.IsPostBack){ -> LoadState-LoadAllState()加载ViewState,-> ProcessPostData-ProcessPostData(this._requestValueCollection, true)还原控件状态 }-> PreLoad-OnPreLoad(EventArgs.Empty) -> Load-LoadRecursive() -> if (this.IsPostBack){ ProcessPostData Second Try-ProcessPostData(this._leftoverPostData, false) -> Raise ChangedEvents-RaiseChangedEvents() -> Raise PostBackEvent-RaisePostBackEvent(this._requestValueCollection);}//触发控件事件 LoadComplete-OnLoadComplete(EventArgs.Empty) -> if (!this.IsCrossPagePostBack){->PreRenderComplete-PerformPreRenderComplete()//页面生成前准备} -> SaveState-SaveAllState() ->SaveStateComplete-OnSaveStateComplete(EventArgs.Empty) ->//保存页面和控件数据到ViewState Render-RenderControl(this.CreateHtmlTextWriter(this.Response.Output))

1.BeginRequest  开始处理请求 2.AuthenticateRequest 授权验证请求,获取用户授权信息 3.PostAuthenticateRequest 获取成功 4.AunthorizeRequest 授权,一般来检查用户是否获得权限 5.PostAuthorizeRequest 获得授权 6.ResolveRequestCache 获取页面缓存结果(如果没有则执行) 7.PostResolveRequestCache 已获取缓存 8.PostMapRequestHandler 创建页面对象 9.AcquireRequestState 获取Session -- 先判断当前页面对象是否实现了IRequiresSessionState接口,如果实现了,则从浏览器发来的请求报文头中获得SessionId,并到服务器的 Session池中获得对应的Session对象,最后赋值给 HttpContext的Session属性。 10.PostAcquireRequestState 获得Session 11.PreRequestHandlerExecute 准备执行页面对象 ×执行页面对象的ProcessRequest方法(1.ashx,1.aspx),如果请求的是1.aspx,则会运行页面生命周期 12.PostRequestHandlerExecute 执行完页面对象了 13.ReleaseRequestState 释放请求状态 14.PostReleaseRequestState 已释放请求状态 15.UpdateReuqestCache 更新缓存 16.PostUpdateRequestCache 已更新缓存 17.LogRequest 日志记录 18.PostLogRequest 已完成日志 19.EndRequest 完成

主要内容: 母板页 页面级缓存,控件缓存,简单缓存,带失效时间的简单缓存,文件缓存依赖,进程外Session(2种),微软Ajax核心组件,全局文件,错误页,IIS配置,页面生命周期(事件自动注册机制),HttpApplication的处理过程; 抽象工厂 三层(反射工厂三层),总复习

 

 

 

 

缓存使用是有原则的,不是每个页面都用缓存就好,毕竟它是占用服务器端资源的。所以一般是访问量特别大的就用,而且数据更新不频繁。 aspnet_regsql -S . -E -ed -d ItcastSIM -et -t Classes

asp.net全局配置文件(重写到 jsp可以,但重写到java可以吗?)C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG

posted @ 2012-09-01 08:07  zxp19880910  阅读(198)  评论(0编辑  收藏  举报