日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

HttpHandler浅析

發(fā)布時(shí)間:2023/12/4 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HttpHandler浅析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

聲明:本文為翻譯文章,如有侵權(quán),請(qǐng)告知,我將會(huì)在1個(gè)工作日內(nèi)刪除,謝謝.

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

總是想著展翅飛翔,但是卻不料一直受傷,但是那尋夢(mèng)的心啊,永遠(yuǎn)向往著遠(yuǎn)方.

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

  在本文中,我將詳細(xì)的向各位講解httphandlers的一般擴(kuò)展使用方法,以及在何種場(chǎng)合下使用這個(gè)方法.首先,需要說(shuō)明的是,httphandlers是一個(gè)繼承自System.IHttpHandler接口的.net組件.她可以通過(guò)同步HttpHandler或者是異步HttpHandler的方式被擴(kuò)展. 一個(gè)同步的HttpHandler應(yīng)當(dāng)繼承自System.Web.IHttpHandler接口,然而一個(gè)異步的HttpHandler卻繼承自System.Web.IHttpAsyncHandler接口.在本文中,我講重點(diǎn)講解同步HttpHandler的使用方法.那么,下面首先要探討的是IHttpHandler接口和她的各類(lèi)成員.     ????? ※ProcessRequest() 這個(gè)方法是HttpHandler的核心,她處理所有通過(guò)HttpHandler的請(qǐng)求.

????? ※IsReusable() 這個(gè)屬性用來(lái)區(qū)別IHttpHandler是否能夠再次處理相同的請(qǐng)求. 所以,如果擴(kuò)展HttpHandler的時(shí)候,那么上面的方法和屬性必須被實(shí)現(xiàn).

????? 怎么樣來(lái)實(shí)現(xiàn)?

???? 我下面將會(huì)結(jié)合著一個(gè)例子來(lái)說(shuō)明在一個(gè)一般的項(xiàng)目中,我們?cè)撛谀膬簛?lái)使用HttpHandler.現(xiàn)在假設(shè)我們正在開(kāi)發(fā)一個(gè)項(xiàng)目,而這個(gè)項(xiàng)目需要處理成千上萬(wàn)的圖片.這些相對(duì)來(lái)說(shuō)還是比較簡(jiǎn)單的,但是難就難在,我們?nèi)绾卧跀?shù)據(jù)庫(kù)的BLOB字段中提取出所有的圖片,然后展示出來(lái).一般來(lái)說(shuō),為了處理這些,我們會(huì)建立一個(gè)新的頁(yè)面,然后將這些圖片以字節(jié)流的方式從數(shù)據(jù)庫(kù)中提取出來(lái).生成的代碼可能如下:

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

在上面,imImage就是一個(gè)圖片控件,同時(shí)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();

?

?

????? 如果我們考慮著使用上面的代碼段來(lái)讓一個(gè)aspx頁(yè)面去操作一個(gè)單獨(dú)的數(shù)據(jù)庫(kù)連接的話,那么頁(yè)面上其他的內(nèi)容的展示將顯得不是那么重要了. 同時(shí),一個(gè)aspx頁(yè)面本身就有一系列的從Init開(kāi)始到Unload結(jié)束的事件,這些事件都是在這個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù)操作之前發(fā)生的.所以,如果我們利用上面的方法來(lái)試著展示更多的圖片到一個(gè)頁(yè)面上,她的效率的高低,你是懂的. 那么如何來(lái)解決這個(gè)呢?是時(shí)候該HttpHandler出場(chǎng)了.眾所周知,和aspx頁(yè)面請(qǐng)求順序比起來(lái),HttpHandler的請(qǐng)求正好是相反的,她在請(qǐng)求的末端被執(zhí)行.由于HttpHandler只有一個(gè)可以處理簡(jiǎn)單操作的ProcessRequest的方法,所以,她是不會(huì)加載那么多事件的. 但是ProcessRequest方法是如何響應(yīng)Response對(duì)象的呢?

  讓我們先看看ProcessRequest:

  public void ProcessRequest (HttpContext context) { }

  在上面,context對(duì)象有權(quán)限進(jìn)入請(qǐng)求的主對(duì)象中.比如當(dāng)我們利用Response對(duì)象進(jìn)行寫(xiě)字節(jié)流的時(shí)候,當(dāng)然,在其他的一些場(chǎng)合下,我們也可以利用HttpHandler,比如如果我們想把DataSet中的內(nèi)容導(dǎo)出到Excel中,同時(shí)我們想保存在我們自定義的文件格式,比如說(shuō)是.axd,那么我們就必須在配置文件中進(jìn)行正確的配置才行.

?

<httpHandlers>

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

<httpHandlers>

?

?

?上面種,verb代表著請(qǐng)求方式,如”GET,POST”,path可以寫(xiě)成”.axd”,type則是實(shí)際的Handler類(lèi)型.

  利用vs2005開(kāi)發(fā)一個(gè)HttpHandler

  首先,創(chuàng)建一個(gè)新的WebApplication工程,然后添加一個(gè)一般處理程序即可,代碼如下:

?

 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;

總結(jié)

以上是生活随笔為你收集整理的HttpHandler浅析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。