ASP.NET Web 应用程序编程模型

一、请求/应答模式

1.ASP.NET中,通过Request和Respone对象表示客户端的请求和服务器的响应

2.Request对象-它是HttpRequest类的实例,由ASP.NET自动创建,又称为"内置对象"
  HttpRequest类 可以读取客户端在web请求期间发送的HTTP值
1)Request.Form属性:读取浏览器发送到服务器的数据
  用法:Requst.Form["控件名"] 可以获取控件的值

2)Requst.QueryString属性:请求字符串是浏览器向web服务器传送信息的另一种方式
  请求字符串是附加在页面url后面的,可以包含一个或多个名-值对(用&分割)
  用法:URL: http://www.test.com/web1.aspx?name1=value1&name2=value2
  在web1.aspx页中获取name1、name2的值:Request.QueryString["name1"]

3.Response对象-它是HttpResponse对象的实例,是asp.net的内置对象
  HttpResponse对象封装来自ASP.NET操作的HTTP响应信息
  Response对象的两个常用方法是:
  Response.Redirect(string url);  将页面重定向到指定的URL
  Response.Write(string str);     向浏览器输出字符串

二、Server对象

1.Server对象是HttpServerUtility类的实例,它也是asp.net的内置对象
  Server对象起做HTTP服务接口的作用,并且公开HTTP服务器的属性和方法

2.Execute方法和Transfer方法
  Execute(string)  执行另一个页面(属于当前应用程序)的输出,然后返回到当前页面
  Transfer(string) 终止当前页的执行,转而执行另一个页面(属于当前应用程序)的输出

3.HtmlEncode方法和HtmlDecode方法-返回值类型为string
  如果字符串str中包含有html标签,对str进行编码,输出到浏览器,显示的是str的原本内容
  对str进行解码,输出到浏览器,浏览器将解释str中的html标签并展现之(默认情形)
 
4.UrlEncode和UrlDecode方法
1)一个带有请求字符串的url的格式为: 真实Url + "?" + 请求字符串
  请求字符串由一组或多组名-值对组成,名-值对之间由"&"分隔
 
2)当某个名-值对中的值中包含有"&"字符的话,就会产生问题
  解决办法就是对该名-值对的值字符串进行编码,即UrlEncode
eg: string value = "WebForm2.aspx?msg1=t1&msg2=t2&msg3=t3";
    string newvalue = Server.UrlEncode(value);
    Response.Redirect("WebForm2.aspx?msg1=" + newvalue + "&msg2=newt2");
    重定向Url中只有两个名-值对 msg1的值为"WebForm2.aspx?msg1=t1&msg2=t2&msg3=t3"
              msg2的值为"newt2"

3)在页面之间传递QueryString时,如果其中包含中文,则最好使用UrlEncode方法
>> 进行传递
string Name = "中文参数";
Response.Redirect("B.aspx?Name="+Server.UrlEncode(Name));

>> 进行接收
string Name = Request.QueryString["Name"];
Response.Write(Server.UrlDecode(Name));
或者:
NavigateURL='<%# "WebForm2.aspx?Singer=" + HttpUtility.UrlEncode("中国人", System.Text.Encoding.GetEncoding("GB2312")) %>'


5.MapPath方法
  该方法返回指定虚拟路径(当前Web服务器上)对应的物理路径
  eg:Server.MapPath("default.aspx") 返回值可以是 "c:\inetpub\wwwroot\loan\default.aspx"

三 web应用程序对象与Global.asax文件

1.asp.net Web应用程序用一个对象来表示,应用程序对象是HttpApplication类的实例
  每个asp.net web应用程序都包含一个名为Global.asax文件,即每个web应用程序都自动创建一个Global类,Global类继承自HttpApplication类。

2.应用程序的启动/结束、会话的开始/结束等都会触发事件,可以在Global类中编写这些事件的处理方法。
  在Global.asax文件中通常可以实现下面功能:
    初始化应用程序级/会话级变量、连接到数据库、发送Cookie ...
  在Application_Start()方法中,不能包含任何Html标记或Response.Write方法,因为此时尚未启动会话或创建Response对象

四 Web应用程序的状态管理

0.应用程序级别状态管理-Application 对象
  会话级别状态管理-Session 对象、Cookie技术

1.应用程序状态与Application对象(是HttpApplicationState类的实例,是ASP.NET内置对象)
1)Application对象有一个公开的状态集合-Contents,可以通过代码访问集合中的变量项
  eg:Application["Message"]="MyString"; Application["StartTime"]=DataTime.Now;
      Application.Contents["Message"]="MyString";
      Application.Contents["StartTime"]=DataTime.Now;
2)应用程序状态的同步(为了多线程访问的安全性)
  Application.Lock();   //锁定
  Application["count1"] = (int)Application["count1"] + 1;
  Application.UnLock(); //解锁

2.会话状态与Session对象
1)会话状态模式(在web.config文件中设置):
 1>进程内会话模式  <sessionState>元素的mode属性为InProc
 2>进程外会话模式  <sessionState>元素的mode属性为StateServer 
 3>SQLServer会话模式  <sessionState>元素的mode属性为SQLServer

2)可以通过Session内置对象(HttpSessionState类的实例)来实现会话状态。
  Session对象的使用:
  Session["stime"]=DateTime.Now; 或 Session.Contents["stime"]=DateTime.Now;

3.Cookie技术
1)Response对象和Request对象包含Cookie属性,该属性是HttpCookieCollection类的实例
  HttpCookie类提供了创建/操作Cookie的各种方法,HttpCookieCollection是对应的集合类

2)在asp.net中操作Cookie
1>写Cookie(服务器—>客户端)
  HttpCookie cookie1 = new HttpCookie("userinfo"); //创建一个名为userinfo的Cookie
  cookie1.Values["username"]= txtUserName.Text;    //为Cookie添加信息
  cookie1.Values["password"]= txtPassWord.Text;
  cookie1.Expires = new DateTime(2008,12,12); //设置Cookie的有效期
  Response.Cookies.Add(Cookie1); //将Cookie保存到客户端

2>读Cookie(客户端->服务器)
  HttpCookie cookie1 = Request.Cookies["userinfo"];  //从客户端获取Cookie
  Response.Write(cookie1.Values["username"]); //读取Cookie中的信息
  Response.Write(cookie1.Values["password"]);


4.Application对象/Session对象的StaticObjects集合-服务器端对象标记
1)在Global.asax文件中,添加如下的标记:
<object id="idname" runat="server" scope="application" class="要实例化的.NET类名">
即为Application.StaticObjects集合添加了一个名为idname的元素,该元素是一个类的实例
  示例:
------------------------------------------------------------------
//在Global.asax文件中,添加如下的标记:
//注意:class属性的值(类名)必须是带完整命名空间的类名,否则会报错
<object runat="server" scope="application" id="AppInfo" class="MyWebApp.Info"></object>

//在某页面的后台代码中
Info appInfo = (Info)Application.StaticObjects["AppInfo"];  //强制类型转换  
Response.Write(appInfo.counter);  //输出Info类对象的counter属性

2)在Global.asax文件中,添加如下的标记:
<object id="idname" runat="server" scope="session" class="要实例化的.NET类名">
即为Session.StaticObjects集合添加了一个名为idname的元素,该元素是一个类的实例
  示例:
------------------------------------------------------------------
//在Global.asax文件中,添加如下的标记:
//注意:class属性的值(类名)必须是带完整命名空间的类名,否则会报错
<object runat="server" scope="session" id="SessionInfo" class="MyWebApp.Info2"></object>

//在某页面的后台代码中
Info2 sessionInfo = (Info2)Session.StaticObjects["SessionInfo"]; //强制类型转换
Response.Write(sessionInfo.time); //输出Info2类对象的time属性

            

转载于:https://www.cnblogs.com/zqf620/archive/2007/01/08/614619.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值