自从有了html与http,就有了浏览器与Web服务器,并有了Web应用,最初的交互模式是这样的:
该模式很好地运行了很多年。然而,随着计算机应用的发展,人们越来越不满足于只有静态内容的页面,而由某种机制动态产生html等代码的需求越来越迫切,于是,很多技术就应运而生,ASP.NET就是这样一种技术。从本质上讲,ASP.NET就是一种服务器端动态产生html、css、Javascript等浏览器认识的代码的技术。ASP.NET的交互模式如下:
由该图可知,ASP.NET必须解决两大问题,一是如何与Web服务器(一般就是指IIS)进行交互,二是如何根据不同请求产生不同的html等代码。
第一个问题,根据IIS版本(5.*,6.0,7.0)的不同,ASP.NET具有不同的进程模式与不同的交互模式,该问题不是本篇要讲述的。一般来说,大家不必关心该问题,而且要了解该问题,又必须清楚IIS各个版本的模型,而各个版本又各有各的不同,因此,我基本不准备讲述这个问题,大家有兴趣的话,可以自行搜索相关资料。
我们来讨论第二个问题,这里首先要说明的是,因为IIS7.0进程模式的变化比较大,我也没去了解IIS7.0的模型,因此,以下讲述及以后讲述将只针对IIS5.*与IIS6.0。我们有理由认为,针对IIS5.*与IIS6.0的讲述一般同样适用于IIS7.0。
先且按下该问题不表,我们来看一段请求玉帝把大象放到冰箱里的代码(为什么不是上帝?因为我中华不归上帝管),请大家先跟着我的思路来,别急,别急。
Code1
using System;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
Emperor emperor = new Emperor();
while (true)
{
Console.WriteLine("首先给玉帝准备好大象和冰箱。");
Console.WriteLine("输入大象的名字:");
string elephantName = Console.ReadLine();
Console.WriteLine("输入大象的体重:");
int elephantWeight = int.Parse(Console.ReadLine());
Console.WriteLine("输入冰箱的名字:");
string refrigeratorName = Console.ReadLine();
Elephant elephant = new Elephant()
{
Name = elephantName,
Weight = elephantWeight
};
Refrigerator refrigerator = new Refrigerator()
{
Name = refrigeratorName
};
Context context = new Context()
{
Elephant = elephant,
Refrigerator = refrigerator
};
emperor.ProcessRequest(context);
Console.WriteLine("是否要玉帝继续把大象关进冰箱里?");
string answer = Console.ReadLine();
if (answer == "n")
break;
}
}
}
class Emperor
{
public void ProcessRequest(Context context)
{
Elephant elephant = context.Elephant;
Refrigerator refrigerator = context.Refrigerator;
//第一步,打开冰箱门
refrigerator.IsOpen = true;
Console.WriteLine(string.Format("玉帝打开了 {0} 的冰箱门。", refrigerator.Name));
//第二步,把大象放进去
refrigerator.Content = elephant;
Console.WriteLine(string.Format("玉帝把大象 {0} 放到冰箱 {1} 里了。", elephant.Name, refrigerator.Name));
//第三步,关上冰箱门
refrigerator.IsOpen = false;
Console.WriteLine(string.Format("玉帝关上了 {0} 的冰箱门。", refrigerator.Name));
}
}
class Elephant
{
public string Name { get; set; }
public int Weight{ get; set; }
}
class Refrigerator
{
public string Name { get; set; }
public bool IsOpen { get; set; }
private object m_Content;
public object Content
{
get { return this.m_Content; }
set
{
if (!this.IsOpen)
throw new InvalidOperationException("冰箱门未打开,无法放进东西。");
if (this.m_Content != null)
throw new InvalidOperationException("冰箱内有东西,无法放进新的东西。");
this.m_Content = value;
}
}
}
class Context
{
public Elephant Elephant { get; set; }
public Refrigerator Refrigerator { get; set; }
}
}
好了,ASP.NET的设计思想讲完了。什么,还没开始?你没发现我们的Program就是HttpRuntime、Emperor就是HttpApplication、Context就是HttpContext、IEmperorModule就是IHttpModule吗?什么,没发现?那么,让我们来看看ASP.NET的源代码吧。(本想把整个方法的源代码都贴上来,但是显得过于冗长,因此删掉非关键代码,并以//……省略……代替。)
如此,你明白了吗?
NET技术:ASP.NET的设计思想,转载需保留来源!
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。