1.每一个请求都会要创建 一个HttpWorkerRequest和HttpApplication
2.HttpWorkerRequest 里面 放的是 每一个请求报文里的数据
3.HttpApplication对象里面放的是 每一个请求要执行的代码
4.为每个请求创建单独的HttpApplication对象, 那么针对此次请求的所有运行过程都在此对象中完成
Factory的理解:: HttpApplication池,每次HttpApplicationFectory都会在这个池里找有没有空闲的HttpApplication对象,如果有,就直接拿出来用,没有就创建新的使用.
服务器做的事情: 接受浏览器请求, 创建页面类的对象, 实现接口, 调用里面的方法, 返回相应的东东
HttpRuntime里面,由此类,处理所有的请求,它的工作
1.分析请求报文,并将报文数据封装入一个叫做HttpWorkerRequest类对象
2.创建HttpContext对象, 次对象是当前请求的上下文环境,里面包含处理请求的所有参数数据,其中最重要的就是HttpRequest和HttpResponse两个类(方便取值)
3.HttpRequest主要包含了所有的请求信息,这些信息来源于HttpWorkRequest对象,对象包含属性:Form(客户连接数据)QueryString(客户端url参数)
4.HttpResponse主要包含了一个FileStream对象, 用来保存页面类执行过程中要输出给浏览器的数据
5.通过调用HttpApplicationFectory的类的一个静态方法来创建HttpApplication类对象中对应属性
6.因为在HttpApplication里要运行被请求的页面类对象里的ProcessRequest方法,所以,需要将HttpContext对象传入到HttpApplication中来 ( IHttpHandler hander = 通过反射方式创建被请求的页面类对象 )?
执行HttpApplication的ProcessRequest方法 ( 可以将此方法的执行过程看成一个管道 ) 此方法中, 要先后按照顺序执行19个委托事件
•在其中第8个事件时,创建 被请求的页面类的对象
•在11个和12个中间,执行了 被创建的页面类的ProcessRequest方法
9.服务器怎么接受和发送数据?
HTTP Request Response
9.1 Request(HttpRequest) & Response(HttpResponse)
一, 浏览器提交数据方式
1 表单 (数据藏在请求报文体中, 格式txtname=jamws&txtpwd=123)
<form action="login.ashx" method="post"> <input type="text"/> <input type="password"/> </form>
2地址栏URL参数(和表单的Get方式一样):键值对 浏览器请求属性 1=jordan&txtpwd 1=123
二,服务器如何获取浏览器提交的数据?
1获取表单数据 context.Request.Form["txtname"]
2获取URL参数: context.Request.QueryString["txtname1"]
三,服务器如何向浏览器输出参数
context.Response.Write("我是从服务器输出到浏览器的数据!");
当用户在浏览器点击提交按钮时,浏览器自动帮我们将表单中带name的控件的值以赋值对字符串的方式,作为[http请求报文体]提交到服务器.
Request本身也可以看做一个客户端提交过来的所有参数
Request.Form 包含的只有客户端通过post方式提交过来的数据
Reuqest.QueryString 包含的只有客户端通过get方式提交过来的数据
get : 获得,拿去--当浏览器发送请求报文是为了从服务器获得数据的时候,就用get
post : 传递,有地,发送过去. --当浏览器发送请求报文传递参数过去,就用post
public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/html"; System.Text. StringBuilder sbHTML = new System.Text.StringBuilder(); sbHTML.Append( "<html><head><title>登录页面</title></head><body><form action='03Login.ashx' method='post'>"); sbHTML.Append( "用户名:<input type='text' /> <br />" ); sbHTML.Append( "密码:<input type='password' /> <br/>" ); sbHTML.Append( "<input type='submit' value='登录'/><a href='04Reg.ashx?a=222'>注册</a> <br/>"); sbHTML.Append( "</form></body></html>" ); context.Response.Write(sbHTML.ToString()); //获得浏览器表单post方式传递来的值 string strUserName = context.Request.Form["txtname"]; if (!string .IsNullOrEmpty(strUserName)) { context.Response.Write( "Form中的值:" + strUserName); } //获得浏览器表单get方式传递来的值 string strUserNameGet = context.Request.QueryString["txtname"]; if (!string .IsNullOrEmpty(strUserNameGet)) { context.Response.Write( "Url中得到的值:" + strUserNameGet); } }
9.2 Request(HttpRequest) 重要成员
重定向原理图如下:
------------------模拟wubForm的用户控件数据保持------------------