.NET工作准备--04ASP.NET
(已过时)
ASP.NET
1.开发基础
*asp.net以什么形式运行?.net宿主的概念,ISAPI的概念,ASP.NET基本运行机制;
.net宿主的概念:CLR被实现为一个标准的COM服务器组件,CLR具有标准的COM接口和接口GUID,在安装.net时CLR作为一个COM服务器在OS内注册;可以使用vs自带的oleview查看;CLR实际可以被非托管代码加载使用;
理解难度很大,加油endeavor
ISAPI是什么?全称为internet服务器扩展应用程序(asp.net?),而ISAPI过滤器则是指在启动ISAPI的http服务器上运行的dll,它可以用来处理特定http请求;
asp.net是什么?是一个宿主在CLR上的ISAPI过滤器程序;ISAPI->ASP.NET->托管代码机制很复杂,简要说明:
asp.net初始运行,加载CLR;
iis接受一个http请求,并且判断出该请求应该被绑定到aspnet_filter.dll这个ISAPI过滤器;
asp.net开始处理这个http请求,判断该请求所属的网站,如果是第一个请求,新建appDomain来出处理请求,如果已有请求,则使用下游appDomain处理;
当网站文件动态更新时,将重新加载该应用程序域;
*常见的httpCode有哪些?
200
OK
请求结束
301
permanently
请求对象被永久移动到一个新的URI
302 Move
temporarily
请求对象被暂时移动到一个新的URI(response.redirect)
303 Redicection with new access method
304
Not
Modified
400
Bad
Request
401
Unauthorized
403
403
Forbidden
404
404 Not
Found
500
Internal
Server Error
501
Not
Implemented
*GET与POST请求的区别?
GET请求吧表单数据显现的放在URI中,并且对长度和数据值编码有所限制。POST请求把表单数据放在HTTP请求体中,没有长度的限制.详细解释如下5条:
设计目标不同,GET作为向服务器申请资源的请求,POST作为向服务器发送数据的请求;
GET请求在提交表单数据时,会将其添加到URL后面,具体形式:key=value,数据间用&隔开。而POST请求则直接把数据放在HTTP请求体中。也就是说GET的URL既包括服务器的URL也包含表单数据,而POST的URL只包含服务器的URL;
HTTP协议限制了GET请求的长度,而没有限制POST请求的长度;
HTTP协议限制GET的数据的值必须是ASCII字符,而POST却可以是整个ISO10646字符集;
对于ASP.NET,当新建一个表单时,默认的请求方式是POST.
*(重点)asp.net页面的生存周期?(页面添加trace属性即可跟踪)
所谓的页面生命周期,指的是一个ASP.NET页面类型对象从初始化到销毁
经过的步骤。在通常情况下,一旦某个请求对应到一个ASP.NET页面时,一个直接或者间接继承自System.Web.UI.Page类型的对象就会初
始化,并且开始执行页面生存周期中的所有步骤。而该类型的对象,就是客户端请求的ASP.NET页面后台托管代码.
不分类:
PreInit,Init, InitComplete, LoadState, ProcessPostData, PreLoad,
Load, ProcessPostData(第二次), ChangedEvents, PostBackEvent,
LoadComplete, PreRender, PreRenderComplete, SaveSate,
SaveSateComplete, Render, Unload.
分4个步骤:
初始化:PreInit,Init,
InitComplete--包含初始化类对象,初始化主题页面等特性,判断是否是第一次访问页面等初始功能;
加载数据和页面:LoadState, ProcessPostData, PreLoad, Load,
ProcessPostData(第二次)--首先从页面回传的数据加载ViewState对象,所有的数据都会以Base64(ViewState)编
码随页面传入服务器。然后开始处理回传的数据,也就是把表单中的键/值对存入对象中。随后开始加载页面,程序员通常可以在这里做一些初始化的编程,例如在
OnLoad事件中编写页面初始化代码,最后执行ProcessPostData,已处理Load时新添加的数据。
两次ProcessPostData均是必须的:
第一次:保证了页面在被加载之前,所有的数据从页面上被读入,这样页面加载时就可以访问所有的数据。
第二次:使页面加载时新建立的控件中的数据也能够得到处理。
触发事件:ChangedEvents,
PostbackEvent.这里首先会比较ViewState中数据和页面上一次回传的数据,决定哪一些事件需要被触发,这里的事件是被逐一触发的,但顺序无法确定。然后查看是否触发PostBack事件,也就是页面提交的事件;
保存状态并呈现页面:SaveState, SaveStateComplete,
Render等步骤.首先页面会编码保存所有的ViewState数据,然后将其嵌入到页面的一个隐藏控件中。接着转换所有的控件标签并生成页面的html,并且发送回客户端。
2.控件和页面
*什么是静态/动态页面?
静态页面是指不需要服务器代码额外处理,直接可以呈现给用户的页面,如html.相对的需要服务器针对每一个请求做处理的页面被称为动态页面,如aspx.
注意:现在大型门户网站采用静态页面动态页面相结合的结束,配合缓存技术和负载平衡技术可以支持超大量的并行访问.
*简述ViewState功能和实现机制
一般来说,构建BS结构系统最大难点在于如何保存访问的状态,和CS结构系统可以把用户数据保存在客户的内存和存储设备上不同,BS结构的系统没有得到用
户的任何授权,而把每一个访问者的数据保存在服务器代价太大,asp.net对这个问题的解决方法就是页面状态的保存:ViewState机制(Java
中的Page);
Asp.net服务器空间从Control继承名为ViewState的属性,这使它可以更容易的加入状态管理。ViewState的类型是System.Web.UI.StateBag,它是存储名称/值对的字典;可以使用户在使用动态页面时获得连续性动作的功能;(就是说ViewState并不是存储在服务器中,而是通过不断的在服务器和客户端之间传送);
asp.net中有些控件本身实现类保存数据的功能,而不依靠ViewState.例如TextBox,即使ViewState关闭,数据也不会丢失;ViewState可以保存任何可序列化的对象,而不仅仅限于控件的状态数据,这样的保存依然是限制在页面的范围内的.
详细机制:
客户申请一个新的带有ViewState字段的页面,第一次申请时ViewState字段内数据为空;
客户提交表单,这是ViewState字段作为表单的一部分被提交,当然这时也为空;
服务器从表单中读取ViewState的数据,解码解密,并且保存入ViewState对象,这时仍然为空;
服务器处理完表单数据,将表单数据存入ViewState,这是ViewState有值。
服务器把ViewState对象加密并编码,然后写入ViewSate字段,这时页面ViewState字段就包含了上次提交的表单内控件数据以及服务器代码写入ViewState的数据;
服务器将页面发送到客户端,客户端的得到ViewState数据(这个ViewState并不做任何的处理);
注意:对input(_viewState)的value进行解码解密,发现viewState的真是面貌是一个xml文件,并且存储了所有ViewState对象内的值.
*Session有哪几种存储方法,如何设置?
Session:一个数据字典,用于在会话中维持状态数据,从理论上来说,同一个会话过程中,Session数据是不会丢失的(关闭浏览器或主动结束会
话).用户认证(authentication)后--输入用户名密码,用户信息可以保存在Session中,包括购物车小例程。
Session数据4中保存的方式:
iis进程中:inetinfo.exe这个进程中;()
状态服务器:asp.net State Service()
该进程独立于asp.net辅助进程和iis应用程序池.保证在重启Web应用程序后仍能保留会话状态,并可使会话状态应用于多个Web服务器;
sqlserver:()
安装状态数据库systemroot\Microsoft.Net\Framework\versionNumber\Aspnet_regsql.exe
自定义:()
定义继承自SessionStateStoreProviderBase类型的类并重写方法;
*如何嵌套使用GridView:实现文本需求的一种方式,还有脚本实现,flash技术等.
protected void GridView1_RowDataBound(object sender,
GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
GridView gvSon = e.Row.FindControl("GridView2") as GridView;
Label label = e.Row.Cells[0].FindControl("Label1") as Label;
gvSon.DataSource = GetDetailById(label.Text);
gvSon.DataBind();
}
}
private object GetDetailById(string id)
{
DataTable dt = PrepareDataSource();
DataTable result = dt.Clone();
foreach(DataRow tr in dt.Rows){
if (id == tr["Id"].ToString()) {
DataRow newrow = result.NewRow();
newrow.ItemArray = tr.ItemArray;
result.Rows.Add(newrow);
}
}
return result;
}
存在一定的疑问(关于row的操作),模板列,模板编辑等模式的熟悉;
*举例实现页面跳转的方式并说明其机制;
response.Redirect:302,迫使客户端跳转;
Server.transfer:服务器内的跳转;
server.execute:服务器内呼叫,新页面执行的结果追加到当前页面的响应中;类似方法调用;
javascript:
跳转愿望发生在客户端,很高效--是浏览器直接跳转到新页面,并且可以完全控制跳转前的工作;
跳转愿望发生在服务器端,相对于Response.Redirect在于,可以在跳转前执行一些必要的客户端工作,例如弹出提示框,例子:
response.write("
超链接(a):
*asp.net页面间传值方式: 页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值、存储对象传值、ajax、类、model、表单等。但是一般来说,常用的较
简单有QueryString,Session,Cookies,Application,Server.Transfer。
.NET工作准备--04ASP.NET的更多相关文章
- ASP.NET是如何在IIS下工作的
ASP.NET与IIS是紧密联系的,由于IIS6.0与IIS7.0的工作方式的不同,导致ASP.NET的工作原理也发生了相应的变化. IIS6(IIS7的经典模式)与IIS7的集成模式的不同 IIS6 ...
- 菜鸟学Struts2——Struts工作原理
在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...
- C#中如何在Excel工作表创建混合型图表
在进行图表分析的时候,我们可能需要在一张图表呈现两个或多个样式的图表,以便更加清晰.直观地查看不同的数据大小和变化趋势.在这篇文章中,我将分享C#中如何在一张图表中创建不同的图表类型,其中包括如何在同 ...
- OEL上使用yum install oracle-validated 简化主机配置工作
环境:OEL 5.7 + Oracle 10.2.0.5 RAC 如果你正在用OEL(Oracle Enterprise Linux)系统部署Oracle,那么可以使用yum安装oracle-vali ...
- 通过AngularJS实现前端与后台的数据对接(一)——预备工作篇
最近,笔者在做一个项目:使用AngularJS,从而实现前端与后台的数据对接.笔者这是第一次做前端与后台的数据对接的工作,因此遇到了许多问题.笔者在这些问题中,总结了一些如何实现前端与后台的数据对接的 ...
- 从啥也不会到可以胜任最基本的JavaWeb工作,推荐给新人的学习路线(二)
在上一节中,主要阐述了JavaScript方面的学习路线.先列举一下我朋友的经历,他去过培训机构,说是4个月后月薪过万,虽然他现在还未达到这个指标. 培训机构一般的套路是这样:先教JavaSE,什么都 ...
- Java程序员:工作还是游戏,是该好好衡量一下了
前阵子我终于下定决心,删掉了硬盘里所有的游戏. 身为一个程序猿,每天都要和各种新技术打交道,闲暇时间,总还得看一下各大论坛,逛逛博客园啥的,给自己充充电.游戏的话,其实我自小就比较喜欢,可以算是一种兴 ...
- 【夯实Nginx基础】Nginx工作原理和优化、漏洞
本文地址 原文地址 本文提纲: 1. Nginx的模块与工作原理 2. Nginx的进程模型 3 . NginxFastCGI运行原理 3.1 什么是 FastCGI ...
- HashMap的工作原理
HashMap的工作原理 HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间 ...
随机推荐
- 洛谷_Cx的故事_解题报告_第四题70
1.并查集求最小生成树 Code: #include <stdio.h> #include <stdlib.h> struct node { long x,y,c; ...
- C++ new动态数组初始化
strlen函数是不包括‘\0’的长度的,sizeof计算的结果才包括'\0'的长度: C++ new动态数组初始化void testnew( const char* str ) { if (!str ...
- django xadmin 安装和使用
官方文档: http://xadmin.readthedocs.io/en/docs-chinese/ 版本:django1.9 pip安装部署 pip install xadmin settings ...
- 项目中经常用到的JavaScript方法
1. js切割字符串 String.split() 注意:此方法与Array.join执行的方法是相反的. 2. js把数组中所有元素放入一个字符串 Array.join()
- Linux命令(四)文件传输
1. 将当前目录下的test1.txt文件,复制到 /tmp/Douzi目录下,命名为test1.py 2. 将服务器/tmp/Douzi/hello.py复制到本地上,重命名为 hello_Do ...
- Linux之svn数据备份、还原及迁移
前言 因管理需求现要将svn数据进行备份,作为运维小哥的我在收到指令后进行了相关操作.当然,领导告知的是要备份,但作为一个有思想的运维,我考虑到的是自己要干的不仅仅是备份操作,还要确保在备份后数据还原 ...
- 开启SSI配置使shtml支持include公用的页头页脚
编写编写项目众多静态文件时,能像php等开发语言一样使用include将页面公有的header/footer/sidebar作为公用.独立.单一的文件引入到各页面上,这样修改这些页面公用部分时就能单独 ...
- 赫夫曼树JAVA实现及分析
一,介绍 1)构造赫夫曼树的算法是一个贪心算法,贪心的地方在于:总是选取当前频率(权值)最低的两个结点来进行合并,构造新结点. 2)使用最小堆来选取频率最小的节点,有助于提高算法效率,因为要选频率最低 ...
- 20155314 2016-2017-2 《Java程序设计》第7周学习总结
20155314 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 了解Lambda语法 了解方法引用 了解Fucntional与Stream API 掌握Da ...
- Opencv学习笔记——release和debug两个模式的运行问题
本文为原创作品,转载请注明出处 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing/ 作者:晨凫 ...