HttpHandler浅析

声明:本文为翻译文章,如有侵权,请告知,我将会在1个工作日内删除,谢谢.

★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆

总是想着展翅飞翔,但是却不料一直受伤,但是那寻梦的心啊,永远向往着远方.

★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆

  在本文中,我将详细的向各位讲解httphandlers的一般扩展使用方法,以及在何种场合下使用这个方法.首先,需要说明的是,httphandlers是一个继承自System.IHttpHandler接口的.net组件.她可以通过同步HttpHandler或者是异步HttpHandler的方式被扩展. 一个同步的HttpHandler应当继承自System.Web.IHttpHandler接口,然而一个异步的HttpHandler却继承自System.Web.IHttpAsyncHandler接口.在本文中,我讲重点讲解同步HttpHandler的使用方法.那么,下面首先要探讨的是IHttpHandler接口和她的各类成员.           ※ProcessRequest() 这个方法是HttpHandler的核心,她处理所有通过HttpHandler的请求.

      ※IsReusable() 这个属性用来区别IHttpHandler是否能够再次处理相同的请求. 所以,如果扩展HttpHandler的时候,那么上面的方法和属性必须被实现.

      怎么样来实现?

     我下面将会结合着一个例子来说明在一个一般的项目中,我们该在哪儿来使用HttpHandler.现在假设我们正在开发一个项目,而这个项目需要处理成千上万的图片.这些相对来说还是比较简单的,但是难就难在,我们如何在数据库的BLOB字段中提取出所有的图片,然后展示出来.一般来说,为了处理这些,我们会建立一个新的页面,然后将这些图片以字节流的方式从数据库中提取出来.生成的代码可能如下:

 imImage.ImageUrl = "~/ImageHandler.aspx?ImID=100;

在上面,imImage就是一个图片控件,同时ImageHandler.aspx的代码如下:

 

string imageid = context.Request.QueryString["ImID"];

SqlConnection connection
= new SqlConnection(ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString);

connection.Open();

SqlCommand command
= new SqlCommand("select Image from Image where ImageID="+imageid, connection);

SqlDataReader dr
= command.ExecuteReader();

dr.Read();

context.Response.BinaryWrite((Byte[])dr[
0]);

connection.Close();

context.Response.End();

 

 

      如果我们考虑着使用上面的代码段来让一个aspx页面去操作一个单独的数据库连接的话,那么页面上其他的内容的展示将显得不是那么重要了. 同时,一个aspx页面本身就有一系列的从Init开始到Unload结束的事件,这些事件都是在这个简单的数据库操作之前发生的.所以,如果我们利用上面的方法来试着展示更多的图片到一个页面上,她的效率的高低,你是懂的. 那么如何来解决这个呢?是时候该HttpHandler出场了.众所周知,和aspx页面请求顺序比起来,HttpHandler的请求正好是相反的,她在请求的末端被执行.由于HttpHandler只有一个可以处理简单操作的ProcessRequest的方法,所以,她是不会加载那么多事件的. 但是ProcessRequest方法是如何响应Response对象的呢?

  让我们先看看ProcessRequest:

  public void ProcessRequest (HttpContext context) { }

  在上面,context对象有权限进入请求的主对象中.比如当我们利用Response对象进行写字节流的时候,当然,在其他的一些场合下,我们也可以利用HttpHandler,比如如果我们想把DataSet中的内容导出到Excel中,同时我们想保存在我们自定义的文件格式,比如说是.axd,那么我们就必须在配置文件中进行正确的配置才行.

 

<httpHandlers>

<add verb="supported http verbs" path="path" type="namespace.classname, assemblyname" />

<httpHandlers>

 

 

 上面种,verb代表着请求方式,如”GET,POST”,path可以写成”.axd”,type则是实际的Handler类型.

  利用vs2005开发一个HttpHandler

  首先,创建一个新的WebApplication工程,然后添加一个一般处理程序即可,代码如下:

 

 using System;

  
using System.Web;
  
using System.Configuration;

  
using System.Data.SqlClient;

  
public class ImageHandler : IHttpHandler

  {

    
public void ProcessRequest (HttpContext context)

    {

      
string imageid = context.Request.QueryString["ImID"];

      SqlConnection connection
= new SqlConnection(ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString);

      connection.Open();

      SqlCommand command
= new SqlCommand("select Image from Image where ImageID="+imageid, connection);

      SqlDataReader dr
= command.ExecuteReader();

      dr.Read();

      context.Response.BinaryWrite((Byte[])dr[
0]);

      connection.Close(); context.Response.End();

    }

    
public bool IsReusable

    {

      
get { return false; } }

    }

 

 

   可以利用如下代码展示图片: imImage.ImageUrl = "~/ImageHandler.ashx?ImID=100;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303831.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

神经网络简史:BP算法后的又一突破—信念网络

随着训练多层神经网络的谜题被揭开&#xff0c;这个话题再一次变得空前热门&#xff0c;罗森布拉特的崇高雄心似乎也将得以实现。直到1989年另一个关键发现被公布&#xff0c;现在仍广为教科书及各大讲座引用。多层前馈神经网络是普适模拟器&#xff08; universal approximato…

Linux网络模块全局变量,()不是Linux系统的特色.

相关题目与解析UNIX是一个交互式的______操作系统&#xff0c;采用以全局变量为中心的模块结构。下列关于UNIX系统结构的描述中&#xff0c;正确的是______。A&#xff0e;UNIX系统是一个交互式的多用户、多任务分时操作按照变量的作用域可将变量划分为()A.公有、私有、系统B.全…

NET问答:Select 和 SelectMany 的区别

咨询区 Tarik&#xff1a;我已经 google 搜索了 Select 和 SelectMany 之间的区别&#xff0c;但我并没有找到合适的答案&#xff0c;我现在急切的需要知道在 Linq to SQL 时两者的区别而不是给我用Array展示...能否有人帮忙提供 Linq To SQL 的例子吗&#xff1f;回答区 Mike …

最好的FLV视频下载器 维棠 (支持优酷视频下载、土豆视频下载等)

维棠FLV视频下载能帮助你轻松下载国内外大多数FLV视频分享网站的视频内容;并且维棠FLV视频下载具有断点续传功能。 现在国内外出现了很多视频分享网站&#xff0c;每个用户都可以把自己的视频节目和其他人分享。这些网站有大量的在线视频资源&#xff0c;但是由于网络带宽的限…

linux ns3配置环境,Ubuntu下的NS3安装与入门

NS3的开发旨在为网络研究和教育提供开放&#xff0c;可扩展的网络仿真平台。简而言之&#xff0c;NS3提供了分组数据网络如何工作和执行的模型&#xff0c;并为用户提供了进行模拟实验的模拟引擎。使用ns-3的一些原因包括进行更难或不可能用真实系统执行的研究&#xff0c;在高…

龙芯3A5000完成流片 同主频性能追平AMD Zen1

前不久&#xff0c;龙芯3A5000完成流片&#xff0c;该CPU基于龙芯自主定义指令集LoongArch。据小道消息&#xff0c;SPEC06测试定点26分&#xff08;base 2.5Ghz&#xff09;。这个成绩已经达到预期指标&#xff0c;而且经过进一步优化&#xff0c;SPEC06成绩还有进一步优化的…

Funambol DM 安装过程

Funambol DM 安装过程 Funambol安装过程包括了 Java环境安装 ,Mysql安装 ,Jboss安装和 Funambol DM的安装 .一 : Java环境安装 1: Java现在使用的版本是 :jdk-1_5_0-windows-i586.exe . 2: 安装完毕 ,请在 windows系统下设置环境变量 JAVA_HOME{jdk的安装目录 } 如 : J…

熬夜族又一噩耗:“早死”风险更高!

根据美国西北大学范伯格医学院和英国萨里大学最近的一项研究&#xff0c;相比于早睡早起的人&#xff08;百灵鸟一般&#xff09;&#xff0c;晚上不睡、早晨不起&#xff0c;或起床困难的“夜猫子”们&#xff0c;“早死”的风险更高。这项基于英国生物库中将近50万人样本的研…

Linux中append函数的用法,linux C代码 open函数参数:O_APPEND问题求助

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼没有截图&#xff0c;直接上代码吧。原代码是这样的&#xff1a;#include#include#include#include#includeint main(){int fd-1;ssize_t size-1;off_t offset-1;char buf1[]"0124553";char buf2[]"dsfafads";…

iNeuOS工业互联平台,生产过程业务联动控制

1. 概述工业物联网也好、工业互联网也好或是其他生产系统&#xff0c;反向控制始终无法回避。搞工业最直接、最体现效果的两个方面是采集各种数据和生产过程业务控制&#xff0c;所谓大数据预测和分析&#xff0c;那是仁者见仁、智者见智&#xff0c;下一篇文章我们会专业来讨…

t-sql里Linked server跨数据库查询

set ANSI_NULLS ON set QUOTED_IDENTIFIER ONgoALTER procedure [dbo].[updateData] as/*--必须先创建一个LinkedServerEXEC sp_addlinkedserverserverlyg,--被访问的服务器别名 srvproduct,providerSQLOLEDB,datasrclyg --要访问的服务器*/--登录上一步建好的服务器&#x…

linux防火墙开放所有端口命令,linux centos7 防火墙及端口开放相关命令

一、防火墙相关命令1、查看防火墙状态 &#xff1a; systemctl status firewalld.service注&#xff1a;active是绿的running表示防火墙开启2、关闭防火墙 &#xff1a;systemctl stop firewalld.service3、开机禁用防火墙自启命令 &#xff1a;systemctl disable firewalld.se…

如何使用 BenchmarkDotNet 对 C# 代码进行基准测试

BenchmarkDotNet 是一个轻量级&#xff0c;开源的&#xff0c;强大的 .NET 工具包&#xff0c;它可以将你的方法转化为基准并跟踪这些方法&#xff0c;最后对这些方法的性能提供一些测试报告&#xff0c;使用 BenchmarkDotNet 玩 基准测试 是非常容易的。你可以利用 BenchmarkD…

MSSQL 2008 企业管理器打开命令

MSSQL 2008 Server做了一些调整&#xff0c;取数据是按照200或者1000条查看&#xff0c;对权限控制的更加严格&#xff0c;已经去掉可以添加用户的那个存储过程。同时在启动实例时也加强权限的限制&#xff0c;如果没有权限那么将无法打开。 在MSSQL 2008 Server中如果想通过命…

笑说设计模式-小白逃课被点名

简介 工厂模式&#xff08;Factory Pattern&#xff09;是最常用的设计模式之一。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。在工厂模式中&#xff0c;我们在创建对象时不会对客户端暴露创建逻辑&#xff0c;而是通过使用一个共同的接口来…

原来论文排版还有这样的学问

论文的重要加分点除了内容&#xff0c;还有它小天最近经常遇到小伙伴的诉苦&#xff1a;“我的毕业论文提交一次就被导师批评一次&#xff0c;内容不行就算了&#xff0c;格式也有问题&#xff01;改论文改到绝望”“期刊的版式要求不是统一的&#xff0c;为了多投几家&#xf…

红帽linux5安装Oracle 9i enterprise

红帽linux5安装Oracle 9i enterprise 本文转自&#xff1a;http://database.51cto.com/art/201004/194082.htm摘要&#xff1a;如果你在红帽Linux5上安装Oracle 9i enterprise遇到了问题&#xff0c;不防看一看下面的文章&#xff0c;希望能帮你解决有关Oracle9i实际应用的问题…

powerpc-linux-gcc,关于powerpc-linux-uclibc-gcc的使用

做了点东西需要使用linux下ldap库&#xff0c;我装的linux上已经有ldap库&#xff0c;在程序中#include 了。用gcc编译时&#xff1a;gcc filename.c,会报找不到ldap.h文件以及ldap.h文件中相关函数的错误但是使用gcc filename.c -lldap&#xff0c;就能够编译通过了。后来要求…

神经网络告诉我,谁是世界上最「美」的人?

「魔镜魔镜告诉我&#xff0c;谁是世界上最美的女人&#xff1f;」这句伴随童年的话也有现实版哦&#xff5e;神经网络可以预测人脸颜值&#xff0c;这方面也出现了不少研究。今年年初华南理工大学的研究者发布论文&#xff0c;并公开了数据集 SCUT-FBP5500。本文作者 Dima Shu…

开源推荐:.Net Core3.1 + EF Core + LayUI 封装的MVC版后台管理系统

ASP.NET Core是一个由微软创建的&#xff0c;用于构建Web应用程序&#xff0c;API&#xff0c;微服务的Web框架。它使用常见的模式&#xff0c;例如MVC&#xff08;模型-视图-控制器&#xff09;&#xff0c;依赖注入&#xff0c;和一个由中间件构成它基于Apache 2.0许可开放源…