WEB基础知识:
WWW一个大规模在线式信息储藏所。
浏览器:交互式应用程序。(C/S架构,瘦客户端)
- HTTP协议:超文本传输协议,无状态协议。此处注意的是HTTP协议下的网络连接是即时性的,一旦传输完毕则立即关闭。
- WEB服务器:一种可以管理各种web文件并为提出HTTP请求的浏览器提供Http相应的软件。常见的为apache与IIS。
- 静态网页:纯HTML网页。简单可靠和性能。预先定义的格式存在。
- 动态网页:可以为不同需求提供个性化服务,服务器根据客户端访问即时解释(或翻译)创建的
- 常见客户端技术:JavaScript、VBScript、JavaApplet
- 常见服务器端技术:CGI、PHP、ASP、JSP、ASP.NET
ASP.NET简介:完全给予模块和组件。
- 基本概念
- Client:客户端,接受服务的一端。Server:提供服务的一端。
- Request:请求,Response:响应
- CGI(单请求单进程)、ISAPI(单进程共享用户、DLL编译进进程,C语言)
- Microsoft.NET:一个开发平台,包括用于创建和操作新一代服务的.NET基础结构和工具。
- WEB Service:.NET支持将软件做成服务的方式执行。Web Service则是在Internet上的程序逻辑。此处运用的面向对象的思想(当然也可以说是面向服务,SOA深层追究起来,还是面向接口编程,仍旧是面向对象的发展衍生)
- 发展史
- ASP.NET与ASP区别:编译型与解释型,ASP以脚本语言为核心(导致无法底层操作)
- 工作原理:客户端访问WEB服务器,WEB服务器调用相关页面,查询相关数据然后生成页面返回浏览器。(ASP与ASP.NET都是这般)。ASP.NET独有的思想:程序被访问时,首先编译,生成MSIL语言,然后MSIL再被编译成机器码执行。
引入MISL语言的原因:
- 通过JIT(即时)编译器将MSIL编译成机器码,这样通过不同的JIT可以生成不同的机器码,从而实现跨平台(不同的计算机系统支持不同的JIT编译器)
- .NET框架的要求。.NET框架需要支持多种语言混合编程,所以需要一个统一的中间层语言MSIL。
- 运用MSIL作为中间便一层的寄存器,这样只有第一次被访问时缓冲较长,后面将直接调用编译后的文件,因此执行速度非常快。(至于为什么不寄存生成好的页面,而只是保存在生成中间过程的页面,此处自己可以理解)
建立ASP.NET运行环境:
- IIS:Microsoft Internet Information Service,运行在Wins系统下的WEB服务器。
- MDAC:Microsoft Data Access Components。
- .NET Framework和ASP.NET
开始编写ASP.NET程序
- 开发环境选择
- VS.NET
C#语言基础(不做笔记了)
HTML控件和WEB服务器控件
ASP.NET是给予控件设计的,对HTML控件的功能进行了扩展。同时ASP.NET自身也提供了一些服务器控件。所以ASP.NET有两种服务器控件:
- HTML控件
- WEB服务器控件
HTML控件:
- 必须属性
- runat ="server " 因为此处是服务器空间
- id =" name " 因为是面向对象的,每一个控件就是一个对象实例,对象实例必须有自己的名字,而且在文件作用域范围是唯一的(此处的文件作用域是全局)
- 可选属性(稍微列举部分HTML控件公有属性)
- Attributes:用于获取ASP.NET页面上的服务器控件标记所表示的所有属性名称和值。需要注意的是在HTML服务器控件中操作Attributes集合和操作ViewState相同。
语法:HTML控件名.Attributes(HTML标记属性名)="属性值"
- Disabled:设置或者获取一个值,该值只是当HTML控件呈现在浏览器上时是否包含Disabled属性,若包含该属性将使该控件成为只读控件。
语法:HTML控件名.Disabled=布尔值
- InnerHtml:该属性用来设置某容器控件中的文字。此处支持HTML语法
- InnerText:同上,不同点在于输出的为纯文本,不支持HTML语法解析
- Style属性:DHTML新增属性,设置控件外观样式。
- Value属性:设置控件的值,用于上下文逻辑运算
- WEB表单(Form):
- WEB页:HTML代码标记组成的页面,所有的HTML代码都包含在<html></HTML>之间
- HTML表单:web页中多个<form></form>之间所定义的控件组,用让用户输入数据并提交给WEB服务器进行处理。包含了表单内部控件以及响应的布局信息
- WEB表单:形式上同HTML表单一致。不同点在于WEB表单包含了表单内部控件、相应的布局信息以及数据提交之后的数据处理代码。
注意:<form></form>标记是一个饿容器,表示其中的内容是可以返回到web服务器的。如果不定义表单不能实现用户输入数据的提交。表单又两个重要的属性:
- Action:指定对表单进行处理的脚本的地址。(也就是说表单被提交到服务器端后由谁来处理)在action中指定处理者的URL。
- Method:
- Post:将表单中的信息作为一个数据块发送到服务器端。
- Get:默认方法。提交的数据被附加到URL(在ACTION中指定)的末端,作为URL的一部分发送到服务器端。
两者之间的区别:
HTTP 定义了与服务器交互的不同方法,最基本的方法是 get 和 post。事实上 get 适用于多数请求,而保留 post仅用于更新站点。根据 HTTP 规范,get 用于信息获取,而且应该是安全的和幂等的。所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,get 请求一般不应产生副作用。幂等的意味着对同一 URL的多个请求应该返回同样的结果。完整的定义并不像看起来那样严格。从根本上讲,其目标是当用户打开一个链接时,她可以确信从自身的角度来看没有改变资源。比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。反之亦然。post请求就不那么轻松了。post 表示可能改变服务器上的资源的请求。仍然以新闻站点为例,读者对文章的注解应该通过 post请求实现,因为在注解提交之后站点已经不同了(比方说文章下面出现一条注解);
在FORM提交的时候,如果不指定Method,则默认为get请求,Form中提交的数据将会附加在url之后,以?分开与url分开。字母数字字符原样发送,但空格转换为"+"号,其它符号转换为%XX,其中XX为该符号以16进制表示的ASCII(或ISOLatin-1)值。get请求请提交的数据放置在HTTP请求协议头中,而post提交的数据则放在实体数据中;
get方式提交的数据最多只能有1024字节,而post则没有此限制。
在表单里使用"post"和"get"有什么区别
在Form里面,可以使用post也可以使用get。它们都是method的合法取值。但是,post和get方法在使用上至少有两点不同:
1、get方法通过URL请求来传递用户的输入。post方法通过另外的形式。
2、get方式的提交你需要用Request.QueryString来取得变量的值,而post方式提交时,你必须通过Request.Form来访问提交的内容。
WEBFORM组成:
- 指令(Directives):可以放在页面的任何地方,作为习惯,通常那个放在文件开头。非必需。语法:<%@Cmd Attr="Value %>.
- @page:定义该页面被解析器和编译器处理的方式。每个页面只能包含一条@page指令。此可以省略不写(因为是asp.net的winform的默认指令)
- AspCompat:true/false。默认值false。设置为true时,可以是该page运行与一个STA线程,可以调用其他STA组件,性能较低。
- AutoEventWireUp:true/false。指定页面的事件是否自动传送,默认true。
- Buffer:true/false。指定HTTP响应缓冲是否有效,默认true
- ClassName:指定页面被请求时被自动动态编译的类。
- ClientTarget:指定用户代理或其他别名,一边ASP.NET服务器控件为该代理程序生成相应内容。
- CodePage:如果使用了运行页面的WEB服务器上默认代码页之外的代码页,则必需指定代码页,该代码页必需存在创建该页面的计算机上。
- ComplierOptions:编译器选项,指定编译该页时的行为。
- ContentType:指定响应的HTTP Content Type
- Debug:指定编译该页面时,是否加入调试信息
- EnableSeesionState:true/ReadOnly/false。是否以及何种方式使用Session状态。默认true
- EnableViewStateMac:true/false。指定是否在页面从客户端回传时运行计算机身份正确性检查。
- Errorpage:定义一个重定向的页面。
- Language:指定内敛代码和代码声明端中代码使用的语言
- ResponseEncoding:指定页面内容的编码方法
- Trace:指定页面跟踪是否有效,用在调试页面。默认false。
- TraceMode:当Trace设置true时,用于设置跟踪信息显示方式。SortByTime/SortByCategory。默认前者。
- @import:现实导入一个命名空间,是页面可以使用该命名空间中的类和接口。
- 代码声明段(Code Declaration Blocks):定义成员变量和方法,这些成员变量和方法是表示ASP.NET页面和用户控件的page类或UserControl类的成员。
语法:
<script runat="server" language="##" src="##">
Code……
</script>
其中language如果没有指定,则默认@page中的语言。(如果代码段存在用户控件,那么则默认是用户控件的language属性的值)
- 内联代码段(Code Render Blocks):定义了内联代码或者内联表达式,当页面生成HTML代码的阶段时这些代码和表达式将被执行。
语法:
内联代码段:<%inline code%>
内联表达式:<%=inline expression%>
内联代码使用Response对象输出HTML代码。在内联代码中企图输出"%>"是错误的,但可以string s="%"+">",然后输出s,Response.Write(s);
- 服务器端的注释(Server-Side Comments):格式:<%-- comments -->。提示:在代码段和内联代码段中可以使用代码语言所允许的注释语法,而不是服务器端注释语法。如:
<script runat="server" language="C#">
//C# line comment
/*C# block comment*/
</script>
- 服务器端包含指令(Server-Side Include Directive Syntax):服务器端报刊指令用来将指定文件的内容插入到asp.net页面中,语法:<!--#include file|virtual = filename-->。属性file指定了要包含的文件自爱服务器上的物理路径,可以是绝对的,也可以是相对的,但必需位于页面的统一路径下,或者页面所在的路径的子目录下。Virtual则指定了一个网站上的虚拟路径,和file一样可以绝对也可以相对。属性值为文件名filename,并以引号包含。包含的文件在任何动态代码被执行前处理,类似与C语言的#include机制
Anchor控件:该控件是HTML中几乎可以说是最常用的控件,ASP.NET中对这个控件的扩展主要是增肌了一个OnServerClick属性,指明当单击这个连接的时候可以产生什么样的事件。
- Href:URL地址,欲连接的地址
- Target:如果设帝国网页框架,则可将欲开启的连接开启到指定的框架。_blank,_self,_parent,_top或者具体值
- Title:鼠标移动到控件上的小提示
- Name:书签名称
Button控件:最重要的还是OnServerClick
InputButton:最重要的还是OnServerClick
InputCheckBox:复选框
InputRadioButton:单选框。此处需要注意的属性是name属性,当一组需要关联的时候,一定要将name属性设置一致。
HtmlImage:
- Src图片文件地址
- Width Height Border Align
- Alt:图片无法加载时显示的文字或者鼠标移动到图片上显示的文字
InputFile:包含内置的Browser按钮,利用它程序员可以将文件从客户端传到服务器的某个指定目录。
- Accept:获取或者设置用都好隔开的MIME编码列表,这个列表可限制浏览器允许用户选择的文件类型
- MaxLength:返回文件路径的最大长度。获取或者设置从客户端上传文件的最大路径长度
- PostedFile:用于访问客户端指定的上床文本。返回值是System.Web.HttpPostedFile。他可以访问要上传的文件,问了确保安全,并不会在各个请求过程中保留这个值
- Size:获取或者设置文件路径文本框的宽度
WEB服务器控件:
公共属性:
- AccessKey:快捷键
- Backcolor: BorderWidth Bordercolor Borderstyle Enabled Font Height Width TabIndex ToolTip Visible
具体控件:
- 用于文本输入和显示的内部控件:
- TextBox:可取代HTML中<Input Type="Text"/"Password">以及<TextArea>三种控件
- Table、TableRow、TableCell:
- BackImageUrl
- CellPadding
- CellSpacing
- GridLines设定表格的水平线或者垂直线是否出现
- HorizontalAlgin:设定水平对齐方式
- Rows:TableRow集合对象
- Label:
- 用于控制传送的内部控件:把控制权交给服务器或者其他页面。
- Panel:群组控件,可以让人们决定Panel中的控件是否要显示出来
- Button:标准的提交按钮控件。功能是出发接受者的Click事件。
- LinkButton
- ImageButton:
- HyperLink:
- 用于选择的列表控件
- CheckBox
- CheckBoxList
- DropDownList
- ListBox:对于CheckBoxList以及RadioButtonList的一个整合
- RadioButton:通过GroupName来绑定彼此之间的关系
- RadioButtonList:可以管理很多子项,让彼此的关系通过一个对象展现出来,从而方便管理且加快效率。
- ListItem:不可以独立存在,依附于RadioButtonList、DropDownList以及CheckBoxList控件存在,一个ListItem代表一个ListControl控件的选项内容。
Page.IsPostBack:检测页面是否是第一次加载,第一次加载则为false,否则为true。
AutoPostBack:以TextBox为例子,如果设置为true,则当使用者按下Enter或者Tab让光标离开该控件时,则出发OnTextChange事件,并触发Page_load事件。
ASP.NET常用内置对象:
- Request
- Response
- Application
- Session
- Server
Response对象:主要用于输出数据到客户端,其正确类别名称是HttpResponse,和Request一样,属于Page对象的成员,所以也是不用声明便可以直接使用的对象。
- Buffer 表明页输出是否被缓冲。
- CacheControl 决定代理服务器是否能缓存 ASP 生成的输出。
- Charset 将字符集的名称添加到内容类型标题中。
- ContentType 指定响应的 HTTP 内容类型。 默认值是Text/Html,也可以是用image/gif来表示gif图形。
- Expires 在浏览器中缓存的页面超时前,指定缓存的时间。
- ExpiresAbsolute 指定浏览器上缓存页面超时的日期和时间。
- IsClientConnected 表明客户端是否与服务器断开。
- Pics 将 PICS 标记的值添加到响应的标题的 PICS 标记字段中。
- Status 服务器返回的状态行的值。
- Cookies Cookie集合
- AppendToLog 在该请求的 Web 服务器日志条目后添加字符串。
- BinaryWrite 将给出信息写入到当前 HTTP 输出中,并且不进行任何字符集转换。
- Clear 清除任何缓冲的 HTML 输出。
- End 停止处理 .asp 文件并返回当前的结果。
- Redirect 将重指示的信息发送到浏览器,尝试连接另一个 URL。
- Write将变量作为字符串写入当前的 HTTP 输出
- Flush 立即发送缓冲的输出。
- Close 关闭客户端的联机
- AddHeader:从名称到值设置HTML标题
- ClearHeaderrs:将缓冲区中所有的页面表头清除
Request对象:对象在 HTTP 请求期间,检索客户端浏览器传递给服务器的值 。
- ApplicationPath:传回目前正在执行程序之伺服端的虚拟目录。
- Browser:传回有关客户端浏览器的功能信息
- ClientCertificate:传回有关客户端的安全认证信息
- ConnectionID:传回目前客户端所发出的网页浏览请求的联机ID
- ContentEncoding:传回客户端所支持的字符设定
- ContentType:传回目前需求的MIME内容类型
- Cookies:传回一个Cookie对象集合
- FilePath:目前执行网页的相对地址
- Files:客户端上传文档集合
- Form:有关窗体变量的集合
- Headers:有关HTTP标头的集合
- HttpMethod:传回客户端HTTP数据传输方式
- IsAuthenticated:传回HTTP联机是否有效
- QueryString:传回附属在网址后面的参数内容
主要方法:
- MapPath:传回实际路径 语法 MapPath(ByVal 虚拟路径 As String) As String
- SaveAs:将HTTP请求的信息存储到磁盘中。
- Get:服务器端采用QueryString("ParameterName")获取参数值(注意,此处得到的都是字符串,需要强制类型转换成需要的类型)
- Post:数据用Request.Form集合来读取。同样此处得到的都是字符串,需要根据实际情况强制转换。
- 使用环境变量:通过ServerVariables属性可以得到一个浏览器工作环境的对象,通过该对象的属性可以访问客户端的系统、主机IP等等详细信息。
- 获取浏览器信息:通过Browser属性可以获得一个浏览器的对象,从而可进一步访问其属性
Application对象:Application对象在整个应用程序的生存周期都是有效的,因而可以当作全局变量一样使用,也可以在多个页面之间共享。Application对象变量的生命周期止于IIS服务的关闭或者使用Clear方法清除。
语法:Application("varName")="value"
- Allkeys:返回应用年高中保存的公用对象的名字数组。
- Contents:返回this指针,主要是为了兼容ASP而保留
- Count:返回当前应用中保存的公用对象的数目
- Item:返回当因每个应用中保存的公用对象集合中的指定对象。Application.Item(VarName)=object。通常会省略Item协会曾Application(变量名)=要保存的对象。这里需要注意的是Application保存的对象是应用程序所共享,而.NET平台是一个多用户多线程的环境,因为在使用的时候要注意避免冲突。
- StaticObjects:返回在应用程序文件中形如:<object runat=server></object>定义的对象的集合。
- Add:加入一个对象到Application对象的Stat集合中。语法:Application.Add("name","value");
- Remove:根据标识从Application对象的Stat集合中删除。Appliaction.Remove("name");
- RemoveAll:全部清除
- Clear:作用和RemoveAll一样
- Get:根据名字或者下标来获得指定的对象元素。Application.Get("name");Appliaction.Get(0)
- Set:根据指定标识活下标修改值。Application.Set("name")=value;
- GetKey:根据下标获得标识名。Application.Getkey(0);
- Lock和Unlock方法:解决多线程冲突问题。
- Appliaction_onstart:Application对象的生命周期开始时触发的事件。该事件是在global.asa中定义实现体。
- Application_onend:Application对象的生命周期结束时触发的事件
- Application_BeginRequest:
- Application_EndRequest:
Session对象:存储跨网页程序的变量或对象。Seesion与Application的不同点是Session是针对单一网页使用者的,也就是说每个联机的计算机都有各自的Session对象变量,不同的联机之间无法互相存取。Session的生命周期止于联机计算机的离线,也就说当网页使用者关掉浏览器或者超过设定的Session变量对象的有效时间,Session对象变量就会自动消失。其使用方式与Application类似。
常用属性:
- All:返回全部的Session对象变量到一个数组
- Count:返回Session对象变量的个数
- Item:根据索引值或者变量名来回传或设定变量内容
- TimeOut:设定有效时间。
方法:
- Add:
- Clear
- Remove
- RemoveAll
事件:
- Session_Start
- Session_End
Server对象:
属性:
- MachineName:传回Server端计算机的名称,String
- ScriptTimeOut:用于传回请求超时的时间,Int
方法:
Cookie:类别名:HTTPCookie。在ASP.NET中采用的是面向对象的方法来创建Cookie,所有Cookie都是由HttpCookie类创建的。把需要在Cookie中保存的信息准备好之后,再用Reponse对象的AppendCookie方法,把这个Cookie写到客户端的硬盘上。对于每个Cookie最好不要大于4KB,因为每个cookie的设置都回导致数据在客户的计算机和服务器之间的传送,这样会增加网络的流量。从而导致网络的负担家中。此外不要把敏感的信息存储在这里。
- 创建永久性Cookie:Cookie的Expires属性,datetime类型,设置过期时间。
- 使用Cookie字典:Cookie.value.Add("key","value");
- 检索Cookie:写Cookie用的是Reponse对象,读则需要使用Request对象。Request.Cookies("CookieName")("key")
- 检测用户是否使用了Cookie
- 使用Session对象进行检查:Session中存储某些信息时,他可以在随后的页面中访问,如果后面的页面这个值不存在,则说明未开启cookie
- 通用方法:在客户端保存一Cookie,然后立即访问该Cookie,如果值一样,则开启,否则禁止。
- navigator.cookieEnabled
Asp.NET高级编程
Page类:
工作流程:HTTP请求到达->IIS识别ASPX文件请求->调用ASP.NET模块->ASP.NET模块将该页面放在ASP.mypage_aspx类中,生成一个心的类->新生成的类被实例化为一个CLR中的对象->在该对象上调用一种显示方法->该显示方法通过aspnet_isapi.dll向IIS返回相应HTML->IIS将得到的HTML作为HTTP响应返回提出请求的客户端。
Page类就是上述流程中动态生成的类。
命名空间:System.Web.UI
- 页面状态:Web表单与HTML表单的重大区别在于Web表单会保存很多状态信息,但HTTP是无状态的协议,如果由服务器端保存,则服务器容易超载。所以此处思想是让页面自己保存自己的状态,解决方案就是Page类的ViewState属性,所有页面在两次请求之间会自己保存自己的viewstate。
- 页面指令:
- @page指令
- @import指令 <%@import NameSpace="namespace"%>
- @Implement指令:可以在页面中实现一个.NET接口,当实现接口的时候,要确定页面支持接口所定义的属性方法和事件,者对于用户自定义控件的使用十分重要。
语法: <%@Implements Interface="interface"%>
- @Register指令:如果用户编写了自定义控件,就必需要告诉编译器有关这个控件的内容、位置等信息。如果不能给编译器以足够的信息,那么就会导致编译错误,这是需要使用@register指令。
语法:
<%Register TagPrefix="形容自定义控件实例的字符串",TagName="在页面中的控件名称" Src="控件的位置"%>用于写好的控件的引用
<%Register TagPrefix="形容自定义控件实例的字符串",NameSpace="命名空间" Assembly="可执行程序的名字"%>用于自行编写的.dll或者exe的引用。
- @Assembly指令:用于直接引用一个dll或者exe文件这样的配件,以便页面中的程序可以直接使用这个装配件中的定义的类和接口。语法:<%@Assembly src="pathname"%>或者<%@Assembly Name="assembleyname"%>
- @Reference指令:用于识别当前页面在运行期间应该动态编译和连接的页面或者控件
- 事件驱动:
典型事件:
- Page_Init:初始化工作
- Page_Load:加载工作
- Page_Unload:收尾工作
ASP.NET的其他WEB控件:
- 日历控件:
- 广告控件
验证控件