一直希望能找在Linux环境下运行的ASP运行环境,今天总算得偿所愿,将iasp配置成功。有了这个解决方案,将asp迁移到Linux主机当中成为了可能。对数据库的支持我比较担心的是对Access数据库的支持,有纯Java实现的UCanAccess的开源项目,可以支持在Linux平台下访问Access数据,但所有连接数据库的代码都需要修改。另外我测试了一下iasp对JScript的语法的支持程度,发现不支持匿名函数,原型链等特性,这是JScript最为强大和吸引人的地方。所以这个方案并没有实施的价值,真正有价值的方案应该是不需要修改源代码的。随着自己对虚拟机的深入理解,应对遗留Window的程序,用kvm虚拟机应该是最佳的解决方案。

1 系统环境

系统:Arch Linux 4.6.3-1-ARCH WebServer: apache 2.0.63 ASP:iasp 2.1.01 JDK: 1.6

2 安装apache 2.0.x

我在apache 2.4上面安装iasp,启动apache的时候,出现以下提示:

httpd: Syntax error on line 527 of /etc/httpd/conf/httpd.conf: Cannot load /usr/lib/httpd/modules/mod_iasp.so into server: /usr/lib/httpd/modules/mod_iasp.so: undefined symbol: ap_pstrdup

出现这个问题是因为iasp2.1.1发布的时候apache最高的版本是2.0.x,而2.0和2.4是两个不同的开发分支,api会有一些差异导致的。想支持apache2.4,需要自己动手去修改modiasp.c的源代码,这个难度就会比较大了。 托网友的福,已经有人已经把iasp修改成支持2.2版本的apache,可以用2.2版本的apache也不错,起码官方还在维护2.2版本的apache。我看到多数网友使用的2.0.x来做的测试,我也首先从apache 2.0.x开始搭建测试环境,确实把这个测试环境搭建起来了。 首先下载apache 2.0.x,http://archive.apache.org/dist/httpd/httpd-2.0.63.tar.bz2

cd /tmp
wget -c http://archive.apache.org/dist/httpd/httpd-2.0.63.tar.bz2
tar xvjf httpd-2.0.63.tar.bz2
cd httpd-2.0.63
./configure --prefix=/usr/local/apache2
make
sudo make install
如果编译时候出错libexpat
rm /usr/lib/libexpat.so
ln -s /lib64/libexpat.so.0.5.0 /usr/lib/libexpat.so

3 安装iasp

安装iasp困难的地方在于选择合适的apache版本,由于iasp已经没有人维护了,默认只支持到apache 2.0.x。网友测测试过默认支持的最高版本是apache 2.0.56。有个比较耐心的网友,将iasp修改到可以支持apache 2.2.x。 我只在csdn找到iasp 2.1.01的下载地址,如果要下载的,去注册个账号。

cd /tmp
tar xvzf iASP2.1.01.tar.gz
./install.sh
#根据提示安装,需要指定jdk路径,iasp安装目录/usr/local/iasp21,apache配置目录/usr/local/apache2/conf
cd /usr/local/iasp21/bin/apache/source/2.0
#编译安装(会自动复制模块到apache modules)
/usr/local/apache2/bin/apxs -i -c *.c
#修改httpd.conf
sudo vim /usr/local/apache2.0/conf/httpd.conf
#添加如下内容
# iASP Setting
LoadModule iasp_module "modules/mod_iasp.so"
Alias /iasp "/usr/local/iasp21"
IaspConfig server "/usr/local/iasp21/properties/server.properties"
IaspConfig rules "/usr/local/iasp21/properties/rules.properties"

#启动apache和IASP:
sudo /usr/local/apache/bin/apachectl start
sudo /usr/local/iasp/iasp21/start-server.sh

sudo vim /usr/local/apache2.0/htdocs/index.asp
<%
Response.Write "Hello world"
%>

4 运行例子

测试环境搭建起来了,我比较关心的是iasp对jscript的支持程度,发现结果并不如意。我简单地做了如下测试

  <%@language="jscript" codepage="65001"%>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<%
Session.CodePage = "65001";
Response.Write("中文不乱码!");
//正常输出
function testcallback(callback){
return callback();
}
//testcallback(function(){return true;});
//Halcyon JScript compilation error 2786
function Person(_name){
this.name = _name;
}
//Response.Write(Person.prototype);
//Halcyon JScript runtime error
var p = new Person("wing");
Response.Write(p.name);
//正常输出
var p = {name:"wing",age:30};
Response.Write(p.age);
//正常输出
%>

5 测试连接数据库

iasp的sample中的样例程序已经比较旧了,例子中所用到的驱动程序,现在已经不适用了,我下载了最新版的jdbc驱动,修改start-server.sh脚本,把驱动添加到启动脚本的classpath中,我测试了三种最常用的数据库,都可以成功连接到数据库。

5.1 MySQL

好久没有实用过mysql,Arch Linux已经抛弃了Oracle版的mysql,用社区维护的mysql分支MariaDB取而代之。安装过程参考https://wiki.archlinux.org/index.php/MySQL_(简体中文)

#导入测试数据
mysql -u root -p
create database MysqlDB
source /usr/local/iasp21/docs/iasp/samples/database/MysqlDB.sql
#修改源代码,更新驱动名称
sudo vim /usr/local/iasp21/docs/iasp/samples/vbscript/ado/animals/main.asp
#DrvArry(1) = "net.ucanaccess.jdbc.UcanaccessDriver"
#DrvArry(5) = "com.mysql.jdbc.Driver"
firefox http://localhost/iasp/docs/iasp/samples/vbscript/ado/animals/selectdb.asp &
#修改连接MySQL数据库的字符串为{jdbc:mysql://localhost:3306/MysqlDBy}

5.2 Access

Linux也有查看Access数据库的GUI工具gmdb2,这个工具在mdbtools工具集中,可以在BlackArch的源里面下载安装到这个工具,具体安装方法可以查看参考文章MDB Tools project

firefox http://localhost/iasp/docs/iasp/samples/vbscript/ado/animals/selectdb.asp &
#修改连接Access数据库的字符串为{jdbc:ucanaccess:///usr/local/iasp21/docs/iasp/samples/database/AccessDB.mdb}
Last Updated 2018-10-14 日 23:38.
Created by Emacs 25.1.1 (Org mode 9.1.14)