不拖控件ASP.NET——一般处理程序

    习惯了微软提供的一系列Web控件,用着很方便,最近看了一种新的方式不用拖控件就能实现同样的功能,究竟拖控件好还是不拖控件好,随着以后学习的深入,答案会慢慢揭晓,希望一直关注哦!今天我们来看看一般处理程序。

1.      一般处理程序(HttpHandler)

?  引入

    我们从一个网站打开的流程讲起。如下图:

    流程细说:用webForm开发一个模拟的登陆页面,用户打开登陆页面,填入相应的用户信息:用户名和密码,点击【登陆】按钮,浏览器将用户名和密码发送给网站服务器,网站服务器让负责处理登陆请求的asp.net处理程序来处理这个请求,处理程序判断用户名和密码是否正确,之后将处理结果返回给浏览器。

    上网的本质:上网就是从服务器向浏览器传送Html格式描述的网页,每次请求都带回来新的页面;页面中的图片、js、css在单独的请求中。

    注解:我们知道像Html文件、css文件以及javascript是由浏览器进行解析的,在上面的登陆流程中,基本上可以分为三部分:向服务器发请求(请求)—服务器进行处理渲染成html(处理)—返给浏览器并且画出来给客户端(响应)。

?  HttpHandler

    从上面的引入我们知道浏览器与服务器请求-处理-响应的交互方式,那么HttpHandler(一般处理程序)扮演的即是服务器处理者的角色,整个操作是:

    浏览器搜集用户操作向服务器发送请求——服务器处理请求并且把结果渲染成html文件——浏览器响应服务器的操作,并且把返回的结果进行解析和显示。

?  实例

    第一个例子

    此时如果没有挂到iis的网站的默认目录下需要手动输入地址,以及参数name和age即可

    此时httphandler.ashx代码为:

<strong><span style="font-family:Microsoft YaHei;font-size:14px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace handler
{
    /// <summary>
    /// TestHandler 的摘要说明
    /// </summary>
    public class TestHandler : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            //context.Response.ContentType = "text/plain";
            context.Response.ContentType = "text/html";
            string action = context.Request["name"];

            string isVIP=context.Request["isVIP"];
            int age = Convert.ToInt32(context.Request["age"]);
            context.Response.Write("<font color='red'>Hello "+action+"</font>");
            context.Response.Write("<font color='green'>我今年 " + age + "</font>");
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}</span></strong>

此时效果是:

    第二个例子

    我们发现每次手动输入参数的时候是很容易出现错误的,所以我们可以用html表单自动提交给服务器进行处理

    修改代码如下:

HTML页:

<strong><span style="font-family:Microsoft YaHei;font-size:14px;"><!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form action="TestHandler.ashx" method="post">
        姓名:<input type="text" name="name" /><br />
        年龄:<input type="text"name="age" /><br />
              <input type="checkbox"name="isVIP" />
              <div name="aaaaa">哈哈哈哈</div>
        <textarea name="msg"></textarea>
        <select name="Prov">
            <option value="bj">北京</option>
            <option value="tj">天津</option>
            <option value="sh">上海</option>

        </select>
        <ul>
            <li><input  type="radio" name="gender" value="male"/>男</li>
            <li><input  type="radio" name="gender" value="female"/>女</li>
        </ul>
        <ul>
            <li><input  type="radio" name="national" value="han"/>汉</li>
            <li><input  type="radio" name="national" value="man"/>满</li>
        </ul>
        <input type="submit" />
    </form>
</body>
</html>
</span></strong>

一般处理程序:同上。

    操作步骤详解:

      1.      Html表单<form>可以自动给服务器提交参数(get是通过url,post是通过报文体),不用用户自己拼url。Action指定把表单内容提交给谁。即action和method指定了提交给哪个HttpHandler以及提交方式。

      2.      浏览器向服务器端提交数据,被提交数据的表单(input、select、textarea等)放到form中,form通过action属性设定表单被提交给哪个页面,为了在服务器端取出来表项的值,需要在HTML为表单元素设定name属性。

      3.      注意id是给js操作dom的,name才是提交给服务器用的。Id不能重复,name可以重复。

      4.      服务器端(此处是httphandler)用context.Request[“username”]来根据表单项的name来获取提交的属性值。

    特别注意:

      1.      点击提交按钮时是浏览器将用户填写的文本框等空间中的值“提取”出来发送给服务器,而不是服务器来读取用户填写的信息

      2.      可以被提交到服务器的标签具有以下的特性:

        A、 只能为Input、textarea、select三种类型的标签。只有这些标签用户才可能修改值,<lable><p>、<font>,只是显示,没有提交到服务器的必要。当input=submit的时候,只有被点击的按钮的value才会被提交。提交的表单的内容,会提交到服务器。(此外有一种隐藏控件input=“hidden‘,是一种服务端控件,也会被提交到服务端,原因在于其在浏览器上映射成的是input控件,type="hidden"。)

        B、 只有三种标签的value属性的值才会提交给服务器,input标签的title、type等属性,只是显示,用户无法修改。

        C、 标签必须设定name属性,如果要将标签的value值提交到服务器,则必须为标签设定name值,提交到服务器的时候将会以“name=value”的键值对的形式提交给服务器,name是给服务里用的,id是js操作dom用的,对于radiobutton,同name为一组,选中的radiobutton的值被提交到服务器。

        D、 放到form标签内,只有放到form标签内的才可能被提交到服务器。Form外的input等标签被忽略。

2.      Get和post

?  区别

    1.      Get是通过url传递表单值的,post通过url看不到表单域的值;

    2.      Get传递的数据量是有限的,如果传递大数据量不能用get,比如type=”file’,<textarea>发表大段文章。Post则没有这个限制。但是post无法通过url在其他用户中还原,这样会显示不对。

    3.      Get方式url数据格式,服务器端文件名后跟着“?“,由于客户端可能向服务器端提交多个键值对,键值对之间用”&“进行分割,如果url存在汉字或者特殊字符,则需要对其进行编码。

?  示例显示

    在ie9用F12开启网络流量捕获即可

    Get请求标头中含有请求时发送的数据;请求正文为空:

    Post请求时发送的数据从标头字符串中,转移到请求正文中

3.      http协议以及报文请求

?  协议

    1. 连接(Connection):浏览器和服务器之间传输数据的通道。一般请求完毕就关闭,http不保持连接,或称为短连接。这样的优点是可以增强服务器处理的客户端并发请求数;缺点是会降低服务器处理速度,因为建立连接的速度很慢。

    2. 请求(Request):浏览器向服务器发送的请求信息,包含请求的类型、数据、浏览器(客户端)的信息(语言、浏览器版本、IP地址)等。

    3. 响应(Response):服务器处理浏览器请求后返回的数据,包含请求是否成功、错误码等。

?  报文解析(请求一个页面比如csdn自己的)

      请求

         1、Get/HTTP/1.1表示向服务器用GET方式请求page,使用Http1.1协议。

    2、Accept-Language表示浏览器支持的语言种类。User-Agent为浏览器的版本信息。

    3、Referer:为(图片、js、css文件等)来源页面、所属页面。

    响应

      响应码:“200”OK 表示请求响应成功;

      “302”:Found表示重定向,Response.Redirect()使浏览器再请求一次重定向的地址,重定向请求方式为Get。

      “404”:Not Found表示未找到所请求页面。

      “500”:表示服务器内部出现错误

 

   
Content-Type:text/html:表示返回数据的类型,服务器通过此属性告诉客户端响应的数据的类型,这样浏览器就根据返回数据的类型来进行不同的处理,如果是图片类型(image/gif)就显示,如果是文本类型(text/plain)就直接显示纯文本代码等等。可以自己试试比较看设成text/html和text/plain的区别。动动手吧。

4.      总结

    了解了浏览器和服务器端是如何工作的,更加便于我们理解代码,之前我们一直用控件拖拽进行开发,看似很方便,其实在拖拽控件的时候,控件会给我们生成一些其他的东西。

    在这里我们利用了html+httphandler实现了浏览器和服务端的交互,其实相当于web窗体,我们知道web控件都是能够提交到服务器,因为有runat=“server“,但是我们在此时利用form表单提交到handler进行处理,此时hanler相当于服务端,其好处还需要在以后的深入学习中慢慢体会,学习仍在继续,请继续关注~

时间: 2024-10-05 04:44:49

不拖控件ASP.NET——一般处理程序的相关文章

不拖控件ASP.NET——NVelocity(2)

    上节课我们讲述了NVelocity的简单应用,但是没有和数据库打交道,这次我们来和数据库连接实现人员的增删改查. 1.      上篇博客回顾     链接:http://blog.csdn.net/u010955843/article/details/42528761     开讲之前,我们先来回顾上一节课讲的内容,主要是两个页面,一个是一般处理程序的页面,另一个是渲染后的模板. ?  机制     上篇博客中我们建立一个person类,并且在一般处理程序中对其进行了赋值,之后交给了模

不拖控件ASP.NET——NVelocity(1)

    模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档.今天我们主要来介绍NVelocity模板引擎 1. NVelocity基础 ?  定义     NVelocity是一个基于.NET的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由.NET代码定义的对象.从而使得界面设计人员与.NET程序开发人员

不拖控件ASP.NET——探知cookie和session(2)

    接着上篇的博客我们来讲解服务器端保存数据的机制-session     我们知道cookie是保存在客户端的,这样数据就存在一个不安全性,此外还有 一个问题就是不能够存储大量的数据,我们上篇博客还遗留一个问题就是客户端是可以篡改数据的,相当于保留在病人手上的病历本是可能被用户篡改的(一般情况下,用户不会篡改,这样多危险了,医生误诊怎么办?哈哈)     此外医生会给每个患者编制一个编号,并且自己再保存一个编号,这样当病人来的时候根据编号来识别病人的身份,当然用户会可以别人的编号猜出来自己

不拖控件ASP.NET—探知cookie和session(1)

1.      为什么会出现cookie和session? ?  先看一个例子:     我们还是使用之前的NVelocity,不清楚的参看链接:http://blog.csdn.net/u010955843/article/details/42977533,同样建立commonhelper类,里面封装NVelocity模板,并且建立html也作为渲染的模板进行显示.      html页 <span style="font-family:Microsoft YaHei;">

不拖控件的asp.net编程方法——第1回

以前写的asp.net程序基本上都用了webfrom的控件编写的,当然有个好处就是易入门.快速效率高,但感觉自己这了几个小系统,还是没学到什么东西,感觉心里没底,因为都是封装好的东西,拿来就用的,功能能实现,但原理性的东西不明白,所以遇到有些错误根本无从下手,虽然貌似很多公司开发都有控件,但作为学生个人觉得还是别用好,当然那些自定义控件的又另当别论. 本想深入研究asp.net MVC,但发现不懂的知识太多了,所以现在暂时先学HTML+ashx这样的形式,换成这种形式写还真不习惯,下面把我今天学

【Visual Basic】纯代码不拖控件,利用动态生成控件的方式完成一个简单的四则运算计算器

vb6是一个典型的拖控件加代码的编程代表,因此也一直被认为难登大雅之堂,但是,在vb6中可以完全纯粹地使用代码控制这个窗体与窗体的控件.这样生成出来的控件位置摆放精确无比,无须拖好控件之后,再利用工具栏的"格式"菜单慢慢地调整大小.这种方式的确定是声明一个控件要耗费大量的代码,但其实Java中的Swing,HTML+CSS排放控件,比这好不了多少. 当然,比vc6中mfc的代码简单了不少,具体见<[mfc]基本对话框程序--加法器>(点击打开链接) 一.基本目标 利用纯粹代

ASP.NET控件&lt;ASP:Button /&gt; html控件&lt;input type=&quot;button&quot;&gt;区别联系

ASP.NET控件<ASP:Button />-------html控件<input type="button">杨中科是这么说的:asp和input是一样的东西 服务器只认识input,我们可以直接写input 但是asp是要把自己自动翻译成input再交给服务器的.其实是一样的东西 写写我看到的区别:                asp控件,直接可以用c#编程                input加上 runat=“server” 也被c#编程了 说白

【实战项目】【FLEX】#900 实现拖控件功能

一.功能说明:拖控件的功能(类似FLEX,VS 里面的拖控件). 提示:大家对事件的注册和派发的说法可能不一样.因为在FLEX中和在Java中,叫法有的区别.但是本质是一样的. 注册事件  == 设置监听事件    ||       派发事件 == 触发事件  ,也有人叫 “进行广播”            大家知道什么意思就好.   说明: 1.Application页面(放置控件列表,页面容器,属性面板这三个模块的Application页面)[PS:以下简称:主页面 ] 1.1  主页面加载

文件上传控件asp:FileUpload

前端 使用的控件<asp:FileUpload ID="fileup" runat="server" /><span class="message">*</span> $("#btn_Save_").click(function () { var url = "Upload.aspx?_method=import";// url += "&_method