zoukankan      html  css  js  c++  java
  • 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解析,但已经传递回了客户端。

  • 相关阅读:
    Systemd程序及相关命令
    深入理解SELinux
    Linux系统常见内核问题修复(转发)
    CentOS6.8单用户模式下修改密码
    CentOS6启动流程
    linux中的软、硬链接
    Linux中计划任务、周期性任务设置
    CentOS7.3将网卡命名方式设置为传统方式
    js判断字符串是否有下划线
    判断是否是微信打开
  • 原文地址:https://www.cnblogs.com/kongbin/p/3168505.html
Copyright © 2011-2022 走看看