首先我们回顾一下,之前学过的Http协议.
这里边有个连接,浏览器要请求服务器创建一个连接,连接之后,发送请求,服务器做出响应.响应结束之后,要关闭连接,当HTTP1.0的时候是短连接,HTTP1.1的时候是长连接。长连接的意思是等个非常短的时间,还有请求的话,连接就不关闭,否则的话就关闭。
因为这个连接,响应结束之后不管是长连接还是短连接,最终都要关闭。连接一关闭,服务器就不知道这个浏览器的存在,就是因为这个特点,Http是无状态的。无状态会给我们造成很多的麻烦,什么是无状态,就是服务器不会记得浏览器曾经请求过我。所以,同一个页面中请求了外部的js、css、jpg每次在请求这些文件的时候都需要重复提交一些数据。
如果网页中引用了多个外部文件,每一个文件都要发送一个请求。还有就是服务器跟浏览器的关系是:请求-响应。
服务器会不会主动的给浏览器发送响应?
不会的,因为服务器根本就不知道有哪些浏览器的存在。比如新浪微博,好像是服务器主动给浏览器发送响应的。
这个是怎么实现的呢?
服务器不会主动向浏览器发送响应,浏览器有个定时器不停的向服务器发送请求,获取服务器的响应。需要使用ServerPush(ajax隔一段时间到服务器请求最新的数据)等额外的技术。
迅雷里面的断点续传是怎么实现的呢?
当下载的时候,它会记录下来记录了多少个字节。并且把那些字节都放在临时文件里面。再次下载的时候从上次记录的字节的位置之后开始下载,并且存放到临时文件里面。直到整个文件被下载完毕。再还原这个文件。
今天我们要学一般处理程序,html控件与.NET内部对象。
1、目标:从网络的角度介绍 ASP.NET 的运行机制原理,并对 ASP.NET 中的几个核心对象进行分析.
2、检验结果:熟练使用一般处理程序完成单表增删改查
下面我们回顾下之前学过的内容,什么是浏览器语言?
在浏览器端执行的语言叫浏览器语言。
服务器语言就是在服务器上执行的语言。
静态页面和动态页面的区别是什么呢?
动态页面需要运行服务器端的语言,静态页面是纯展示的。静态页面服务器直接读文件,读完之后直接发送。在服务器上不会执行特别复杂的事情。
如果是动态页面的话,在服务器要创建这个类的对象,并且调相应的代码执行。
之前,我们自己写了个web服务器,真正应用的时候不会自己去写服务器。我们开发完网站之后,会把网站部署在iis上。
接下来我们看下iis web服务器工作的流程。
iis跟我们自己写的服务器的工作原理是类似的。
我们先看下iis:
一、看下iis这个软件
xp里面的iis是5.1,win7里面的是6.0,界面稍微有些不一样。
二、iss运行网站
我们在里面可以建个虚拟目录,去发布一些网站。
演示下win7中怎么安装iis吧。
一、首先是安装IIS。打开控制面板,找到“程序与功能”,点进去
三、程序与功能
二、点击左侧“打开或关闭Windows功能”
四、打开或关闭Windows功能
三、找到“Internet 信息服务”,按照下图打勾即可
五、找到“Internet 信息服务”
等待安装完成
六、等待安装完成
四、安装完成后,再回到控制面板里面,找到“管理工具”,点进入
七、管理工具
五、双击“Internet 信息服务(IIS)管理器”就是IIS了。如果经常需要使用IIS的朋友,建议鼠标指到“Internet 信息服务(IIS)管理器”上,右键--发送到--桌面快捷方式,这样就能从桌面进入IIS,而不用每次都点控制面板。
八、IIS界面
IIS界面:
五、选中“Default Web Site”,双击中间的“ASP”
九、双击ASP
把“启用父路径”改为“True”
十、把启用父路径改为True
七、下面就是配置站点了。单击右侧“高级设置”
十一、“高级设置”
选择你网站的目录
十二、选择网站目录
八、回到IIS,单击右侧的“绑定...”,选中你要绑定的网站,点“编辑”
十三、选中网站-编辑
如果是一台电脑,只修改后面的端口号就行,可以随意修改数字。如果是办公室局域网,点击下拉框,选择自己电脑上的局域网IP,例如:192.168.**.**,然后修改端口号
十四、修改端口号
九、回到IIS,如果右侧显示停止,就选择启动,然后点击下面的浏览网站,就可以打开你绑定文件夹里面的网站了
十五、浏览网站
十、如果有多个网站,在IIS左边“网站”右键“添加网站”
十六、添加网站
主要修改三个地方,“网站名称”、“物理路径”、“端口”,如果局域网,请修改“IP地址”,同上
十七、修改内容
十一、添加好后,点击新建的网站名字,就是这个网站的详情了。
下面我们回来看看iis是怎么工作的,
十八、点击配置
十九、aspnet_isapi.dll
其中的asp和aspx是不一样的。asp交给asp.dll了。
二十、asp交给另一个人去处理了
请求静态页面:
内部先去处理请求报文,请求报文处理请求的路径,然后再读文件。读到iis里面来,iis再为响应生成响应头,把文件发送给浏览器。
请求动态页面:
浏览器发送一个请求,通过后缀名来判断是静态的还是动态的?如果后缀名是aspx,这个时候iis处理不了。但是,找个人去处理,这个关系在哪儿配置的呢?
当请求过来以后,不管是静态页面还是动态页面,都去映射表里面找。只是找的找还是找不找的问题。如果是静态页面也会去映射表里面找,一看没找着,iis就自己处理了。读文件然后返还。如果找着了,一看后缀名是aspx并且在映射表里面找到了,请求交给aspnet_isapi.dll这个程序是FrameWork的。在安装完.net FrameWork之后才有这个文件。
那么,iis依赖.net FrameWork呢?iis直接运行在操作系统上,iis不依赖.net FrameWork,跟.net FrameWork之间没有关系。C#代码在.net FrameWork上执行。iis把请求转交给.net FrameWork,让.net FrameWork来执行页面的C#代码。isapi就是它们之间的关系。怎么去执行请求的类的对象,通过反射去创建这个类的对象。那个方法执行完之后就一层一层的返。最终,返回给浏览器。
当我刚装了操作系统,又配置了iis,能执行asp.net写的网站么?不能,没有.net FrameWork
如果我装了操作系统,又装了.net FrameWork,又装了iis,在iis上发布了一个asp.net的网站。能运行么?不能,这个时候iis不知道.net FrameWork的存在。没有配置。需要配置一下,有个命令:运行敲:cmd。
aspnet_regiis-i在iis里面注册.net FrameWork,生成我们看见的那些东西。不能在这运行。因为,这个命令是.net FrameWork安装目录里面的命令。
打开VS2010的命令提示。
二十一、不能在这执行
二十二、打开VS2010的命令提示
二十三、在这里执行下
二十四、iis运行过程图
二十五、工作流程图
请求过来之后,如果后缀名是aspx,如果是iis5.1就是windowsXP里面装的iis,这个时候请求直接交给iis。没有这个过程。现在这张图是iis6.0以后执行的过程。windows sever2003安装的就是6.0,6.0以后的iss都是这么来请求的。请求过来之后,这个请求没有到iis,第一步不经过iis。先经过http.sys,一个系统级别的驱动程序。操作系统内核程序。先接收到这次请求,对请求报文进行过滤看请求报文是不是合法?如果请求合法的话,这个驱动程序才把请求交给iis,iis再找iis的扩展程序,有aspnet_Isapl.dll和aspnet_filter.dll。这两个扩展程序做的事情不一样。
如果是静态页面直接处理,如果是aspx交给中间,如果是asp交给右面。
下面我们再说下什么是ASP.Net
ASP.Net是不是一种语言?不是,是一种动态网页技术,跟ASP一样。
ASP.NET和ASP有什么区别呢?
他们内部的一些对象还是一样的,因为这两个技术都是微软的,都是开发动态网页的技术。ASP开发动态网页的时候使用的服务器端的脚本语言。脚本语言都是解释执行的。C#和java都是编译执行的。ASP.NET依托于. net FrameWork框架。
我们在学习ASP.Net的时候需要学习这三部分内容。ASP.Net:一般处理程序(ashx),WebForm(aspx)、MVC(Model, View , Controler)。
看下今天的重点:
二十六、ASP.Net常用文件
现在我们只需要记住前三个就ok了。
下面我们写个一般处理程序,新建一个网站:
二十七、新建网站
二十八、新建空网站
如果我把VS关了,关了之后怎么打开网站?把网站发给了别人,别人怎么打开呢?文件-打开-网站。简单的办法:
二十九、另存为解决方案
用的时候直接找到保存的文件夹,双击解决方案就可以打开这个网站。
下面我们来建个一般处理程序:
三十、添加新项
三十一、新建一般处理程序
ashx就是一个类,为什么它不叫类了,变成一般处理程序了呢?就因为它实现了IHttpHandler这个接口。
三十二、一般处理程序
三十三、转到定义
ProcessRequest的作用是处理请求,并做出响应。
IHttpHandler接口的作用是保证所有能够处理浏览器请求的类具有这个方法。这是这个接口的作用。
三十四、HttpContext
三十五、执行服务器端代码
三十六、Content-Type
要是输出html代码的话,改成text/html
练习:
输出一段包含图片的html页面代码试试。
三十七、输出包含图片的html页面代码
三十八、发送了两次请求
三十九、返回了html代码
四十、再次发送请求,请求一张图片
四十一、服务器帮我们做的事情
下面我们把这段代码再改一下。
四十二、纯文本,怎么运行?
四十三、纯文本显示的就是纯文本
一般处理程序(HttpHandler):是一个实现System.Web.IHttpHandler接口的特殊类。
任何一个实现了IHttpHandler接口的类,是作为一个外部请求的目标程序的前提。(凡是没有实现此接口的类,就不能被浏览器请求。)
它由支持ASP.NET的服务器调用和启动运行。一个HttpHandler程序负责处理它所对应的一个或一组URL地址的访问请求,并接收客户端发出的访问请求信息(请求报文)和产生响应内容(响应报文)。
简单的说:咱可以通过创建一个我们自己的HttpHandler程序来生成浏览器代码发送回客户端浏览器。
HttpHandler程序可以完成普通类程序所能完成的大多数任务:
1.获取客户端通过HTML的Form表单提交的数据和URL参数
2.创建对客户端的响应消息内容
3.访问服务器端的文件系统
4.连接数据库并开发基于数据库的应用
5.调用其他类
四十四、web服务器
四十五、一般处理程序
四十六、服务器怎么接收发送数据
四十七、今天需要掌握的内容
下面我们看下浏览器提交数据的两种方式,以百度为例:
四十八、百度搜索的时候是以url传参
四十九、通过表单提交数据
url以这种方式传参: http://127.0.0.1/login.ashx?txtname1=jordan&txtpwd1=123
下面我们自己写下get请求,
五十、接收数据
还有个页面模拟百度搜索的文本框,建立个文本框。
五十一、写个html页面,模拟百度用url传参
五十二、在一般处理程序里面接收url
五十三、执行过程
五十四、执行请求多个值
五十五、获取文本框的值以及传值
五十六、监视执行的过程
五十七、看看这样写能不能被提交
运行以后发现没有东西,所以根本就没提交给服务器。
五十八、改成这个样子
五十九、这种情况下还是通过get进行提交
下面我们再来看怎么通过post的方式传递数据.
六十、表单提交的页面
六十一、给两个文本框起个名字
六十二、在服务器上获取数据
六十三、执行结果演示
下面我们再来看下get请求和post请求报文中的区别。
post比get请求报文中多的内容
Content-Type: application/x-www-form-urlencoded 就是告诉服务器传输给你的数据格式跟url是一样的。而且在进行post提交的时候,必须具有content-type,没有的话,post提交就失败。
Cache-Control: no-cache 就是告诉服务器,浏览器不去缓存你的页面。
请求体name=123&pwd=abc
六十四、注意下这个设置
下面我们看下Request常用成员
六十五、request
下面我们看下Params能获取什么?
六十六、遍历输出看看里面都有什么
六十七、Params能获取什么
context.Request[“”]这么写也行,但是不推荐使用。//相当于context.Request.Params
下面我们再来看下Response。
六十八、Response
六十九、Redirect
hello world输出没有?监视下请求。
七十、监视下请求
七十一、Redirect执行过程图
七十二、就不再往下执行了。
下面我们看下post的时候,需要注意的问题。
七十三、这种情况下不能post
页面上不可以有多个表单。可以,而且不会冲突。
因为每个表单都有一个action。
想要提交谁必须有name属性。
按钮能不能提交给服务器?加name就提交给服务器了。
只有value才能提交给服务器。
div不能提交给服务器。
只有表单元素才能提交给服务器。
当元素被禁用的时候也不会提交给服务器。
七十四、提交性别
七十五、选中谁提交谁
七十六、表单提交多选
七十七、监视提交多个
用服务器接收一下。
七十八、用服务器接收一下
七十九、获取到的值
如果我有多个文本框,文本框的name都一样,这个时候又怎么办?
下面我们演示下有多个文本框的时候的情况:
八十、监视有多个文本框的时候
下回我们将模拟登陆,请大家关注!!!
回到起始位置
作者近期文章列表:
C#中级进阶教程(完全免费,献给代码爱好者的最好礼物。注:本作者分享自己精心整理的C#中级进阶教程,无任何商业目的。希望与更多的代码爱好者交流心得,也请高手多多指点!!!) | |
ASP.net项目 | 图书商城项目总论 |
三层及其它内容 | 递归 |
三层(一) | |
三层相关案例(及常见的错误) | |
三层实例(内涵Sql CRUD) | |
手写代码生成器 | |
SQL数据库 ADO.net | 数据库的应用图解一 |
数据库的应用详解二 | |
ADO.NET(内涵效率问题) | |
ADO.NET实例教学一 | |
ADO.NET实例教学二 | |
数据库的应用详解三 | |
ADO.NET(内含存储过程讲解) | |
面向过程,面向对象中高级 | 面向过程,面向对象的深入理解一 |
面向过程,面向对象的深入理解二 | |
面向对象的深入理解三 | |
正则表达式 | |
无处不在的XML | |
winform基础 | Winform基础 |
winform中常用的控件 | |
面向过程 | 三种循环的比较 |
C#中的方法(上) | |
我们常见的数组 | |
面向对象 | 思想的转变 |
C#中超级好用的类 | |
C#中析构函数和命名空间的妙用 | |
C#中超级好用的字符串 | |
C#中如何快速处理字符串 | |
值类型和引用类型及其它 | |
ArrayList和HashTable妙用一 | |
ArrayList和HashTable妙用二 | |
文件管理File类 | |
多态 | |
C#中其它一些问题的小节 | |
GDI+ | 这些年我收集的GDI+代码 |
这些年我收集的GDI+代码2 | |
HTML概述以及CSS | 你不能忽视的HTML语言 |
你不能忽视的HTML语言2精编篇 | |
你不能忽视的HTML语言3 | |
html-综合篇 | |
CSS基本相关内容--中秋特别奉献 | |
CSS基本相关内容2 | |
JavaScript基础 | JavaScript基础一 |
javascript基础二JavaScript DOM编程 | |
jQuery | jQuery(内涵: jquery选择器) |
jquery实例教学一 |