10多年前,ASP的出现使全世界的WEB设计者摆脱了C/C++的繁杂,大幅提升了页面的开发效率

然而一直到数年之后,asp的解释一直握在微软手里,后来阿帕奇也支持asp了,虽然没有IIS那么强大,但是它却标志了Asp可以移植到非Windows系统中

事物总是像太极那样阴阳相生,当WEB开发者们渐渐的遗忘了C/C++等更底层的语言,熟悉了脚本后,却渐渐的苦于忍受IIS的种种制约,安装,建站,设置等等

那么就导致一种想法,能不能有一个程序,绿色免安装的,能够解释asp或其他脚本呢?答案是肯定的,只是这里面有个简单的问题,就是asp的解释

此类的工具最出名的是Netbox,这个工具的安装包很小,1点几M,发布成独立的程序也只有几百K,能提供ASP绝大部分的功能,Netbox是加壳发布的

那么我能不能得到Netbox的源码,我不想让别人知道我使用Netbox.这一点恐怕比较困难,虽然Netbox是免费的,但是这也是利益的所在.

不过要实现Netbox其实也不难,我们在讲ASP开发的时候,会提到一个名词:内置对象.

比如Server,Session等等,ASP支持两种脚本vbs和js,那么大家想到了什么呢?不错,ScriptControl

这个控件的文件名是msscript.ocx,是对一个动态库的封装,这个动态链接库是msscript.dll.这个ScriptControl支持的就是这两种脚本

印象最深的莫过于msc.AddObject Me, "Form1", True,这样在脚本中的语句Form1.Caption = "fuck you"其实就是设置窗口的标题

这里代码是VB的代码,所有VBS,VBA什么的都是VB的子集,VB6程序都是在vbvm60.dll这个虚拟机中运行的,其实VC也可以调用ScriptControl

只是C/C++调用COM比较麻烦,如果使用MFC什么的,你还要学习类的构架,人并没有100多万个CPU...

那么我们可以用一个Server类模块, 然后Public Server As Class1, Set Server = New Class1, 那么脚本中就可以调用Server这个所谓的内置对象了.

当然你需要精通VB语言, 比如Session.Cookie是一个Collection,它是一种无序的数组,也就是集合,还有其他的东西, 那么ASP页面并不是vbs或js纯脚本,怎么解释?

其实也简单,多几个东西而已,<@xxx>必须是首行,设置一些全局的信息,比如字符编码,可以用StrConv,最终是调用MultiByteToWideChar和WideCharToMultiByte.

然后是一个逆向处理的过程,如

<tr>

<%For i = 0 To 10%>

<td></td>

<%Next%>

</tr>

我们知道<%%>之间的是脚本,要解释,其实要反过来处理,%><%之间的全部换成Response.Write,即

Response.Write "<tr>"

For i = 0 To 10

Response.Write "<td></td>"

Next

Response.Write "</tr>"

另外必须要精通HTTP协议,比较流行的是HTTP 1.1,超文本传输协议还是比较好理解的,比如Response.Buffer = True那么就要使用Chunked的方式传输生成的html脚本.

一句话就是用VB+ScriptControl可以实现ASP脚本的解释.到此,天啊,那么麻烦!

不错,上一层的应用也许很简单,很强大,满足人们的需要,但是底层的一些反复使用的计数确是十分繁杂的,最终这些东西都是CPU在执行指令,CPU执行的过程是电路的过程

电阻,电容,二极管,三极管,晶振...

那么有没有简单点的?我天生是懒虫.有,用ISAPI直接调用ASP.DLL,这个DLL在IIS里面有,就是负责ASP页面的解释.

由于ASP的一些先天性缺陷,现在的Web一般都用ASP.NET,还有就是开源的PHP.总体来说这两者各有优缺点,注意无论发不成托管代码怎么编译

最终.NET程序还是脚本,微软称之为IL,即中间语言,只不过这种脚本是二进制形态的,不是CPU指令,因此可以很快解释,并且与系统无关

这就是为什么.NET程序可以很容易被破解的原因.然而不论ASP.NET还是PHP,最终还是免不了那么些安装再安装的繁琐事,为了给学生或朋友展示一段代码

这些琐事是很痛苦的,更痛苦的是过程中再出现莫名其妙的错误,这时候我们叫做蛋疼

雷雨声把握吵醒,于是写点东西,罪过罪过...

浅谈ASP脚本的解释的更多相关文章

  1. 【ASP.NET MVC系列】浅谈ASP.NET MVC 路由

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  2. 【ASP.NET MVC系列】浅谈ASP.NET MVC八大类扩展(上篇)

    lASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操 ...

  3. 【ASP.NET MVC系列】浅谈ASP.NET 页面之间传值的几种方式

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  4. 【ASP.NET MVC系列】浅谈ASP.NET MVC运行过程

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  5. 【ASP.NET MVC系列】浅谈ASP.NET MVC 视图

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  6. 【ASP.NET MVC系列】浅谈ASP.NET MVC 视图与控制器传递数据

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  7. 【ASP.NET MVC系列】浅谈ASP.NET MVC 控制器

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  8. 【ASP.NET MVC系列】浅谈ASP.NET 程序发布过程

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  9. 浅谈ASP.NET ---- 系列文章

    [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作篇)(下) [04]浅谈ASP. ...

随机推荐

  1. 扩展类加载器-------改变JAVA的父优先类加载顺序

    java的类加载机制默认情况下是采用委托模型:当加载某个类时JVM会首先尝试用当前类加载器的父类加载器加载该类,若父类加载器加载不到再由当前类加载器来加载,因此这种模型又叫做“父优先”模型. 但是在实 ...

  2. java快速获取大图片的分辨率(大图片格式JPG,tiff ,eg)

    问题描述:怎样快速获取一个20MB图片的分辨率? 程序代码: package test; import java.awt.Dimension; import java.awt.image.Buffer ...

  3. PLSQL Develop 配置

    plsq 连接oracle数据库的配置步骤: 1.下载oracle客户端: 下载地址:http://www.oracle.com/technetwork/topics/winx64soft-08954 ...

  4. Mac下安装Mysql出现 Can’t connect to local MySQL server through socket '/tmp/mysql.sock'

    在Mac下安装mysql出现 Can't connect to local MySQL server through socket '/tmp/mysql.sock' 错误,解决如下: $ unset ...

  5. 多线程与网络之NSURLConnection发送请求

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  6. Windows内核编程之:分页内存与非分页内存 #define PAGEDCODE code_seg("PAGE") (转)

    原文链接:http://blog.chinaunix.net/uid-24504987-id-161192.html Windows规定有些虚拟内存可以交换到文件中,这类内存被称为分页内存 有些虚拟内 ...

  7. STM32之CAN ---CAN ID过滤器分析

      1 前言 在CAN协议里,报文的标识符不代表节点的地址,而是跟报文的内容相关的.因此,发送者以广播的形式把报文发送给所有的接收者.节点在接收报文时,根据标识符(CAN ID)的值决定软件是否需要该 ...

  8. Android 网络权限配置

    Android开发应用程序时,如果应用程序需要访问网络权限,需要在 AndroidManifest.xml 中加入以下代码 <uses-permission android:name=”andr ...

  9. 题解西电OJ (Problem 1003 -最喜欢的数字)--动态规划

    Description zyf最喜欢的数字是1!所以他经常会使用一些手段,把一些非1的数字变 成1,并为此得意不已.他会且仅会的两种手段是: 1.把某个数m除以某个质数p——当然p必须能整除这个数,即 ...

  10. [解决]Kali Linux DHCP自动获取IP失败 坑爹的VMWare桥接

    root@kali:~# service networking restart [....] Running /etc/init.d/networking restart is deprecated ...