黑马程序员-ASP.net读书笔记(一)

来源:互联网 发布:c语言if语句的嵌套 编辑:程序博客网 时间:2024/06/01 07:22

------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------


1.WebSite(网站)和WebApplication(Web应用程序)之间的区别,在改动cs文件中的代码的时候,前者不需要重新编译,而后者需要;前者没有命名空间,不同的页面之间中的类的调用需要是public修饰,每个cs文件生成一个dll,而后者有命名空间,不同的页面之间中的类的调用只要不是private修饰就行,所有cs文件生成一个dll;前者适用于小项目,因为需要运行到某处才能查错,而后者适用于大项目,编译时就可以查错;

2.<!--提交到服务器的表单中的元素需要设置name属性,它表示这个元素的名称,name是给服务器使用id属性是给DOM使用的-->

3.关于判断用户是否为第一次进入:增加一个hidden表单元素,然后根据客户端是否发送了这个表单元素的值来判断用户是否为第一次进入;
eg.string isPostBack = context.Request["isPostBack"];  //请求获取文本框中输入的值,当第一次进入的时候将无法获取该元素的值;(原因:因为在客户端没有请求,那么也就没有表单提交,那么也就没有所提交的数据,也就无法获取该文本框中的值,但如果客户端第一次访问的时候就在后面发送了这个值,那么也就可以接收到这个值,也就可以获取)
        if ( isPostBack == "给的默认值")
        {略}

4.所有表单元素都是以name为key,以value为key的值,其它属性及其值都不会提交到服务器;

5.get和post方式的区别:
get方式是通过url来传递表单值,适用于小数据量,不加密;
post方式是通过http报文来传递表单值,适用于大数据量和安全性要求高的数据,加密;

6.通过表单传输过来的数据都是字符串,有时需要转换,当要传输数据回到客户端时,也是字符串,需要再转回来;

7.TextBox1.Width = new Unit(TextBox1.Width.Value + 10);   //文本框的长度自增,注意这里使用的是一个Unit的对象来赋值;

8.在page标签中,加入EnableValueState="false"可以禁用页面中元素的ValueState;(那些依赖于ValueState传输的数据则不会被传输,如lable的text,Textbox的宽度等)

9.Asp.net内置对象:
Page对象,Page对象其实就是aspx文件,它又称为窗体面.
Page_Init事件,用于初始化所有值或程序.
Page_Load页面加载事件.
Page_DataBind数据绑定事件,在整个页面级别调用DataBind方法时被触发.
Page_Unload页面呈现或加载后被触发.
Page_Error当处理过程中产生错误时触发;
(初始化事件在页面加载事件之前发生)

Response对象,是从System.Web命名空间中的HttpResponse类中派生出来的,CLR会根据用户的请求信息创建一个Respose对象,用于回应内容的报头\服务器端的信息\输出制定的内容;Butter属性,设置为ture时将启用服务器端的缓存功能,此时,服务器会将这个页面处理完成后再传给客户端,设置为false时,服务器会边处理边传递数据;
Write方法,用于向浏览器发送指定的文本内容;
Redirect方法,用于将客户端重定向到新的URL,常用于根据某条件将用户引向不同页面的情况;

Request对象,是从System.Web命名空间中的HttpResponse类中派生出来的,客户端请求服务器时CLR将客户端请求的信息封装在Request对象中,包括报头(浏览器相关信息等)\请求方法(get或post)\参数名称和参数值;
UserHostAddress属性记录的是用户的IP地址(eg.192.168.0.6);
Form属性,用于记录来自表单中的数据,实现两个页面之间的数据传递;(使用Post方式时)
QueryString属性,用于记录来自请求URL地址中?号后面的数据,实现两个页面之间的数据传递;(使用Get方式时)
Browser属性,用于记录客户端浏览器及OS的信息;

Application对象,用于在服务器端保存所有客服端所共享的数据信息,对其操作时针对所有客户端;(实现不同页面之间的数据共享)

Session对象,用于在服务器端保存单个客户端的数据信息,对其操作时针对单个客户端;(实现不同页面之间的数据共享)

Server对象,提供访问服务器信息的方法和属性;
MapPath方法,将网页的URL路径转换成服务器的物理路径;
Transfer方法,类似于Response对象的Redirect方法,用于重定向到另一个页面中(但从浏览器地址栏中可以观察到两者有所不同);
HtmlEncode方法,将括号中的字符直接输出,不再视为Html标记,(eg.Response.Write(Server.HtmlEncode("<h3>这里的标记和内容将直接输出</h3>")))
MachineName属性,记录的服务器名;

Cooike对象,记录特定用户有关会话和应用程序的信息(只能是字符串形式),保存在客户端形成一个文本文件,可设定其生命周期,它有两种:
临时Cooike(Session Cooike),一旦Session会话结束它将自动消失;
持久性Cooike,在生命周期结束后消失;
(注意:一个Cooike对象可有多个属性及其属性值)
(HttpCookie coo = new HttpCookie(""))
(coo.Values.Add("属性名","属性值"))
(Response.Cookie.Add(coo))

Cache对象,一种客户端的缓存技术,将访问服务器过程中的一些信息保存在本地计算机中,加快第二次访问的速度,这些信息就存在Cache对象中;
Get()方法读取Cache对象中的值(可以不使用此方法而直接读取值);
Remove()方法删除Cache对象中的值;
(注意:下面两条语句缺一不可,对应的属性名和属性值相同)
(Cache["属性名"]="属性值";)
(Cache.Insert("属性名","属性值"))

10.Global.asax文件,可以看作是一个全局类,此文件且只允许一个.

11.文件上传(简单)示例:
if(FileUpload1.HasFile)
{
    string path = Server.MapPath("文件存储的路径");    //这里以根目录为基础的相对路径;
    string fileEx = System.IO.Path.GetExtension(FileUpload1.FileName).ToString();//获取文件名;
    string[] allEx = {"gif","jpg","png"};//设置允许上传的文件类型;
    FileUpload1.PostedFile.SaveAs(path + FileUpload1.FileName);//将文件拷贝到服务器指定位置;
}

12.数据验证控件:
RequiredFieldValidator必填内容验证控件,如果为空,则返回提示信息;(ControlToValidate属性用于绑定到具体某控件上)
RangeValidtor验证范围控件,可限制数字,字母,日期等的范围;
RegularExpressionValidtor正则表达式验证控件,控制输入数据的格式;
CompareValidtor将两个控件的值进行比较的验证,如检查两次输入的密码是否一致;

13.导航控件,用于控制在一个网站中页面之间的跳转;
SiteMapPath站点地图创建页的集合的控件,使用此控件会自动创建一个.sitemap的XML文件;
Menu菜单控件;    
树形控件,使用Treeview控件和XML文件来实现树形列表,常用于内容分类的功能导航;

14.Web调试:
页面级跟踪,使用<%@Page.....Trace="true"%>可以启用页面级跟踪;
应用程序级跟踪,在Web.config文件中,将trace节点的localOnly属性值设为false;
(默认情况下,只能进行本地应用程序级别的跟踪,而不能通过远程的方式查看服务器上运行的应用程序状态)
(Web.config文件中区分大小写)
200,成功;
301,请求页面被永久转移;
302,请求页面被暂时转移;
307,临时重定向;
400,错误请求;
401,未认证;
403,禁止;
404,未找到;
408,请求超时;
500,内部服务器错误;(处理过程发生异常)
502,网关无效;
503,访问人数达到上限;

15.动态编译和预编译:
动态编译,直接将网站复制到服务器;
预编译,使用Visual自带的预编译工具Aspnet_compiler.exe,预编译之后再复制到服务器,这种方式可以加快用户请求的响应时间,对源代码进行了封装,保护了知识产权;

16.web应用程序的安全性:
尽量使用Windows NTFS文件系统,避免使用FAT32格式;
关闭不使用的端口和服务;
运行监视入站和出站通信的病毒检查程序,使用防火墙;
定期安装一些软件的最新安全补丁程序;
检查操作系统事件日志记录,查找是否有可疑活动;

17.WebService是一种应用程序(文件后缀名为asmx),其作用是向用户提供功能,并以受控的方式提供一些服务和数据访问.在局域网或Internet上桌面应用程序和Web应用程序都可以调用WebService提供的服务,它也实现了服务器对数据库的安全访问;
当使用发布在网络上的WebService时,需要添加Web引用;

18.char(nchar)存取的速度要比varchar(nvarchar)存取的速度要快;

19.虚拟路径:(推荐使用"~/"的形式)
"/"表示网站根目录,也就是网址/...;
"../"表示上级目录;
"./"表示当前目录;
"~/"表示应用的根目录,也就是网址/website1/...

20.路径拼接的几个相关方法:(静态类VirtualPathUtility提供了相关方法)
VirtualPathUtility.ToAbosulte("~/a/b.aspx")得到的结果为应用的根目录:/website1/a/b.aspx;
VirtualPathUtility.AppendTrailingSlash("")判断路径末尾是否有"/",如果没有就加上,如果有就保持原样,返回末尾带"/"的路径;
VirtualPathUtility.Combine("","")将两个路径合并;
VirtualPathUtility.GetDirectory("")返回虚拟路径的目录部分;(~/a/c.htm的目录部分即为~/a/)
VirtualPathUtility.MakeRelative("","")计算两个虚拟路径的相对路径;
VirtualPathUtility.ToAbsolute("")转换为绝对路径;

21.HTML控件在服务端不会被做任何处理,也不会进行语法的检查,不像服务端控件一样会被检查和渲染;
加上runat=server的HTML控件,运行在服务端,会被渲染,可以像服务端控件一样的使用它;

22.C#中当字符串为多行文本时,前加上一个@;

23.Session使用:
不宜放太大太复杂的数据到Session中;
Session具有超时自动销毁机制;
存放的都是object类型,需必要的类型转换;

24.在ashx页面中使用Session需要实现System.Web.SessionState.IRequiresSessionState接口;

25.img标签的src属性可以是一张ashx页面,只要返回的是一张图片就可以显示;

26.网页中的每一图片,js文件,css文件都是一个单独的请求;

27.GET /ASP.NET%E7%BD%91%E7%AB%99/%E9%AA%8C%E8%AF%81%E7%A0%81%E6%B5%8B%E8%AF%95.aspx HTTP/1.1    //表示使用get方式请求;
Accept: */*
Accept-Language: zh-cn        //客户端本地语言类型;
Accept-Encoding: gzip, deflate    //支持gzip, deflate两种压缩算法类型;
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; InfoPath.2; .NET4.0C; .NET4.0E)    //浏览器信息;
Host: localhost:3186        //请求网址;
Connection: Keep-Alive        //Keep-Alive表示建议保持连接;
Cache-Control: no-cache

HTTP/1.1 200 OK        //200表示成功;
Server: ASP.NET Development Server/10.0.0.0    //web服务器版本;
Date: Tue, 31 Jul 2012 15:05:58 GMT        //日期;
X-AspNet-Version: 4.0.30319            //asp.net的版本;
Set-Cookie: ASP.NET_SessionId=pjdclewe2ttoemew0cgc5ysh; path=/; HttpOnly    //设置客户端cookie;
Cache-Control: private
Content-Type: text/html; charset=utf-8        //表示
返回的是text/html类型,编码为utf-8;
Content-Length: 950
Connection: Close

28.超链接多用于get请求(onclick也可以实现post请求);
按钮多用于post请求,也可以ge请求;
注意:如果超链接实现get请求可以右键在新窗口中打开;
如果超链接实现post请求就不能在新窗口中打开;
(只要是post请求都有可能产生重复提交的问题)

29.web开发的原则:
1.最小权限原则,只允许用户做什么;
2.客户端能做的尽量不要在服务端做;
3.客户端验证不可信原则;
4.不要将敏感信息放在客户端;(服务端超链接控件如果设置为了false,那么这个控件根本不会渲染到客户端浏览器,在客户端改变为true并不能将其显示)
5.XSS漏洞;(不要轻信用户提交上来的数据,数据中可能存在不安全代码)

30.HttpUtility.UrlEncode(); //将字符串转化为URL编码;
HttpUtility.UrlDecode(); //将URL编码转化为字符串;

31.Literal控件,它有一个Mode属性,可以设置其文本显示的模式,如果设置为Encode,则可以原封不动的进行输出;

32.虚拟路径:
"../"表示上级目录;
"./"表示当前目录;
"~/"表示应用的根目录(注意:只有服务端控件HyperLink才认),也就是网址/website1/...

33.路径拼接的几个相关方法:(静态类VirtualPathUtility提供了相关方法)
VirtualPathUtility.ToAbosulte("~/a/b.aspx")得到的结果为应用的根目录:/website1/a/b.aspx;
VirtualPathUtility.AppendTrailingSlash("")判断路径末尾是否有"/",如果没有就加上,如果有就保持原样,返回末尾带"/"的路径;
VirtualPathUtility.Combine("","")将两个路径合并;
VirtualPathUtility.GetDirectory("")返回虚拟路径的目录部分;(~/a/c.htm的目录部分即为~/a/)
VirtualPathUtility.MakeRelative("","")计算两个虚拟路径的相对路径;
VirtualPathUtility.ToAbsolute("")转换为绝对路径;

原创粉丝点击