我对ASP的感情,跟大海一样深。我用它实现了第一个动态网页,也用它做了毕业设计,毕业设计的名字是《毕业设计管理系统》(是不是有点绕)。在 PHP 和 ASP.NET、Java 高歌猛进的今天,很少程序员还在使用ASP了。

1996年微软公司推出 ASP(Active Server Page),很快成为中小型网站开发的首选。许多企业的门户网站和中小型新闻网站都采用基于ASP开发的内容管理系统。用友软件公司早期几款安身立命的ERP软件,也是采用ASP开发。

2000年微软发布第一个 .NET Framework Beta 版本,在 2003 年升级到 v1.1,推出了 ASP.NET,完善了桌面应用开发和 Web 开发。ASP.NET支持用 C# 或者 VB.NET 开发 Web 应用。无论是底层结构还是开发模式,都和ASP完全不一样。

ASP最大的特点是简单易学,我们来看一个提交表单的代码示例:

<html>
<body>
<form action="demo.asp" method="post">
Your name: <input type="text" name="username" size="20" />
<input type="submit" value="Submit" />
</form>
<%
dim username
username = Request.Form("username")
Response.Write("How are you today" & username)
%>
</body>
</html>

从代码示例可以看到,<%%>里面是用VB脚本编写的业务逻辑,嵌入在页面的HTML代码中中,倒是一目了然。这样组织代码的坏处也很明显,没有分离页面和逻辑,一旦业务变复杂,很难组织好模块,代码可读性急剧下降。

ASP扩展功能也是个麻烦事。ASP的VB脚本能够直接调用的系统接口非常有限,必须在服务器上安装额外的COM组件才能扩展功能,COM组件通常采用C++开发。相比之下,ASP.NET或者Java平台提供了足够的API,采用C#或者Java就能实现功能,并且可以随着应用程序一起打包上线。

扩展组件和业务代码分离会造成两个问题:ASP程序员要额外学习COM组件开发;服务器部署COM组件,增加运维成本。与ASP同时代的PHP也有类似的问题,但是它一直升级,已经孕育庞大的生态和解决方案,最终发展出PHP + Apache + MySQL的黄金组合,还有一大堆知名的网站如facebook、wordpress、wikipedia。

ASP也只能部署在Windows平台上,系统标配是Windows Server 系列和IIS。限制软件的运行平台,是微软一贯的作风。

曾经做毕业设计的时候,我对ASP爱不释手,也痛骂其诟病。最近我看了一些Go和Rust语言的发展历史和编程资料,突然理解ASP的设计思路了。在当时的环境下,微软作为一个商业公司在ASP上做出了最优的设计,理由如下:

  • 简单易学。简单就是生产力。
  • 功能简单。定位小型网站,完全够用。
  • 复用COM组件技术、VB语言。这两者比ASP还早出现。
  • 运行环境绑定Windows,符合商业利益。

世上只有两种编程语言:一种被人骂,一种没人用,每次看到技术社区讨论语言优劣的话题,我都直接划过不看。与其陷入语言优劣之争,不如多学习计算机基础和系统架构。

如果时光倒流,再回去做毕业设计,你会选择哪种语言呢?我会选择PHP,毕竟PHP是最好的语言

COM:COM是component的缩写,微软提出的一种软件的组件对象模型,是关于如何建立组件以及组件之间进行交互的规范。

COM组件:由以Win32动态链接库(DLL)或可执行文件(EXE)形式发布的可执行代码所组成。一个COM组件可以包含多个COM对象,一个COM对象又可以有多个接口。

COM对象:类似于C++语言中的类,类的每个实例代表一个COM,包括属性和方法。

Go:又称Golang,是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。Go作为服务器编程言语,很适合处理日志、数据打包、虚拟机处理、文件体系、分布式体系、数据库代理、网络等方面。

Rust:Rust是一门系统编程语言,专注于安全 尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言。Rust最初是由Mozilla研究院的Graydon Hoare设计创造,然后在Dave Herman, Brendan Eich以及很多其他人的贡献下逐步完善的。

ASP已老,尚能饭否?的更多相关文章

  1. ZBlog你选择PHP还是ASP?

    最近趁着空闲玩了一下zblog,对于很多第一次接触zblog的博主大多都会问zblog是PHP好还是ASP好?我们应该如何选择?其实,对于这个问题我也不是很懂,我个人比较倾向于PHP.今天我就整理一下 ...

  2. Delphi Web开发连载 --ThinkDelphi (序)

    如果把Delphi比作男人,那他曾经独步天下,笑傲江湖过: 如果把Delphi比作女子,那她曾经貌美如花,倾国倾城过! 但那只是历史,那只是曾经, 弹指一挥间,Delphi却似乎英雄迟暮,美人已老.. ...

  3. 跟我学CMD实战系列之二 ——数据压缩备份

    需求:每天下班时,将本地硬盘上的projects目录压缩为rar文件,文件名中必须含有当天日期信息,例如projects_20070902.rar. 分析:1. 压缩可以调用WinRAR的命令行版本r ...

  4. 从idea到ipo

    **************************************************************************************************** ...

  5. Team Foundation Server 2013 with Update 3 Install LOG

    [Info   @10:14:58.155] ====================================================================[Info   @ ...

  6. WebLogic写的网络爬虫

    一.前言 最近因为有爬一些招聘网站的招聘信息的需要,而我之前也只是知道有"网络爬虫"这个神奇的名词,具体是什么.用什么实现.什么原理.如何实现比较好都不清楚,因此最近大致研究了一下 ...

  7. [one day one question] nodejs require 缓存,无法检测文件变化

    问题描述: nodejs require 缓存,无法检测文件变化,当文件require引入后,当文件发生变动后即使再次使用require,返回的依然是第一次引入的文件内容,这怎么破? 解决方案: de ...

  8. [one day one question] Vue单页面应用如何保证F5强刷不清空数据

    问题描述: Vue单页面用按F5强刷,数据就恢复初始了,这怎么破? 解决方案: store.subscribe((mutation, state) => { sessionStorage.set ...

  9. [one day one question] webpack打包压缩 ES6 js、.vue报错

    问题描述: 报错: ERROR in js/test.js from UglifyJs Unexpected token punc ?(?, expected punc ?:? [js/test.js ...

随机推荐

  1. GEOS 使用记录

    GEOS 使用记录 官网 https://trac.osgeo.org/geos/ https://libgeos.org/ 下载地址 https://libgeos.org/usage/downlo ...

  2. 帝国cms 7.5版列表页分页样式修改笔记

    最近在用帝国改版我的个人博客站点,这个也是我第一次尝试用帝国来做博客,之前用过wordpress,每用一个新的程序,都会有些新的收获,也会学到一些新的东西. 在改用帝国之前,我也在网上大概了解了一下, ...

  3. 新手小白入门C语言第五章:C存储类

    一 .存储类 在理解C的存储类之前,首先要搞懂的概念有:作用域.生存周期.连接属性 C中的存储类说明符实际上是上述属性的不同组合 作用域:一个C变量的作用域可以是 代码块作用域(在函数内部代码块中定义 ...

  4. 跟我读CVPR 2022论文:基于场景文字知识挖掘的细粒度图像识别算法

    摘要:本文通过场景文字从人类知识库(Wikipedia)中挖掘其背后丰富的上下文语义信息,并结合视觉信息来共同推理图像内容. 本文分享自华为云社区<[CVPR 2022] 基于场景文字知识挖掘的 ...

  5. JSP标签、JSTL标签、EL表达

    JSP页面转发,附带数据 <jsp:forward page="/jsptag2.jsp"> <jsp:param name="name" v ...

  6. SpringBoot详解

    1.Hello,World! 1.1.SpringBoot简介 回顾什么是Spring Spring是一个开源框架,2003 年兴起的一个轻量级的Java 开发框架,作者:Rod Johnson . ...

  7. C++基础-5-运算符重载(加号,左移,递增,赋值,关系,函数调用)

    5. 运算符重载 5.1  加号运算符重载 1 #include<iostream> 2 using namespace std; 3 4 // 加号运算符重载 5 6 class Per ...

  8. 实战|Hadoop大数据集群搭建

    一个执着于技术的公众号 前言 今天来为粉丝圆梦啦 话不多说,咱直接进入实战环节 实验环境: 主机名        IP地址                 角色 qll251       192.16 ...

  9. .net core JWT验证,HttpContext.User为空的问题

    这几天在学习张老师.net core教程JWT部分,链接 https://mp.weixin.qq.com/s/7135y3MkUlPIp-flfwscig 教程使用的.net core 2.2, 在 ...

  10. git提交代码到GitHub操作-简易版(后续完善)

    一.git上传代码到GitHub 1.远程仓库GitHub创建好一个新仓库注意仓库名 2.本地建一个目录写代码,目录名与仓库命名一致 3.在目录下右键 git Bash here 打开git终端命令行 ...