520 likes | 736 Views
第十四讲. 应用程序的环境配置. ASP . NET 应用程序的环境配置. ASP . NET 系统的运行条件 Web 应用程序的运行环境,并将已经开发好的 Web 应用程序传输到该运行环境中。一般来说,所建立的运行环境是和开发环境是严格分离的。 二是指对已经建立的运行环境,设置相关环境参数或配置文件,以实现安全、高效、易于维护的基本要求。其中,安全性要求是最为重要的。. ASP . NET 应用程序配置文件.
E N D
第十四讲 应用程序的环境配置
ASP.NET应用程序的环境配置 • ASP.NET 系统的运行条件 • Web应用程序的运行环境,并将已经开发好的Web应用程序传输到该运行环境中。一般来说,所建立的运行环境是和开发环境是严格分离的。 • 二是指对已经建立的运行环境,设置相关环境参数或配置文件,以实现安全、高效、易于维护的基本要求。其中,安全性要求是最为重要的。
ASP.NET应用程序配置文件 • ASP.NET 资源的配置信息包含在一组配置文件中,每个文件都名为 Web.config。每个配置文件都包含 XML 标记和子标记的嵌套层次结构,这些标记带有指定配置的属性。
配置文件标记 • 配置文件标记必须是格式正确的 XML,所以标记、子标记和属性是区分大小写的。标记名和属性名是 Camel 大小写形式的,这意味着标记名的第一个字符是小写的,任何后面连接单词的第一个字母是大写的。true 和 false 例外,它们总是小写的。
ASP.NET配置文件的使用 • 所有的ASP.NET配置都是可以随时更改的。也就是说,在一个应用程序的运行期间,可以随时增加和删除ASP.NET配置文件中的项目,修改成功后,可以立即激活使用,并不会影响服务器的效率。
ASP.NET应用程序的环境 • 一个完整的ASP.NET应用程序除了可浏览的若干Web页面(.aspx)文件外,还包括与这些页面相关的配置文件(machine.config、gobal.asax、web.config)及其他文件(.vb、.resx、.xsd、.css等)。 • 这些文件需要进行很好的配置和部署,才能保证整个Web应用程序在Internet上的安全发布和有效运行。
global.asax文件 • global.asax文件用于容纳Application的事件代码、Session的事件代码和声明对象等功能,并不是ASP.NET的config配置文件的一部分 但是由于使用这个文件可以做到对一个应用程序的配置,也就是说一个应用程序只能有一个global.asax文件。
config配置文件 • ASP.NET的config配置文件并不是只有 machine.config和 web.config。.NET还支持很多类型的配置文件。例如,security.config是用于安全性配置的,专门处理Web服务器的安全策略等。machine.config是用于机器设置的配置文件,而web.config则用于应用程序的设置。 • Web.config文件是用于配置Web的服务器的。Web服务器就是IIS,因此Web.Config文件就是用于配置IIS的。
对IIS的配置的修改 • 当需要对IIS的配置进行修改的时候,可以采用两种方法:-是使用IIS的用户界面,另一种是使用web.config文件。由于web.config文件是一个文本文件,使用这种方法来修改Web服务器配置更方便更简明。所以通常对系统不熟悉的人会选择使用用户界面来修改服务器配置,而对系统熟悉的人会选择使用修改web.config文件的方式来配置Web服务器。
机器配置信息 • 在一个系统中,只能有一个machine.config文件,可以有多个web.config文件。在页面启动的时候,首先读取的是machine.config文件的内容,获得相应的机器配置信息,然后,它就一层一层地读取所有Application根目录下的web.config文件的内容,根据它的内容对machine.config文件中的配置进行修改或补充。在讲解Application的时候己经讲过,在一个IIS中,允许存在多个Application。而每个Application都允许有一个web.config文件作为它的配置。
配置信息 • 如果所有的应用程序中都没有web.config,那么就使用machine.config中的配置信息。由于web.config存在的目的就是修改或补充machine.config中的配置,所以machine.config往往很大,会包含上千行的代码;而web.config则通常很小,只有几行。并且machine.config文件和web.config文件在语法上没有任何的区别。
Web.Config 文件的配置 • 有的ASP.NET程序员说:我写的程序不用设置Web.config文件不是也能很正常的运转吗?是的,没有Web.config文件程序是可以正常运行的。但是,如果你做了一个大型的应用,需要对整个应用做一些整体配置,例如整个应用的页面使用何种语言编写的、应用的安全认证模式、Session信息存储方式等,这时你就需要使用Web.config文件了。 • 实际上,Web.config文件常用来定义一些应用系统关键的常量和用户的访问权限设置等。
Web.Config 文件 • Web.config有两种,分别是服务器配置文件和Web应用程序配置文件,他们都名为Web.config。 • 服务器配置文件会对IIS服务器下所有的站点中的所有应用程序起作用。 • 某一应用程序配置文件只对其应用程序起作用。
Web.Config 文件 • 而Web应用程序配置文件Web.config则保存在各个Web应用程序中。例如:当前应用的根目录\ASPNET,而当前的Web应用程序为My_BOOK,则Web应用程序根目录就应为:\ASPNET\My_BOOK。
Web.config文件 • Web应用程序的配置文件Web.config是可选的,可有可无。如果没有,每个Web应用程序会使用服务器的Web.config配置文件。 • 如果有,则会覆盖服务器Web.config配置文件中相应的值。另外可以根据需要,如果你的应用系统由多个子系统,每个子系统又放在不同的文件夹下,这样每个文件夹下又可以有一个Web.config文件,当然它的作用域也只是这个文件夹。但是它可以继承父文件夹下的Web.config文件的设置,覆盖相同的项,也就是说,取最新的设置,但不能改变父文件夹下的设置。
Web.Config文件的常用的标记 • 由于所有的配置文件都是采用XML格式编写的文件,所以所有的文件都可以通过记事本来方便地实现编写和修改。需要注意的是,由于配置文件是IIS使用的特殊的文件,所以与普通的XML文件不同,它定义了一系列的标记用于表示特定的内容。也就是说,不允许使用用户自定义的标记。
配置文件的根节点 • 所有配置文件的根节点都是<configuration>标记,也就是说,所有配置数据都写在<configuration>和</configuration>标记之间。所有的属性都应该写在双引号中。
1.<configuration> • 这个标记是web.config文件中的根标记。也就是说,web.config文件中的所有数据都是写在<configuration>和</configuration>标记之间的。 它的写法如下所示: <configuration> ……… </configuration>
2.<configSections> • 配置文件在结构上分为声明部分和设置部分。声明部分负责定义类,而设置部分为声明部分定义的类赋值。所有的声明部分都写在<configSections>和</configSections>标记之间。
3. <system.web> • 在<system.Web>和</system.web>标记之间定义了在<configSections>元素中system.web组中定义的所有项目,这是与ASP.NET相关的所有信息。
4.<httpRuntime> • 在这个标记中,设置了HTTP的请求超时时间的长度、请求的最大长度、是否使用完整的URL等信息。具体的写法是: <httpRuntime options/> 其中options所在的位置用于写这个标记的所有属性。
标记的例子 • 使用这个标记的例子如下 <configuration> <system.Web> <httpRuntime ExecutionTimeout="120" MaxRequestLength="8192" UseFullyQualifiedRedirectUrl="false“/> </system.Web> </configuration>
5.<customErrors> • 虽然在程序设计过程中所有的程序设计人员都花费很大的精力避免错误的发生,但是错误总是会出现。在出现错误的时候,ASP.NET会提供一个错误信息,例如,如果程序中使用了一个没有定义的变量,就会显示如图所示的页面。
定制的错误页面 • 在ASP.NET中,允许采用两种方法实现定制的错误页面。一种方法是使用IIS提供的属性修改对话框进行定义,也可以使用web.config文件进行定义。
如果要使用IIS提供的属性修改对话框进行错误提示页面的定义,就可以打开IIS管理器,然后在“默认Web站点属性”对话框中,选择“自定义错误信息”选项卡,就可以看到图所示的默认状况。在这里可以看到,当发生不同错误的时候,会显示不同的信息。这些信息有的是以页面文件的形式存在,有的是使用默认的形式,还可以使用URL作为出错时候的显示信息,用这种方法对任何一种错误的出错信息进行重新配置。当然,也可以按照不同的错误自己设计一个页面来替代这些默认的错误信息页面,这样当出现错误的时候,就会显示这些自己设计的错误信息。如果要使用IIS提供的属性修改对话框进行错误提示页面的定义,就可以打开IIS管理器,然后在“默认Web站点属性”对话框中,选择“自定义错误信息”选项卡,就可以看到图所示的默认状况。在这里可以看到,当发生不同错误的时候,会显示不同的信息。这些信息有的是以页面文件的形式存在,有的是使用默认的形式,还可以使用URL作为出错时候的显示信息,用这种方法对任何一种错误的出错信息进行重新配置。当然,也可以按照不同的错误自己设计一个页面来替代这些默认的错误信息页面,这样当出现错误的时候,就会显示这些自己设计的错误信息。
定义错误页面 可以用web.config文件来定义错误页面,只要在config.web文件中增加<customerrors>标记就可以了。方法如下: <customerrors defaultredirect="url" mode="on/off/remoteonly"> 或者 <customerrors defaultredirect="url" mode="on/off/remoteonly"> <error statuscode="errorcode" redirect="url"/> </customerrors> • 前一种方法定义错误发生时候显示的页面,后一种方法针对不同的错误代码(例如 400错误、404错误等等)定义不同的显示页面。其中,defaultredirect=”url”的位置用于写默认的错误显示页面的url,而redirect=”url”用于写各个不同错误的显示页面的url,errorcode位置用于写400、404等这样的错误代码。
mode属性 • mode属性的三个取值的意义分别为:on表示在错误发生的时候要显示这个错误页面,off表示在错误发生的时候不显示这个错误页面,而remoteonly则表示只对非本地用户显示这个错误提示页面,而对本地用户,仍然显示ASP.NET的默认错误提示页面,这样保证程序编制人员可以获得关于程序设计错误的最详尽的信息。
标记的例子 使用这个标记的例子如下: <configuration> <system.web> <customerrors defaultredirect="errors.aspx" mode="remoteonly"/> </system.web> </configuration>
6.<sessionState> • web.config文件中使用<sessionState>标记来设置应用程序中Session的行为。 它的写法如下所示: <sessionState options>
Global.asax文件的配置 • Global.asax 文件(也称作 ASP.NET 应用程序文件)是可选文件,也就是说一个应用可以有,也可以没有这个文件。 • Global.asax 文件保存在ASP.NET应用程序的根目录下。在运行时,Asp.net通过一个动态的.NET FrameWork 类自动解析这个文件,这个类就是HttpApplication基类,在第一时间里,在这个文件中的应用程序的资源将会被响应。Global.asax 文件本身被设置为拒绝客户端对它的任何直接 URL 请求,所以外部用户无法下载或查看在该文件中的代码。
Global.asax文件的配置 • ASP.NET Global.asax 文件能够与 ASP Global.asax 文件共存。 • Global.asax 文件是可选的。如果不定义该文件,ASP.NET 应用程序认为您未定义任何应用程序或会话事件处理程序。 • 当您将更改该文件,并保存到活动 Global.asax 文件时,ASP.NET 会自动检测到该文件已被更改。
Global.asax文件的格式 • 和其他类型的应用程序一样,在ASP.NET中有一些任务一定要在ASP.NET应用程序开始执行之前执行。这些任务都会在global.asax中定义。例如Application对象和Session对象的事件代码,都应该写在这里。 • Global.asax文件其实就是包括了若干Application对象或Session对象的事件,程序运行时会自动触发其中的事件。 • 在global.asax文件中使用< Script >标记来包含VB.NET、C#代码,用<OBJECT>标记包含对象的声明,用引用文件的方式引用类型库。
Global.asax文件的基本结构形式: <Script Language =”VB” Runat=Server> Sub Application_OnStart(Sende As Object,E As EventArgs) ‘当应用程序启动后第一个客户访问时会触发该事件。 End Sub Sub Application_OnEnd(Sender As Object,E As EventArgs) ‘当应用程序停止时触发该事件,比如关闭服务器,或修改Global.asax 文件,或修改web.Config文件时。 End Sub
Sub Session_ OnStart(Sende As Object,E As EventArgs) ‘当每一个客户登录时触发该事件。 End Sub Sub Session_OnEnd(Sender As Object,E As EventArgs) ‘当每一个客户超过会话时间(默认为20分钟)没有和服务器交互,客户关闭浏览器后也会触发,但不会立即触发,须等待会话时间结束。 End Sub
Sub Appllcation_OnBeginRequest(Sender As Object,E As EventArgs) ‘当每一个用户请求访问每一个ASP.NET文件时触发该事件。 End Sub Sub Applicaton_OnEndRequest(Sender As Object,E As EventArgs) ‘当每一个用户请求访问每一个ASRNET文件结束时触发该事件。 End Sub </Script>
Global.asax 文件包含以下事件 Application_Init:在应用程序被实例化或第一次被调用时,该事件被触发。对于所有的HttpApplication 对象实例,它都会被调用。 Application_Disposed:在应用程序被终止之前触发。是清除所用资源。 Application_Error:当应用程序中遇到一个未处理的异常时,该事件被触发。 Application_Start:在HttpApplication 类的第一个实例被创建时,该事件被触发。它允许你创建可以由所有HttpApplication 实例访问的对象。 Application_End:在HttpApplication 类的最后一个实例被终止时,该事件被触发。在一个应用程序的生命周期内它只被触发一次。 Application_BeginRequest:在接收到一个应用程序请求时触发。对于一个请求来说,它是第一个被触发的事件,请求一般是用户输入的一个页面请求(URL)。
Global.asax 文件包含以下事件 Application_EndRequest:针对应用程序请求的最后一个事件。 Application_PreRequestHandlerExecute:在 ASP.NET 页面框架开始执行诸如页面或 Web 服务之类的事件处理程序之前,该事件被触发。 Application_PostRequestHandlerExecute:在 ASP.NET 页面框架结束执行一个事件处理程序时,该事件被触发。 Applcation_PreSendRequestHeaders:在 ASP.NET 页面框架发送 HTTP 头给请求客户(浏览器)时,该事件被触发。 Application_PreSendContent:在 ASP.NET 页面框架发送内容给请求客户(浏览器)时,该事件被触发。 Application_AcquireRequestState:在 ASP.NET 页面框架得到与当前请求相关的当前状态(Session 状态)时,该事件被触发。 Application_ReleaseRequestState:在 ASP.NET 页面框架执行完所有的事件处理程序时,该事件被触发。这将导致所有的状态模块保存它们当前的状态数据。
Global.asax 文件包含以下事件 Application_ResolveRequestCache:在 ASP.NET 页面框架完成一个授权请求时,该事件被触发。它允许缓存模块从缓存中为请求提供服务,从而绕过事件处理程序的执行。 Application_UpdateRequestCache:在 ASP.NET 页面框架完成事件处理程序的执行时,该事件被触发,从而使缓存模块存储响应数据,以供响应后续的请求时使用。 Application_AuthenticateRequest:在安全模块建立起当前用户的有效的身份时,该事件被触发。在这个时候,用户的凭据将会被验证。 Application_AuthorizeRequest:当安全模块确认一个用户可以访问资源之后,该事件被触发。 Session_Start:在一个新用户访问应用程序 Web 站点时,该事件被触发。 Session_End:在一个用户的会话超时、结束或他们离开应用程序 Web 站点时,该事件被触发。
Global.asax文件的实例 • 一个应用系统的日志的例子。它可以记录登录该系统的启动时间、关闭时间、每一个用户登录的时间、IP地址和用户退出时间等信息,结果保存在"e:/aspnetjc/my_log.txt"文件。
Global.asax Sub Application_OnStart(Sender As Object, E As EventArgs) '当应用程序启动后,第一个客户访问时触发该事件 sw=New StreamWriter("e:/aspnetjc/my_log.txt",True,Encoding.Default) sw.Writeline(Now() & "-系统启动") sw.Close End Sub
Sub Application_OnEnd(Sender As Object, E As EventArgs) '当应用程序关闭或修改Global.asax、web.Config文件时触发该事件 sw=New StreamWriter("e:/aspnetjc/my_log.txt",True,Encoding.Default) sw.Writeline(Now() & "-系统关闭") sw.Close End Sub
Sub Session_onStart(Sender As Object, E As EventArgs) '每一个客户登录时触发该事件 sw=New StreamWriter("e:/aspnetjc/my_log.txt",True,Encoding.Default) Session("IP")= Request.ServerVariables("REMOTE_ADDR") '将客户IP保存到Session中 sw.Writeline(Now() & "-用户" & Session("IP") & "登入") sw.Close End Sub
Sub Session_OnEnd(Sender As Object, E As EventArgs) '当每一个客户超过会话时间没有和服务器交互,或关闭浏览器后触发该事件 sw=New StreamWriter("e:/aspnetjc/my_log.txt",True,Encoding.Default) sw.Writeline(Now() & "-用户" & Session("IP") & "退出") sw.Close End Sub
记录页面的访问数 • 建立一个global.asax文件,记录页面的访问数。编写一个记录某个特定页面的点击次数,只要用户有一次点击就记录下来
实现这个需求的方法是使用Application来实现这个功能。在global.asax文件加入如下代码:实现这个需求的方法是使用Application来实现这个功能。在global.asax文件加入如下代码: Sub Application_OnStart Application.Lock Application(“page_coun”)=0 Application.UnLock End Sub