• 初识ASP.NET---一般处理程序


           问题来源:

           今天在敲一个小的demo,利用Jquery实现级联下拉框,敲的过程中发现不管怎么和源代码对比都无法显示想要的功能。

    这才想着原来是没有写后台代码,询问一清同学的时候,他告诉我能够利用ASP.NET的一般处理程序。

           我果然是菜鸟刚開始学习的人,由于我还没有接触过一般处理程序。

           什么是一般处理程序:

           一般处理程序:是一个实现System.Web.IHttpHandler接口的特殊类。不论什么一个实现了IHttpHandler接口的类。是作为一个外部请求的目标程序的前提。

    (凡是没有实现此接口的类,就不能被浏览器请求。)它由支持ASP.NET的server调用和启动执行。 一个HttpHandler程序负责处理它所相应的一个或一组URL地址的訪问请求,并接收client发出的訪问请求信息(请求报文)和产生响应内容(响应报文)。

           长处:轻量化、效率较高

           创建一个一般处理程序将会生成两个后缀名的文件.ashx和.ashx.cs。ashx里仅仅有一个指令集。没有不论什么其它代码;ashx.cs就是页面处理代码。假设有大量html。须要通过ashx来拼接字符串或读取模板的方式完毕。

    当中.ashx.cs相应的内容,例如以下面代码:

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Web;  
      
    namespace web  
    {  
        /// <summary>  
        /// Handler 的摘要说明  
        /// </summary>  
        public class Handler : IHttpHandler  
        {  
            public void ProcessRequest(HttpContext context)  
            {  
                context.Response.ContentType = "text/plain";  //表示输出结果类型
                context.Response.Write("Hello World");  //输出结果
            }  
      
            public bool IsReusable  
            {  
                get  
                {  
                    return false;  
                }  
            }  
        }  
    }  

    (1)HttpContext: 请求上下文对象,包括:请求报文对象(HttpRequest),响应报文对象(HttpResponse),server帮助类(Server),Session等。

    (2)FrameWork在接收到请求后,通过反射技术创建请求路径相应的类的对象,并强制转换成IHttpHandler接口对象(HttpHandler实现了IHttpHandler,之后的转换相当于将子类强转为父类)。统一调用ProcessRequest方法处理。


    (3)IsReusable属性用来表示在IHttpHandlerFactory对象创建IHttpHandler的时候是否可以将这个Handler存入池中以便重用。

    (4)ContentTyp属性是一般处理程序输出响应内容,输出的内容有可能是图片、html等其它页面,浏览器依据响应报文体内容不知道接收到的是什么,须要推断响应报文头里的ContentType来决定将报文体内容作为何种格式的数据来显示。(image/jpeg----表示输出的是图片,text/plain--------表示输出文本)

           从上面的代码能够看到,一般处理程序实际上就是一个实现IHttpHandler接口的处理程序类,这个处理程序被ASP.NET直接在系统配置文件映射到了ashx扩展名的请求上。这样。我们就不须要在配置文件里进行配置了。

           详细的用途:

           HttpHandler程序能够完毕普通类程序所能完毕的大多数任务:

               1.获取client通过HTML的Form表单提交的数据和URL參数

               2.创建对client的响应消息内容

               3.訪问server端的文件系统

               4.连接数据库并开发基于数据库的应用

               5.调用其它类

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Web;  
      
    namespace web  
    {  
        /// <summary>  
        /// Handler 的摘要说明  
        /// </summary>  
        public class Handler : IHttpHandler  
        {  
            public void ProcessRequest(HttpContext context)  
            {  
                context.Response.ContentType = "text/plain";  //表示输出结果类型
                context.Response.Write("Hello World");  //输出结果
            }  
      
            public bool IsReusable  
            {  
                get  
                {  
                    return false;  
                }  
            }  
        }  
    }  

           详细的运用:

           以下是利用Jquery实现级联下拉框效果中。须要用一般处理程序获得汽车类型的一般处理程序的代码。

     public class Handler1 : IHttpHandler
        {
            public void ProcessRequest(HttpContext context)
            {
                context.Response.ContentType = "text/plain";
                string strCarName =context.Request["carnameValue"].ToString();
     
                SqlConnection conn = new SqlConnection("server=.;database=car;uid=sa;pwd=123456;");   //定义连接字符串
                conn.Open();     //打开连接
                SqlDataAdapter sdr = new SqlDataAdapter();
                sdr.SelectCommand =new SqlCommand ("selectid,cartype from t_cartype where carnameid='" + strCarName + "'",conn);
     
                DataTable dt = new DataTable();
     
                sdr.Fill(dt);
                string str =DataTableToJson("1", dt);
                context.Response.Write(str);
            }
     
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
    }

            总结:

           事实上理论知识再好不会用也仅仅会停留在理论层面。而编程又是这么奇怪的一个东西不管别人讲得多么的具体,都比不上自己的一次实践。

    文中所提到的demo源代码,文章最后会附有下载链接。

    demo源代码下载:http://download.csdn.net/detail/senior_lee/7697243

  • 相关阅读:
    Feature fake , new view in comment.
    MeeGo Architect
    小米手机 怪诞行为经济学
    [转载]ten years as a programmer
    C++ 头文件
    关于AGILE/TDD 和传统的design
    你是否在开发正确的产品
    正确的创业
    MeeGo架构
    Unit Test
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/7119378.html
Copyright © 2020-2023  润新知