iis处理请求随记回顾

----http是无状态的,

每次http请求户不影响,都是独立的;不会记的上次请求;

-------iis原理:输入地址--socket封装请求体报文--发送---iis解析封装响应体---返回;

----httpcontext-两个对象:httprequest(封装http请求)和httpResponse(封装相应响应);

---请求的报文

httprequest解析请求报文,分割请求体的各个部分;

---请求原理总结:

发送一个请求----有httpApplication的processrequest方法 创建一个httpcontext上下文--

并将请求报文信息封装到httpcontext上下文的httprequest中,并创建响应报文httpresponse;

--代码:

//将请求报文封装

1.HttpContext context=new HttpContext("requestr");

//封装响应

2.HttpApplication application=new HttpApplication();

3.application.ProcessRequest(context);

//发送相应报文:(头部和主体)

4.socket.Send(context.Response.GetHeader());

4.socket.Send(context.Response.BodyData());

 

----HttpApplication.ProcesssRequet的内部实现

public class HttpApplication

{

   public void processRequest(hhttpContext context)

   {

      //处理当前请求,并将相应正文放入response中

      //处理静态文件js,css,html,htm

      //模拟请求静态页面(根据请求判断css,jpg,js,html等类型)

      //获取服务端绝对路径

      string currenturl=AppDomain.CurrentDomain,baseDirectory;

      //拼接总路径

       string fileName=path.combine(currenturl,context.request.requesturl);

       context.response.bodydata=file.readallbytes(filename);

   }

}

----处理动态页面的实现:

public void ProcessDynamicFile(httpcontext context)

{

   //获取请求类文件即类名

   string classname=path.getfilenamewithoutextension(context.request.requesturl);

   //通过反射获取当前命名空间

   string namespace=system.reflection.methodbase.getcurrentMethod   ().DeclaringType.Namespace;

   //拼接

   string fullname=namespace+"."+className;

   //因为每页页面实现Ihttphander(内部封装了ProcessRequest(context)方法;

   IhttpHandler obj=(IhttpHandler)System.reflation.Assembly.getexecutingassembly().

   createinstance(fullName,true);

   obj.processRequest(context);

}

转载于:https://www.cnblogs.com/guozefeng/p/3439192.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值