黑马程序员_学习笔记10_asp.net初探之一般处理文件模型

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------

 

什么是ASP.NET?

 ASP.NET一门技术,一门基于.NET平台 用于创建企业级B/S结构的技术。它可以使用任何支持CLR的编程语言开发网站。

ASP.NET包裹很多种技术,其中,最主线的。我觉得是,它自定义了一些asp.net控件 使的开发控件的易用性大大提升。

在整个ASP,NET网站的 请求------处理------响应的过程中,其实还是遵循最原始的一般处理文件模式下的开发规则。

asp.net在此基础上 提供了 将 asp.net服务器控件编译成最终得HMTL代码,和以及提供了完善的视图状态机制,可以让编程人员很舒服的创建一个网站,

而无需关注其内部的运行机制。

实质上 asp.net的每一个后台.cs文件 都是继承自System.Web.UI.Page,而Page有是继承自IHttphanlder这个接口的,这个结构 定义了一个方法和一个属性。

下面是源代码:

public interface IHttpHandler
    {
        // 摘要:
        //     获取一个值,该值指示其他请求是否可以使用 System.Web.IHttpHandler 实例。
        //
        // 返回结果:
        //     如果 System.Web.IHttpHandler 实例可再次使用,则为 true;否则为 false。
        bool IsReusable { get; }

        // 摘要:
        //     通过实现 System.Web.IHttpHandler 接口的自定义 HttpHandler 启用 HTTP Web 请求的处理。
        //
        // 参数:
        //   context:
        //     System.Web.HttpContext 对象,它提供对用于为 HTTP 请求提供服务的内部服务器对象(如 Request、Response、Session
        //     和 Server)的引用。
        void ProcessRequest(HttpContext context);
    }


第一个属性 IsReuable 的意思是,用户每次 提交进来的时候,是否都是同一个当前实例。一般选择fasle。保证每一次请求都是一个新的实例。

第二个 方法:PrcessRequest(HttpContext context);就是Web服务 请求----处理---响应 这个模式中最为核心的方法了,其中参数context是一个封装了

用户从和客户端提交过来的信息的一个对象,它提供了为当前请求服务的内部服务器对象 Request ,Response,和server等。

在ASP.NET模式下,每一次的用户提交 其实都是在实现了 IHttpHandler这个接口的方法PrcessRequest(httpContext  context);检索用户提交过来的信息,

只不过asp。net提供了完善的视图状态保存机制,有时候就会提交过来一些不必要的信息。影响网站的速度,增加网站的流量。

所以,在开发网站的时候,一般前台 还是使用传统的ashx模式去实现比较好,因为asp.net提供了一些功能有时候就可能觉得那有点多此一举了。

 

 

现在创建一个最原始的一般处理文件模式的网页,而并非使用asp.net平台下的aspx形式。

我们要创建一个标准的HTML页面,用于当做当期那页面的模板.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
    <form action="一般处理文件hanlder.ashx">
       <input type="text" name="mytxt" /><input type="submit" value="确定" />
    </form>

</body>
</html>


在此HTML中 我们只放置了 传统的input元素(input元素也称之为表单元素),并将它们放置在一个form表单里。

这个表单里的内容会提交到服务器后台的“一般处理文件handler.ashx”,也就是一般处理文件。

 

我们先来试一个最传统的方式来“回应”用户的这次请求。

using System;
using System.Web;

public class 一般处理文件hanlder : IHttpHandler {
    
    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "text/html";
        context.Response.Write("你好 ,你已经把当前页面提高到了后台的一般处理文件");
    }
 
    public bool IsReusable {
        get {
            return false;
        }
    }

}


在回应之前 我们的HTML页面的源文件是这个样子的

但当我们回应之后,会发现HTML标签都消失了 成为了这么一个样子。

然而 一般情况下 我们在提交某一个网站到服务器之后,服务器仍然会将当前页面的信息给我们传递回来,不会是上述这样一种情况。所以我们可以在一般处理

文件里面加上这么一句代码。

再次运行这个网站的时候,网站的外观又多回来了。

 

上述 两句代码的核心在 context.Respose.Write(content);//它是利用当前封装的http信息的对象,讲一个纯字符串输出到了http响应管道里面去了。

当里面的字符串是以html标签的形式存在的时候,浏览器就不会把它们当做的普通的字符串来处理,而是将它们解析,并相应的画在了用户的浏览器上。

 

 

只到上面这一步,我们起码做到了 当用户提交一个页面的时候,我们不但返回一个消息给用户,而且还能讲用户之前看到的那个页面也返回给用户。但是这样还是什么事情也没有做,因为我们的所有操作都未涉及到用户提交的数据的操作,这样的话,整个网站是无意义的。

所以,下面我们再来完善这个小demo,当用户在文本框中输入姓名的时候,我们在确定按钮后面加上一句 “XX”你好。

达此目的,我们在一般处理文件中加上这么一句代码:

这段代码的意思是 将用户提交过来的表单元素中name为mytxt的文件的value获取到。也就是上述的那个文本框的值。

 

我们在来执行这个例子。

其实细心的你 有时候会发现 在某些网站中,我输入了令狐冲 点提交之后,令狐冲这个名字依然还是保存在文本框里的,可是当前的例子中,

令狐冲这个名字已经消失了。

这是什么问题造成的呢。

其一:Http协议是无状态的,它就是一个通信的管道,它不存储两次通信之间的信息。

其二:我们其实是将用户提交过来的这个值存放在当前实现了IHttpHandler这个接口的一个实例中的,

当当前响应处理完之后,.NET的GC会回收当前这个实例,所以也无法存储这个变量值。

其三:其实,我们每次象用户提交的页面都只是一个写死的包含html标签的文件而已,所以它当然也不会去动态的保存你上次提交

过来的信息。

 

所以直到上述为止,这种模式下开发的网站 是无视图状态保存的。

 

 

 

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------
详细请查看: http://net.itheima.com/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值