【Jsp精品源码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。
网学会员整理了Jsp精品源码-ASP.NET课件 传智播客 - 其它资料的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
—高级软件人才实作培训专家 ASP.Net 讲师:杨中科 北京传智播客教育 www.itcast.cnPDF 文件使用 quotpdfFactory Proquot 试用版本创建 www.fineprint.com.cn —高级软件人才实作培训专家 传智播客 传智播客.Net培训,三月只要 5800元。
http://net.itcast.cnPDF 文件使用 quotpdfFactory Proquot 试用版本创建 www.fineprint.com.cn —高级软件人才实作培训专家 课前说明 l 内容:掌握基于ASP.Net的Web开发,ASP.Net内部原理、状态 管理(Cookie、Session、ViewState等)、普通ASP.Net控件、 数据验证、母版、ListView/Repeater等数据绑定控件、AJAX 、 缓存、Membership、导航、自定义控件等。
l 目标:能够使用ASP.Net开发常见的动态网站功能,并且和Dom 、JQuery等客户端技术结合进行网站的开发。
l 参考书:《ASP.NET 3.5 揭秘》 l 注意:原理先行,对于ASP.Net来说弄明白了原理才能学得更快 。
会讲一些原理性的非常规用法代码,用※标识,不要学这种写 法。
l Java班先讲Servelet再讲
JSP,.Net也是先讲HttpHandler再讲 WebForm。
PDF 文件使用 quotpdfFactory Proquot 试用版本创建 www.fineprint.com.cn —高级软件人才实作培训专家 什么是ASP.Net l ASP.Net是一种动态网页技术,在服务器端运行.Net代码,动态 生成HTML。
可以使用JavaScript、Dom在浏览器端完成很多工 作,但是有很多工作无法在浏览器端完成,比如存储数据、访问 数据库、复杂的业务逻辑运算、安全性要求高的逻辑运算等。
l 演示第一个ASP.Net页面:加法计算器。
新建Web应用程序。
※ l 服务端控件和HTML控件的生成关系:在aspx页面中可以使用服 务端控件,简化开发,浏览器只认html,因此服务端控件会渲染 到浏览器成html,TextBox→ltinput typequottextquot/gt。
l 服务器控件不是新的控件,在浏览器端仍然是生成html标签。
服 务端控件虽然好用,但是也有缺点,并不是什么地方用服务器端 控件都好,具体后面讲。
PDF 文件使用 quotpdfFactory Proquot 试用版本创建 www.fineprint.com.cn —高级软件人才实作培训专家 Web应用程序和网站 l WebApplication(Web应用程序)和WebSite(网站)的区别, WebSite是为了兼容从ASP转过来的开发人员的习惯而存在的, 用起来简单,比如不需要创建命名空间、CS代码修改以后不需 要重启就能看到变化(无论是WebSite还是WebApplication,修 改aspx都不需要重启。
WebApplication每次修改以后点击【生 成解决方案】也能立即看到修改效果),但是不利于工程化开发 ,比如代码出错不容易发现,代码不分命名空间。
开发技术上没 有任何区别,只是开发、调试习惯不同而已。
l 方便开发不用每次调试都设定起始页,在项目的选项中设定【 Web】→启动操作→当前页面,这样当前激活的页就是起始页。
l 讲简单基础知识时用WebSite;讲高级技术和做项目的时候用 WebApplication。
PDF 文件使用 quotpdfFactory Proquot 试用版本创建 www.fineprint.com.cn —高级软件人才实作培训专家 请求→处理→响应 www.fineprint.com.cnPDF 文件使用 quotpdfFactory Proquot 试用版本创建 f —高级软件人才实作培训专家 自己动手写动态网站 l 入门1.html ltform actionquot入门1.ashxquotgt ltinput typequottextquot namequotusernamequot /gtltinput typequotsubmitquot /gt lt/formgt l 新建一个【一般处理程序】入门1.ashx, ProcessRequest中写 context.Response.ContentType quottext/htmlquot string username context.Requestquotusernamequot context.Response.Writeusername quotltfont colorredgt你好 lt/fontgtquotGuid.NewGuid l 每当用户请求访问ashx页面的时候,ProcessRequest方法就会被调用,在这里通过访问 context.Request获得访问者的请求参数等。
然后在ProcessRequest中通过context.Response向浏 览器发回数据给浏览器。
ProcessRequest结束之时就是服务器为这个浏览者本次访问服务完成之时 l 浏览器向服务器端提交数据,被提交数据的表单(input、select、textarea等)放到form中,form 中通过action属性设定表单被提交给哪个页面,为了在服务端取出表单项的值,需要在HTML中为表 单元素设定name属性,注意id是给JS操作Dom用的,name才是提交给服务器用的。
在服务器端用 context.Requestquotusernamequot来根据表单项的name来获得提交的属性值。
通过 context.Response.Write向浏览器输出处理后的显示HTML内容。
PDF 文件使用 quotpdfFactory Proquot 试用版本创建 www.fineprint.com.cn —高级软件人才实作培训专家 “返回”提交页面 l 如果还想返回提交页面,那么需要自己绘制。
context.Response.Writequot ltform action入门1.ashxgt ltinput typetext nameusername valuequotusernamequot /gtltinput typetext /gtltinput typesubmit namesb /gt lt/formgtquot l 并没有真的返回提交页面,只是看起来像罢了。
PDF 文件使用 quotpdfFactory Proquot 试用版本创建 www.fineprint.com.cn —高级软件人才实作培训专家 “返回”提交页面改进版 l 为了请求、返回的内容一样,将页面保存为一个htm模板文本,模板中有一些待填值的占位符,第一次进入 页面的时候就直接访问ashx,读取htm模板,将待填值占位符设置为空,然后输出到浏览器。
l 为了区分是第一次直接进入页面还是点击提交以后重新进入ashx,在form中增加一个隐藏字段:ltinput typequothiddenquot namequotispostbackquot valuequottruequot /gt,如果能够从Request中读取到ispostbacktrue就说明是 点击提交以后重新进入ashx,否则就是第一次进入ashx。
ispostback就是一个标志位。
l ASP.Net中将Web虚拟路径(/images/1.jpg)转换为磁盘全路径(d:/wwww/mysite/images/1.jpg)的方法是 HttpContext.Current.Request.MapPathquot/1/入门2.htmquot。
l 实现思路:在ProcessRequest中首先从Request中读取ispostback,如果读取到true,说明是提交进入的, 就加载模板,并且进行占位符用计算后的值替换,否则就将模板中的占位符清空直接输出给浏览者。
代码 见备注※ l 刚进入hello2.ashx的时候是直接向浏览器输出内容,用户在输出的内容中填入数值,再点击提交,服务器就 知道“提交回来了”(PostBack) l Http是请求、响应的模型,服务器不会来读取浏览器的网页,能够得到的就是客户端网页提交过来的数据。
l 如果访问Hello2.ashx,多次点击刷新,都是“直接进入” l 如果提交表单,再多次点击刷新,都是“提交进入” l 所有表单都是提交的以name为key,以value为值的内容,其他属性是不会被提交到服务器的。
l 文本框上次输入的值在提交表单后又显示出来并不是理所当然的,是开发人员帮着读取提交上来的值然后渲 染上去的。
这就是ASP.Net中ASPX和CS的关系。
用aspx重写这个程序,使用IsPostBack等属性,对比。
IsPostBack是依赖于ViewState的,所以禁用了页面的ViewState,IsPostBack永远为False。
PDF 文件使用 quotpdfFactory Proquot 试用版本创建 www.fineprint.com.cn —高级软件人才实作培训专家 Get与Post l 还可以设定form的method属性指定表单提交方式,get(默认值)是通 过URL传递表单值,post传递的表单值是隐藏到http报文中,url中看到 不。
l 点击typesubmit的按钮会自动提交表单。
l get和post的区别常考:get是通过url传递表单值,post通过url看不到 表单域的值;get传递的数据量是有限的,如果要传递大数据量不能用 get,比如typequotfilequot上传文章、typequotpasswordquot传递密码或者 lttextareagt发表大段文章,post则没有这个限制;post会有浏览器提示 重新提交表单的问题,get则没有加分的回答。
对于Post的表单重新敲 地址栏再刷新就不会提示重新提交了,因为重新敲地址就没有偷偷提交 的数据了 l Get方式URL数据格式。
服务端文件名后跟着“”,由于客户端可能向服 务器端提交多个键值对,键值对之间用“amp”进行分割,如果URL中有汉字 、特殊符号等,则需要对URL进行编码。
l 表单域只有设定了name的才会被提交给服务器(用get方式看的清楚) 。
如果给submit按钮设定name,那么按钮的value也会被提交给服务器PDF 文件使用 quotpdfFactory Proquot 试用版本创建 www.fineprint.com.cn —高级软件人才实作培训专家 数值自增※ l 实现input的自增:点击按钮input中的值自动增加,代码见备注。
点击刷新就一直是值不变, 只有点击提交才会变,分析原理。
用开发人员工具篡改文本框的值自增就从新的值开始了。
l 使用aspx重写input的自增。
l 练习:加法计算器。
常见错误:把htm设置成了起始页。
typesubmit才会自动提交表单, typebutton不会自动提交。
从ashx启动和从htm启动的区别 l 为什么单使用div在服务器取不出来值呢?因为不是服务器来读取客户的网页,而是浏览器收 集客户再表单中输入的字段,然后形成请求参数发给服务器处理程序,由于没有把div当前的 innerText发给服务器,所以服务器无法得知当前的值。
也不要幻想有办法能将div的 innerText提交给服务器,因为只有设定了name的input、textarea、select的value属性值才 会被提交给服务器。
l 实现div内文本的自增。
因为服务器不记得上次给浏览器的值是什么,而且不像input那样会 将上次的值重新提交回来,因此浏览器需要用一个隐藏字段将上一次的值保存下来。
代码见 备注 l 非表单元素无法将客户端的元素值传递给服务器端,即使是表单元素也只能传递value值, 对于其他属性值比如背景颜色、大小等也是无法传递的,因此对于这些值都要存在隐藏字段 中。
这就是ASP.Net中ViewState的实现原理。
l 其实div中的只是起到显示作用而已,使用IE的“开发人员工具”修改div的innerText,然后点击 按钮发现值并没有按照我们修改以后的递增。
而修改input版本的则有效果。
PDF 文件使用 quotpdfFactory Proquot 试用版本创建 www.fineprint.com.cn —高级软件人才实作培训专家 ViewState初探(重点,常考) l Label版本的值存到了ViewState中,TextBox版本的不用存,因为TextBox就是input, 自己就会提交给服务器,不需要隐藏字段 l 用asp.net重写Div文本自增(还要同时递增Label的宽度,注意Width的单位是Unit类型 ,不是简单的int) Label1.Text Convert.ToInt32Label1.Text1.ToString Label1.Width new UnitLabel1.Width.Value 10 l 查看生成的源代码,ASP.Net将所有隐藏内容统一放到了名字为__VIEWSTATE的隐 藏字段中,使用序列化算法将所有隐藏内容放到一个字符串中。
点击几次在使用 ViewStateDecoder这个工具查看ViewState内容,发现了确实将这些改变的内容放到 了ViewState中。
存储非表单域、非value值的容器。
l 禁用ViewState的方法,禁用单个控件的ViewState设定enableviewstatefalse,禁用 ViewState以后TextBox版本不受影响,Div版本受影响,因为input的value不依靠 ViewState。
禁用整个页面的,在aspx的Page指令区加上EnableViewStatequotfalsequot 。
内网系统、互联网的后台可以尽情的用ViewState。
l 回答ViewState原理的时候:说Input版本(TextBox)自增和Div版本(Label)的不同 。
(完美!!!)PDF 文件使用 quotpdfFactory Proquot 试用版本创建 www.fineprint.com.cn —高级软件人才实作培训专家 无状态Http l Http协议是无状态的,不会记得上次和网页“发生了什么”(故事 :24小时记忆)。
服务器不记的上次给了浏览器什么,浏览器需 要记住这些值(input就是记到value中,对于其他的值就要放到 隐藏字段中,比如ViewState),下次再提交服务器的时候(请 在我的宽度基础上增加10,)就要把上次的值提交给服务器,让 他想起来。
如果要知道上一次的状态,一个方法是在对浏览器响 应结束之前将状态信息保存到页面表单中,下次页面再向服务器 发出请求的时候带上这些状态信息,这样服务器就能根据这些状 态信息还原上次的状态了,类似于去看病的病历本。
l 状态信息保存在隐藏字段中的缺点:加大网站的流量、降低访问 速度、机密数据放到表单中会有数据欺骗等安全性问题。
故事: 自行打印存折,因为余额不是写到存折这个隐藏字段中的,唯一 的关联就是卡号。
要把机密数据放到服务器,并且区别不同的访 问者的私密区域,那么就要一个唯一的标识。
PDF 文件使用 quotpdfFactory Proquot 试用版本创建 www.fineprint.com.cn —高级软件人才实作培训专家 Cookie l 表单是和页面相关的,只有浏览器端提交了这些数据服务器端才能得到 。
而有时候希望在服务端任意的地方存取一些和访问者相关的信息,这 时候就不方便将这些信息保存到表单中了,因为如果那样的话必须随时 注意在所有页面表单中都保存这些信息。
Cookie是和站点相关的,并且 每次向服务器请求的时候除了发送表单参数外,还会将和站点相关的所 有Cookie都提交给服务器,是强制性的。
Cookie也是保存在浏览器端的 ,而且浏览器会在每次请求的时候都会把和这个站点的相关的Cookie提 交到服务器,并且将服务端返回的Cookie更新回数据库,因此可以将信 息保存在Cookie中,然后在服务器端读取、修改。
服务器返回数据除了 普通的htmlm数据以外,还会返回修改的Cookie,浏览器把拿到的 Cookie值更新本地浏览器的Cookie就可以。
l 哪怕请求jpg、js、css这种文件也会带着Cookie,因为服务器端可能要 进行Session的操作,比如判断是否登录。
互联网优化的案例:图片服 务器和主站域名不一样,降低Cookie流量的传输。
面试时聊网站调优 l 案例,一个页面设置Cookie,一个页面读取Cookie 设置值的页面:Response.SetCookienew HttpCookiequotUserNamequot TextBox1.TextPDF 文件使用 quotpdfFactory Proquot 试用版本创建 www.fineprint.com.cn —高级软件人才实作培训专家 Session原理 l private int i 0//每次请求来了都会new一个新的实现了IHttpHandler接口的类“变量1”的实例进行处 理,用完了就GC掉,所以不会保持上次的值。
(有时会考) l Cookie不能存储过多信息。
如果想保存大量的数据,可以保存一个Guid到Cookie中,然后在服务器 中建立一个以Guid为Key,复杂数据为Value全局Dictionary。
static字段对于不同用户也只有一份, 因此用static实现多用户共享数据。
代码见备注※。
l ASP.Net已经内置了Session机制,把上面的例子用ASP.NetSession重写。
不要放太多的对象到 Session,Session会有超时销毁的机制,发帖(服务器不可能知道浏览器是否在开着,什么时候关 闭),发帖计时,在线时间统计,靠请求来判断是否活着。
Cookie是存在客户端,Session是存在 服务器端,目的是一样的:保存和当前客户端相关的数据(当前网站的任何一个页面都能取到 Session、Cookie)。
不能放太大的数据,放的数据是object。
l 可以看到Session机制并不是Http协议规定的,是ASP.net实现的,现在PHP、
JSP等大部分服务端 技术都实现了Session,原理都差不多。
l 案例:用Session实现验证码。
HttpHandler要能够操作Session,要实现IRequiresSessionState接 口。
为什么每次点击值都变化?很正常,因此每次页面点击页面都会刷新,就向ashx重新请求图片 .