游客发表
ASP网页离开网站,离开照样能跑。网站P网前提是够单你得把该带的东西都带上。
我见过太多人把ASP和IIS绑死在一起,独运觉得没了IIS,离开ASP就是网站P网一堆废文本。这个印象来自一个事实:ASP是够单微软在IIS里塞进去的脚本引擎,靠asp.dll解释执行。独运但“依赖IIS”和“依赖网站”是离开两码事。网站是网站P网一个更大的概念——域名、端口、够单虚拟目录、独运应用程序池、离开权限配置,网站P网这些是够单IIS层面的管理单元。ASP网页本身只是一段嵌了<% %>标记的文本文件,它的运行需求比很多人想象的要低得多。
我手头有个老项目,2003年写的,纯ASP加Access数据库。前两年客户要把它搬到一台内网机器上做单机查询工具。那台机器不能装IIS,因为IT部门锁了系统组件安装权限。怎么办?我试了一个办法:把asp.dll和它依赖的几个运行库文件拷到本地,写了一个几十行的C++小程序,用ISAPI扩展的方式直接调用HttpExtensionProc入口,把ASP文件当参数传进去。结果跑起来了。页面里的Request、Response、Server对象都能用,只是Server.MapPath指向的物理路径需要手动映射一下。这说明ASP的运行时并不在乎自己是不是被一个完整的“网站”包裹着。
更简单的做法是用Windows自带的cscript.exe或wscript.exe。ASP的语法本质上是VBScript加一套内置对象。你把<% %>里的代码抠出来,补上Response.Write的替代实现——比如直接输出到控制台——就能在命令行里跑。我试过一个登录验证页,把数据库连接部分改成ADODB.Connection的本地调用,用cscript执行,输出了和浏览器里一模一样的HTML。区别只是没有HTTP头,没有Session和Application的跨请求状态。但单次请求的逻辑,完整保留了。
有人会问:那Session怎么办?Session确实依赖IIS的asp.dll进程外或进程内状态管理。离开网站,Session就没了。但这不是ASP语言本身的问题,是IIS给ASP附加的服务。你可以用文件或数据库自己实现一套会话跟踪,代码量不大。我见过一个用Cookie加Access表做的替代方案,跑了三年没出过事。
还有一个坑:global.asa。这个文件里的Application_OnStart和Session_OnStart事件,离开IIS就没人触发了。但你可以把里面的初始化逻辑抽出来,做成一个独立的.vbs文件,在需要的时候手动调用。我自己的做法是写一个bootstrap.vbs,在命令行启动ASP解释器之前先跑一遍,把全局变量和数据库连接池准备好。
说到底,ASP网页能不能单独运行,取决于你如何定义“运行”。如果要求完整的HTTP请求响应周期、Session状态、Server对象的所有方法,那确实需要IIS或一个兼容的宿主环境。但如果只是执行页面里的脚本逻辑、生成HTML输出,那ASP文件本身就是一个普通的文本文件,任何能解析VBScript并模拟那几个内置对象的程序都能跑它。
我后来把那个老项目改成了用cscript加一个轻量HTTP服务器(用VB6写的,不到2000行)来跑。客户端浏览器访问的是那个小服务器,服务器再把ASP文件当模板解析。性能比不上IIS,但胜在能塞进U盘里,插到任何Windows机器上双击就能用。客户很满意,因为他们的IT部门再也不用为装IIS走审批流程了。
所以别被“网站”这个词吓住。ASP网页的运行时依赖,比大多数人以为的要少。你需要的只是:一个VBScript引擎、几个模拟对象、以及一点把碎片拼起来的耐心。
友情链接