浅谈ASP脚本的解释
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脚本的解释的更多相关文章
- 【ASP.NET MVC系列】浅谈ASP.NET MVC 路由
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- 【ASP.NET MVC系列】浅谈ASP.NET MVC八大类扩展(上篇)
lASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操 ...
- 【ASP.NET MVC系列】浅谈ASP.NET 页面之间传值的几种方式
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- 【ASP.NET MVC系列】浅谈ASP.NET MVC运行过程
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- 【ASP.NET MVC系列】浅谈ASP.NET MVC 视图
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- 【ASP.NET MVC系列】浅谈ASP.NET MVC 视图与控制器传递数据
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- 【ASP.NET MVC系列】浅谈ASP.NET MVC 控制器
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- 【ASP.NET MVC系列】浅谈ASP.NET 程序发布过程
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- 浅谈ASP.NET ---- 系列文章
[01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作篇)(下) [04]浅谈ASP. ...
随机推荐
- 扩展类加载器-------改变JAVA的父优先类加载顺序
java的类加载机制默认情况下是采用委托模型:当加载某个类时JVM会首先尝试用当前类加载器的父类加载器加载该类,若父类加载器加载不到再由当前类加载器来加载,因此这种模型又叫做“父优先”模型. 但是在实 ...
- java快速获取大图片的分辨率(大图片格式JPG,tiff ,eg)
问题描述:怎样快速获取一个20MB图片的分辨率? 程序代码: package test; import java.awt.Dimension; import java.awt.image.Buffer ...
- PLSQL Develop 配置
plsq 连接oracle数据库的配置步骤: 1.下载oracle客户端: 下载地址:http://www.oracle.com/technetwork/topics/winx64soft-08954 ...
- 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 ...
- 多线程与网络之NSURLConnection发送请求
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- Windows内核编程之:分页内存与非分页内存 #define PAGEDCODE code_seg("PAGE") (转)
原文链接:http://blog.chinaunix.net/uid-24504987-id-161192.html Windows规定有些虚拟内存可以交换到文件中,这类内存被称为分页内存 有些虚拟内 ...
- STM32之CAN ---CAN ID过滤器分析
1 前言 在CAN协议里,报文的标识符不代表节点的地址,而是跟报文的内容相关的.因此,发送者以广播的形式把报文发送给所有的接收者.节点在接收报文时,根据标识符(CAN ID)的值决定软件是否需要该 ...
- Android 网络权限配置
Android开发应用程序时,如果应用程序需要访问网络权限,需要在 AndroidManifest.xml 中加入以下代码 <uses-permission android:name=”andr ...
- 题解西电OJ (Problem 1003 -最喜欢的数字)--动态规划
Description zyf最喜欢的数字是1!所以他经常会使用一些手段,把一些非1的数字变 成1,并为此得意不已.他会且仅会的两种手段是: 1.把某个数m除以某个质数p——当然p必须能整除这个数,即 ...
- [解决]Kali Linux DHCP自动获取IP失败 坑爹的VMWare桥接
root@kali:~# service networking restart [....] Running /etc/init.d/networking restart is deprecated ...