博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
乱想(一)
阅读量:7157 次
发布时间:2019-06-29

本文共 4900 字,大约阅读时间需要 16 分钟。

      纸上得来终觉浅,绝知此事要躬行,若干年后,自己曾经写过的博文,收藏的博文也许成为自己学习的地方。写不出什么洋洋洒洒的文章,也没有生花妙笔的天赋,只希望用自己稍微一点点的坚持来弥补这些先天的不足。

   我这个人不喜欢长篇大作,也不喜欢议论纷纷,只是将自己突然想到的,记录下来,因为我喜欢健忘,甚至不到1分钟就可以将自己脑海中闪过的一个东西忘得一干二净。

    前面的博文中也说过,在写一个东西之前我总喜欢写一下自己的一些想法,和感触,当这些介绍完了之后,内容却是言简意赅,只言片语,让别人看了不知所云,所以今天决定一改前面的作风,来一个长篇累牍。

   最近完成了《ArcGIS API for Javascript开发教程》,目前正在校正之中,不久便会和大家见面,在我分享这个的同时,也希望得到大家的指点,算是互惠吧!

  在开发教程中有一章是JavaScript和服务器通讯相关的内容,因为时间关系,我只介绍了Web Service,准备后期补充点其他的料,这样内容也会让人觉得丰满点,其实通讯不仅仅用Web Service,JSP,ASP .NET等也是可以的,今天的这篇博文就是因为ASP.NET而突发其感。

ASP.NET的开发跟是将后台处理和HTML混合在一起了,初次接触的话可能不太适应,在这里我只讨论后台的这个,也就是和.aspx相关的.aspx.cs文件。在添加了一个aspx页面的时候,往往会在头文件中添加一行类似下面的语句:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebX.aspx.cs" Inherits="AspWebTest.WebX" %>

意思也应该很明确,就是当请求来的时候,可以交由CodeBehind指定的这个cs页面去处理,往往我们将这种方式就叫做“CodeBehind”,这种方式实现了页面布局和后台逻辑的分离,这也是ASP.NET的一个特点吧,因为ASP.NET的一个aspx不仅仅有一个这样的后台处理文件,还可以动态的生成浏览器可以识别的HTML文件,所以这个aspx文件就有了自己特有的生命周期,比如说何时实例化前台的这些服务器控件,什么时候初始化完毕等,页面什么时候加载完毕等,当然在.cs文件中有一个很重要的事件  protected void Page_Load(object sender, EventArgs e),对我们来说,代码往往就是从这里开始的。

也许说了这么多,看得人都看晕了,都不知道我在说什么,其实我也有点迷糊,因为按照我的作风,上代码让大家瞧一瞧似乎更能说明问题,但是已经说了是累牍,将就下吧。

如果我们要实现Javascript向ASP.NET发送请求,那么我们只需要在Page_Load下面通过Request对象和Response对象即可,将.aspx 页面中的东西都删除,只留下这样的一句话:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebX.aspx.cs" Inherits="AspWebTest.WebX" %>

如果还有其他的服务器控件,那么我当请求的时候,由于ASP.NET的生命周期,这些控件是要被解析的,这个是要时间的,因为我现在的目的是和这个无关的,所以只留下最开始的一句话。

这个功能是实现一个摄氏温度和华氏温度的转换,我自己新建一个html文件,ASP.NET工程生成默认的aspx文件被弃而不用,或者删掉自己新建立一个,通讯是通过XMLHttpRequest对象来完成的,相信看的人对这个已经很了解。现在很多框架都很好的封装了XMLHttpRequest,在这里我是原生的。

namespace AspWebTest{    public partial class WebX : System.Web.UI.Page    {             protected void Page_Load(object sender, EventArgs e)        {           string pStringAspx= HttpContext.Current.Request.RawUrl.ToLower();           //如何阻止用户直接访问aspx文件                     //是否首次加载            if (!Page.IsPostBack)            {                Response.Clear();                string temp = Request.QueryString["q"];                if (temp != null)                {                    try                    {                        double tempC = double.Parse(temp);                        string pResult = GetTem(tempC).ToString();                        Response.Write(pResult);                    }                    catch                    { }                }                Response.End();            }                    }        public double GetTem(double pTemp)        {            double pResult = pTemp * 5 / 9 + 32;            return pResult;        }    }}

 HTML文件的内容如下:

  温度转换              
测试:
结果:

 可以自己去跟踪下这个代码,看下,因为aspx是和html页面相关的,而我的目的只想处理请求和接受请求,那么这个也是有办法的,可以用ashx文件,关于这个大家可以动手搜索下相关资料。和aspx文件类似,在创建了ashx文件后,也有一个与其相关的.cs文件,在ashx文件中的声明都很雷同。

<%@ WebHandler Language="C#" CodeBehind="HandlerData.ashx.cs" class="AspWebTest.HandlerData" %>

代码内容如下:

 

using System;using System.Collections.Generic;using System.Linq;using System.Web;namespace AspWebTest{    ///     /// HandlerData 的摘要说明    ///     public class HandlerData : IHttpHandler    {               public void ProcessRequest(HttpContext context)        {            context.Response.ContentType = "text/plain";            context.Response.Clear();            string temp = context.Request.QueryString["q"];            if (temp != null)            {                try                {                    double tempC = double.Parse(temp);                    string pResult = GetTem(tempC).ToString();                    context.Response.Write(pResult);                }                catch                { }            }            context.Response.End();        }        public bool IsReusable        {            get            {                return false;            }        }        private double GetTem(double pTemp)        {            double pResult = pTemp * 5 / 9 + 32;            return pResult;        }    }}

功能算是实现了,但是有没有发现,后台的CS都是一个类,却没有构造函数,如果自己定义了一个带参数的构造函数,那么程序是运行不成功的。

 public  HandlerData(int x)         {

        }

错误信息自己可以看下。

不管是ashx,还是Web Service,或者aspx 都必须有一个不带参数的构造函数,因为默认没有定义,系统会自己生成,这个不带参数的构造函数才是我今天的话题,此事峰回路转,对不住了,我这个人喜欢乱想,也不知道是不是脑子有问题,类的是对象的模板,但是用的时候是要有具体的对象的,而对象是构造函数产生的,为什么定义一个有参数的构造函数就出错。

这就是因为系统在处理的时候使用了无参数的构造函数生成了对象,然后使用这个对象对外提供功能的,无参数的构造函数能提到自动初始化的作用,所以往往我们在看一些配置文件的时候,配置文件中也是通过类名,而且这个类也必须有一个无参数的构造函数,当然除了特殊说明,使用无参数的构造函数似乎是一个管理,看一些声明式编程的语言如WPF,Flex不都是这样,JSP的Servlet似乎也是如此,这背后不知道还有什么?

反射是一个很不错的功能或者工具,它能动态的生成你想要的对象,这后面也许真的是反射作怪,我不得而知。

 

 

      Web Service 我用的最多,大学的时候曾将图书馆的一个和Web Service相关的书籍《Web Services原理与研发实践》看了个遍,了解了UDDI,WSDL,SOAP,XML等,但是这个跟ashx通讯的区别是什么?在使用Web Service的时候,往往是通过代理交互,而后者好像直接是Ihttphandler,区别是否在这里,还需要确认,不到谜底出来,誓不罢休。

多了解一些细节,多了解一些区别,生活更美好!

 

 关于数据访问的内容大家可以参阅:(含WCF)

(比较老,就当看历史了)

 

转载地址:http://ymhgl.baihongyu.com/

你可能感兴趣的文章
获取Apppakge和Activity
查看>>
zencart如何获取产品多图
查看>>
Shell文本处理三剑客之awk
查看>>
Java及各工具(maven\tomcat\oracle)环境变量配置
查看>>
MySQL执行SHOW STATUS查询服务器状态状态之 Handler_read_* 详解
查看>>
思科路由与交换系列--------NA系列
查看>>
Linux基于LDAP进行用户认证
查看>>
ECMASCript6 之 Parmameters and Arguments
查看>>
用php调用graphviz轻松画拓扑图
查看>>
【Linux实验】安装Red Hat Linux操作系统的详细步骤
查看>>
listView 点击后变色 抬起后保持颜色
查看>>
joomla第一单元第十节K2内容模板和K2模块样式
查看>>
linux 常用命令
查看>>
Java进程CPU使用率高排查
查看>>
wamp2.4+composer+rabbitmq环境部署-176
查看>>
vbs读取文件内的信息将对应数据拷贝到其他路径
查看>>
Linux运维常见面试题之精华收录
查看>>
8.3 有序表查找
查看>>
Python类型——数字类型
查看>>
Oracle sequence 简单的使用
查看>>