2013年7月03日_枣庄 asp.net入门
asp.net技术具体是研究的三种:一般处理程序(ashx)、常用程序WebForm、MVC3
一般处理程序 :就是一般处理程序就有一个文件,而aspx文件有两个文件(有个.cs 文件)
第一个手写的登陆程序:
login.html
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form action="LoginServlet.ashx" method="post"> <input type="text" name="username" /> <input type="password" name="password" /> <input type="submit" name="logbtn" value="登陆" /> </form> </body> </html>
LoginServlet.ashx
using System; using System.Web; public class LoginServlet : IHttpHandler { public void ProcessRequest(HttpContext context) { string modelPath = context.Server.MapPath("login.html"); string htmlSendBack = System.IO.File.ReadAllText(modelPath); context.Response.ContentType = "text/html"; context.Response.Write(htmlSendBack); if (!string.IsNullOrEmpty(context.Request.Form["username"])) { if (context.Request.Form["username"] == "bin" && context.Request.Form["password"] == "123") { context.Response.Write("登陆成功!!"); } else { context.Response.Write("登陆失败"); } } } public bool IsReusable { get { return false; } } }
一般处理程序:实现了IHttpHander的类,任何实现了IHttphandler接口的类都能作为一个外部请求的目标程序。创建页面类对象,为了统一调用处理方法。重写了接口中的方法。通过接口对象在调用方法。是在不需要大量返回html代码的时候使用,在处理一般业务的时候用这个比较好,这里只要结果。在这个地方是和java中的http接口原理是类似的。
WebForm是在返回大量的html代码的时候使用。
context是上下文对象:此次请求中用到的数据信息和对象都在里边。客户端发过来的数据都封装在里边还有就是回应的方法。
contentType设置响应报文的contenType,也就是告诉IE是用什么方式来解析。
浏览器通过网络访问服务器,由服务器软件接受请求,服务器软件发现处理不了不识别的文件后缀文件,就转发给扩展程序asp.net_ISAPI(桥梁),软后转给网站程序,调用HttpRuntime类,由这个类来分析请求报文
将报文封装到了HttpWorkerRequest类对象中《将相应的字段Http协议键值对封装到这个对象中去》,通过调用HttpApplicationFactory的静态方法《放在缓存中!!并非内存》来创建HttpApplication对象《通过这个对象来找页面类对象》《请求要执行的代码》,增加了对象的复用性。
---------为每个请求创建单独的Httpapplication对象,那么网站针对此请求的所有运行过程都在此对象中完成。、
为了减缓压力《HttpApplicationFactory》,这里用到了HttpApplication池,看看有没有空闲的HttpApplication对象,有的话,就直接用了。
HttpApplication对象的处理过程,《httpContext对象的创建,这个对象是上下文环境--里面包含所有的请求参数,里边就有HttpRequset和HttpResponse对象》
---------HttpRequest包含所有的请求信息,这些信息来源于HttpWorkRequest对象,对象中包含属属性:Form 、QueryString
---------HttpResponse主要包含了FileStream对象,用来保存页面类执行过程中输出给浏览器的数据。
------------HttpApplication里要运行被请求的页面类对象的ProcessRequest方法,所以需要传递HttpContext对象。
网站发布后,变成为.dll文件,也就是程序集,目的是提高速度
请求编译的流程图 《内存》------《找中间代码,就.dll代码----编译为机器码》-------《找源码。aspc 或者是aspx文件》
在上下文对象中包含(其实是属性)《就是内置对象》:
Page
Request 读取浏览器的请求报文数据
Response 返回到客户端的输出
Application
Session
Cookie
Server
get和Post的两种方式来取值:就是上边提到了两个 Form和QueryString []-----索引《这个是一个集合可以直接在总的集合上索引参数》
关于模板这一块就是Servlet于Jsp的区别
阶段项目:
简单计算器的实现:
public void ProcessRequest (HttpContext context) { int x = 0; int y = 0; int z = 0; string first = context.Request.Form["first"]; string second = context.Request.Form["second"]; //string result = first + second; //context.Response.Write(result.ToString); context.Response.Write("大家好"); if(!string.IsNullOrEmpty(first)&&!string.IsNullOrEmpty(second)) { if(int.TryParse(first,out x )&&int.TryParse(second,out y)) { z = x + y; } context.Response.Write(z.ToString()); } context.Response.ContentType = "text/html"; context.Response.Write("<form actin='' method='post'><input type='text' name='first'value='" + x.ToString() + "'/>+<input type='text' name ='second'value='" + y.ToString() + "'/>=<input type='text' name ='result' value='" + z.ToString() + "'/><input type='submit' value='计算'/></form>"); }
自增的实现:《局部变量》无状态:服务器和浏览器是互不联系的。
用到模板的方式
前台模板代码:
<body> <form action="" method="post"> <input type="text" name="num" value="{num}"/> <!--这个地方是设置的隐藏域,来进行值的暂存功能 --> <input type="hidden" name="hid" value="{hid}" /> <input type="submit" value="加吧" /> </form> </body>
后台代码:
public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/html"; // context.Response.Write("Hello World"); //首先获取到隐藏域的值 string temp = context.Request.Form["hid"]; int a = 0; int.TryParse(temp, out a); //读取模板代码 string path = context.Server.MapPath("AddSelf.html"); string content = System.IO.File.ReadAllText(path); a++; content = content.Replace("{num}", a.ToString()).Replace("{hid}", a.ToString()); context.Response.Write(content); }
长连接和短连接
短连接:仅仅是链接一个页面,不过一个页面中会有例如《img》标签,会有多次请求
长连接:服务器端不会立即关闭链接.当最后一次请求过后,在关闭链接。这个可以提高资源的利用率.默认都是长连接。
隐藏域的功能:不会被IE解析,但已经传递回了客户端。