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解析,但已经传递回了客户端。

原文地址:https://www.cnblogs.com/kongbin/p/3168505.html