




已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
WebForm cs可以调用aspx中的runat server的控件 根本原因 aspx中也可以访问cs中定义的非私有的成员 根本原因 还可以编写复杂的C 代码 for等所有C 代码都可以写在aspx中 不推荐 前面后面在当前位置输出表达式的值的时候使用 不要丢了 相当于在当前位置调用Response Write UserName 使用的函数 代码相当于在这个位置调用函数 执行代码 注意aspx中调用cs的只能是非私有成员 非private修饰 因为继承关系 中的代码是运行在服务器端的 是C 语法 在服务端运行完成才输出到浏览器 其他部分是运行在浏览器端的 是html JavaScript语法 前台文件和后台文件在运行的时候是两个分开的类 前台文件类继承于后台文件类 北京传智播客教育 ASP NETWebForm和状态的保持 讲师 邹华栋 既然有了Ashx 为什么还要有Aspx 如果每次输出网页都一般处理程序 ashx 的话太痛苦了 所以一般生成html的时候都直接创建aspx Web窗体 WebForm 新建aspx页面 代码结合图片分析 前后台文件运行次序 WebForm介绍 WebForm分为两个文件aspx和aspx csaspx是页面模板 是页面描述文件 就是html js css的内容 和aspx cs结合的更好 不用像一般处理程序那样程序员自己去输出HTML字符串或读取填充模板 控件都是定义在aspx中 内联的JavaScript CSS也是写在aspx中的 前台页面上的 Page指令集 服务端的C 代码是定义在aspx cs中 aspx控制页面长相 cs控制程序逻辑 这种 前aspx后cs 的方式就被称为CodeBehind 代码后置 强调 后台页面可以把Page Load看成是WinForm里的Load事件 最先运行 后台向前台输出内容 1 直接在后台通过Response Write 内容 aspx中也可以访问cs中定义的非私有的成员缺点 全都输出在页面的最上面 2 使用在前台页面指定输出 可以编写复杂的C 代码 for等所有C 代码都可以写在aspx中 不推荐 例如 aspx cs dll之间的关系 1 我们写的网站 在运行的时候其实都会被编译成程序集 页面会被编译成类 2 程序集在哪呢 在WebForm的页面中执行下面的代码Response Write this GetType Response Write this GetType Assembly Location 使用Reflector打开这个临时dll 老师带领同学看 3 小结 aspx最终也会生成一个类 这个类是继承自aspx cs的类查看反编译以后的代码 可以看到就是编译生成了普通的 Net代码 因为aspx生成的代码是cs类的子类 所以就明白了为什么 aspx中调用cs的成员级别必须是protected或者public 不能是private的 小练习 注册 填写用户名和密码 登陆练习 不允许使用服务器控件 只能用webform结合html 登录 用户打开登录页面 填入用户名密码 点击 登录 按钮 浏览器将用户输入的用户名 密码发送给网站服务器 网站服务器让负责处理登录请求的ASP Net程序来处理这个登录请求 处理程序判断用户名 密码是否正确 然后将判断结果返回给浏览器 开发一个登录页面需要做两个工作 1 显示在浏览器中的页面 Dom特效 和C 代码没关系 也就是前端 前台 页面 相当于这个页面要生成的HTML代码模板 2 处理浏览器请求的服务器端代码 C 代码 也就是后台代码 画图区分第一次请求和之后的提交 练习 练习 做一个加法计算器步骤 1 新建网站2 添加新建项 Web窗体 Cul aspx 3 打开Cul aspx 进入设计视图 从工具栏选择html控件拖入到页面适当的位置 可以使用适当的HTML代码布局 Table 5 在Form Load事件中编写代码 WebForm的运行流程 1 整体运行流程和ashx一样2 不同之处 调用了Page类的ProcessRequest方法创建了页面控件树 后面讲 执行了页面生命周期 PageLoad和Render 老师带开源码 3 ASP NET运行图 Request其它成员 1 Request UrlReferrer请求的来源 可以根据这个判断从百度搜的哪个关键词 防下载盗链 防图片盗链 可以伪造 比如迅雷 本图片仅供如鹏网内部交流使用 使用全局一般处理程序 2 Request UserHostAddress获得访问者的IP地址 通过Socket获得的 3 Request MapPath virtulPath 将虚拟路径转换为磁盘上的物理路径 Request MapPath a b aspx 就会得到D 2008 WebSites WebSite4 a b aspxServer MapPath里就是调用的Request MapPath Response其它成员 响应的缓冲输出 为了提高服务器的性能 ASP Net向浏览器Write的时候默认并不会每Write一次都会立即输出到浏览器 而是会缓存数据 到合适的时机或者响应结束才会将缓冲区中的数据一起发送到浏览器 Response对象的主要成员 1 Response Buffer Response BufferOutput 经过Reflector反编译 发现两个属性是一样的 Buffer内部就是调用的BufferOutput 这个属性用来控制是否采用响应缓存 默认是true 2 Response Flush 将缓冲区中的数据发送给浏览器 这在需要将Write出来的内容立即输出到浏览器的场合非常适用 案例 大批量数据的导入 显示正在导入第 条数据 用Thread Sleep模拟耗时 3 Response Clear 清空缓存区中的数据 这样在缓存区中的没有发送到浏览器端的数据被清空 不会被发送到浏览器 4 Response ContentEncoding输出流的编码 5 Response ContentType输出流的内容类型 比如是html text html 还是普通文本 text plain 还是JPEG图片 image JPEG Response其它成员 5 Response OutputStream输出流 在输出图片 Excel文件等非文本内容的时候要使用它6 Response End 终止响应 将之前缓存中的数据发给浏览器 End 之后的代码不会被继续执行 End方法里调用了Flush 方法 在终止一些非法请求的时候 比如盗链等可以用End 立即终止请求 Server属性 Server属性是HttpServerUtility的一个实例 它提供对服务器上的方法和属性的访问 Server对象 HtmlEncode方法和HtmlDecode方法 Execute方法和Transfer方法 UrlEncode方法和UrlDecode方法 MapPath方法 取得文件的物理路径 执行另一个页面的脚本 将文本编码成可以在浏览器中可正确浏览的格式 URL编码和解码 Server HttpServerUtility Server是上下文对象context的一个属性 是HttpServerUtility类的一个对象Server HtmlDecode Server HtmlEncode Server UrlEncode Server UrlDecode 是对HttpUtility类中相应方法的一个代理调用 推荐总是使用HttpUtility 因为有的地方很难拿到Server对象 而且Server的存在是为以前ASP程序员习惯而留的 别把HtmlEncode UrlEncode混了 UrlEncode是处理超链接中的中文问题 HtmlEncode是处理html代码的 还是推荐用HttpUtility HtmlEncode Server Transfer path 内部重定向请求 Server Transfer JieBanRen aspx 将用户的请求重定向给JieBanRen aspx处理 是服务器内部的接管 不能重定向到外部网站 浏览器是意识不到这个接管的 不是象Response Redirect那样经历 通知浏览器 请重新访问url这个网址 和浏览器接到命令访问新网址的过程 是一次http请求 因此浏览器地址栏不会变化 因为是内部接管 所以在被重定向到的页面中是可以访问到Request Cookies等这些来源页面接受的参数的 就像这些参数是传递给他的 而Redirect则不行 因为是让浏览器去访问的 注意Transfer是内部接管 因此不能像Redirect那样重定向到外部网站 常考 Response Redirect就可以重定向到外部网站 不能内部重定向到ashx 否则会报错 执行子请求出错 Server MapPath 无状态Http 通俗 一个浏览者发出的请求都是由实现了IHttpHandler接口的对象进行响应 由于下次访问不一定还是上次那个对象进行响应 上次响应完毕对象可能已经被销毁了 写的类变量值早就不存在了 因此不要将状态信息保存到类变量中 例子 编写一个aspxprivateinti publicvoidCount Response ContentType text plain Response Write i 多次刷新我们发现 变量根本不会记忆上次的值 无状态Http 画图理解什么是无状态 无状态的根本原因是 浏览器和服务器使用Socket通信 服务器将请求结果返回给浏览器后 会关闭当前Socket连接 而且服务器会在处理页面完毕后销毁页面对象 应用层面的原因是 浏览器和服务器之间通信都遵守HTTP协议 Http协议是无状态的 不会记得上次和网页 发生了什么 故事 24小时记忆 服务器不记得上次给了浏览器什么 对网站造成的影响 如果用户录入了一些信息 当跳转到下一个页面时 数据丢失 再也不能获得那些数据 如果要知道上一次的状态信息 我们就得把这个状态信息记录在某个地方 a 服务器端b 浏览器端c 表单元素中 如 隐藏域 Http报文 画图 思考 如果要保持用户登录状态怎么办 ASP NET中的状态 信息 保持方案 客户端本质上3种 隐藏域 Cookies QueryString url name 1 常用的状态 信息 保持方式 重点 ViewState ASP NET的 aspx页面特有 页面级的 就是在页面上的一个隐藏域中保存客户端单独使用的数据的一种方式 服务器端控件的值都自动保存在ViewState中 Cookie HTTP协议下的一种方式 通过该方式 服务器或脚本能够在客户机上维护状态信息 就是在客户端保存客户端单独使用的数据的一种方式 就像你的病历本一样 医院直接给你带回家 Session 现在指的是进程内Session 在服务器端保存客户端单独使用的数据的一种方式 就像银行账户 钱都存在银行里 你就拿一张银行卡 SessionId 回家 Application 在服务器端保存共享数据的一种方式 就像银行的单人公共卫生间 谁进去都行 但一次去一个 进去了就锁上门 出来再把锁打开 ViewState 页面级 两种使用方式 作用域 页面级1 用户数据保存方式 ViewState myKey MyData 读取数据方式 stringmyData if ViewState myKey null myData string ViewState myKey 注意 ViewState不能存储所有的数据类型 仅支持可序列化对象 2 非单值服务器控件的状态也自动保存在ViewState中列入 下拉框 文本框是单值控件 所以不会保存在ViewState中 使用ViewState的前提 页面上必须有一个服务器端窗体标记 服务器在接收到用户请求一个页面后 会自动在请求报文中找看是否包含 VIEWSTATE的隐藏域 如果有 则将中间的值解码后添加到页面的ViewState属性中 服务器在输出的时候 也会自动的将ViewState中的值添加到表单里名叫 VIEWSTATE的隐藏域中VIEWSTATE适用于同一个页面在不关闭的情况下多次与服务器交互 ViewState图 服务器将ViewState里保存的值经过Base64编码后 自动添加到页面的隐藏域中 使用ViewState可以方便的在服务器端将数据输出保存到客户端页面的一个隐藏域中 ViewState禁用 禁用ViewState的方法 禁用单个控件的ViewState设定enableviewstate false 禁用ViewState以后TextBox版本不受影响 Div版本受影响 因为input的value不依靠ViewState 禁用整个页面的 在aspx的Page指令区加上EnableViewState false 内网系统 互联网的后台可以尽情的用ViewState 当某些控件的某些属性不属于浏览器表单的提交范围时 fw将会把这些属性添加到ViewState中保存 WebForm的IsPostBack依赖于 ViewState Cookie 小甜饼 病历本 Cookie是一种能够让网站服务器把少量数据 4kb左右 储存到客户端的硬盘或内存 并且读取出来的一种技术 当你浏览某网站时 由Web服务器放置于你硬盘上的一个非常小的文本文件 它可以记录你的用户ID 浏览过的网页或者停留的时间等网站想要你保存的信息 当你再次通过浏览器访问该网站时 浏览器会自动将属于该网站的Cookie发送到服务器去 服务器通过读取Cookie 得知你的相关信息 就可以做出相应的动作 如在页面显示欢迎你的标语 或者让你不用输入ID 密码就直接登录等等 浏览器访问一个站点时 只将属于当前站点的Cookie发过到服务器 根据域名 没必要把每家医院的病历本都带过去 Cookie不兼容浏览器 不同浏览器不共享Cookie文件数据 最好是将要保存的内容在服务器端加密 然后再写入cookie 为什么 在硬盘中存放的位置与使用的操作系统和浏览器密切相关 浏览器保存Cookie有两种方式 1 浏览器的内存中 2 浏览器所在的电脑的硬盘中 为将要写入到浏览器的Cookie对象设置失效时间 cook Expires DateTime Now AddMinutes 5 设置cook5分钟后失效开发场景 常用于登录和保存用户最近浏览商品从浏览器发来的Cookie的Expires属性值是无效的 浏览器在向服务器发送Cookie的时候 没有将Cookie的失效时间发送过去 Cookie图 注意 Cookie储存在客户端 Cookie的操作 服务器设置Cookie HttpCookiecok newHttpCookie uId 10001 键 值 cok Expires DateTime Now AddDays 18 设置失效日期 现在之后的18天后context Response Cookies Add cok 添加到响应中服务器获得客户端传来的Cookie stringstrUName context Request Cookies uId Value 从请求中获得Cookie 登录示例 Cookie原理 具体如何往返的 1 普通GET请求 无Cookie 2 服务器通过响应报文头里的set cookie向浏览器设置Cookie信息 3 浏览器通过请求报文头里的Cookie传递浏览器存储的Cookie信息 提问 如果服务器两次都输出同一个名称的Cookie 浏览器会怎么办 如果服务器输出两个不同名的Cookie 浏览器怎么办 如何删除浏览器Cookie 补充 cookie Path 为指定的文件夹生成Cookie cookie Domain 域 域名 Response Cookies和Request Cookies中间的关系 有共用部分 Cookie注意 表单是和页面相关的 只有浏览器端提交了这些数据 服务器端才能得到 而有时候希望在服务端任意的地方存取一些和访问者相关的信息 这时候就不方便将这些信息保存到表单中了 因为如果那样的话必须随时注意在所有页面表单中都保存这些信息 Cookie是和站点相关的 并且每次向服务器请求的时候除了发送表单参数外 还会将和站点相关的所有Cookie都提交给服务器 是强制性的 Cookie也是保存在浏览器端的 而且浏览器会在每次请求的时候都会把和这个站点的相关的Cookie提交到服务器 并且将服务端返回的Cookie更新到硬盘 因此可以将信息保存在Cookie中 然后在服务器端读取 修改 服务器返回数据除了普通的html数据以外 还会返回修改的Cookie 浏览器把拿到的Cookie值更新本地浏览器的Cookie就可以 哪怕请求jpg js css这种文件也会带着Cookie 因为服务器端可能要进行Session的操作 比如判断是否登录 互联网优化的案例 图片服务器和主站域名不一样 降低Cookie流量的传输 面试时聊网站调优Cookie的缺点和表单一样 而且还不能存储过多信息 客户端 服务器端设置的Cookie双方都能读 练习 登录练习 Session Session提供了一种把信息保存在服务器内存中的一种方式 它能存储任何数据类型包括自定义对象 每个客户端的Session是独立存储 Session对象用于存储有关用户的信息 在整个用户会话过程中 浏览器关闭之前 都会保留此信息 保存SessionId的cookie丢失之前 当用户在应用程序中从一个网页浏览到另一个网页时 存储在Session对象中的变量不会被丢弃 Session只可由该会话的用户访问 因为SessionId的东东以cookie的方式保存访问者浏览器的缓存里了 用户不能访问或修改他人的Session注意 当会话 Session 过期或终止时 服务器就会清除Session对象开发场景 常用于保存登录用户ID Session图 Session的操作 开始并为Session赋值 Session uName CNYaoMing 取值 stringstrName Session uName ToString 销毁 取消 退出 Session Abandon 销毁服务器端的Session对象Session Clear 清空服务端的Session对象里的键值对 Session对象并没有从Session池里销毁 Session常用属性 方法 Session详解 ASP Net已经内置了Session机制 不要放太多的对象到Session 因为存储
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论