ahtml 是一个服务端脚本语言。ahtml 以 AAuto 作为母语言,即可以实现在 html 中嵌入 AAuto 代码,嵌入规则很简单,与 php 类似:
<?
var tab = { "Hello"; "world" };
?>
...
<body>
<?
for (index, content in tab) {
response.write("<p>第", index, "条: ", content, "</p>", '\r\n');
}
?>
</body>
...
如果你希望代码读起来更加优美,也可以这样写:
...
<body>
<? for index, content in tab begin ?>
<p>第<?=index?>条: <?=content?></p>
<? end ?>
</body>
...
ahtml 需要运行在 Windows 操作系统下,且 Windows 平台必须高于 Windows 2000。
由于 ahtml 是一个 FastCGI 应用,而且目前 ahtml 仅支持通过命名管道 (Named pipe) 的方式同 Web 服务器(FastCGI 宿主)实现数据交互,您需要一个支持 FastCGI 的 Web 服务器软件(如 IIS)。
下载或检出最新的工程源码文件,用 AAuto Quicker 将工程发布为 exe 文件。
IIS6 默认不支持 FastCGI,需要下载扩展。
下载地址: https://www.iis.net/downloads/microsoft/fastcgi-for-iis
在命令提示符下运行:
cscript fcgiconfig.js -add -section:"ahtml" -extension:ahtml -path:"{所在文件夹}/ahtmlcgi.exe"
如果服务器不支持或禁用了 cscript
,请用记事本程序打开并编辑 %WINDIR%\system32\inetsrv\fcigext.ini
,在其末尾添加:
[Types]
ahtml=ahtml
[ahtml]
ExePath={所在文件夹}/ahtmlcgi.exe
(其中的 {所在文件夹}
应替换为第一步发布的 exe 所在的文件夹路径)
- 右击“网站”(或指定站点)选择“属性”,单击“主目录”选项,点击“配置”按钮。
- 单击”添加“按钮,单击”浏览“,选中
%WINDIR%\system32\inetsrv\fcgiext.dll
。 - 在扩展名里输入
.ahtml
,动作选择“限制为”,输入GET,HEAD,POST
。 - 确认“脚本引擎”和“检查文件是否存在”是否选择,如没选中,请选中。
- 确认无误后,单击“确定”。
在命令提示符中输入并运行:iisreset
。
下载或检出最新的工程源码文件,用 AAuto Quicker 将工程发布为 exe 文件。
- 单击“开始”,指向“管理工具”,然后单击“服务器管理器”。
- 在“角色摘要”中,单击“添加角色”。
- 使用“添加角色向导”添加“Web 服务器 (IIS)”角色。
- 有关如何安装默认 IIS 7 Web 服务器的详细说明,请参阅 部署静态内容服务器 (IIS 7)。
- 在“选择角色服务”页上,请记下默认情况下安装的预选角色服务,然后选择以下附加的角色服务:
CGI
- 在“要安装的功能摘要”页上,确认所做的选择,然后单击“安装”。
- 在“安装结果”页上,确认已经成功安装了 Web 服务器 (IIS) 角色和所需角色服务,然后单击“关闭”。
- 单击“开始”,然后单击“控制面板”。
- 在“控制面板”中,单击“程序”,然后单击“打开/关闭 Windows 功能”。
- 在“Windows 功能”对话框中,单击“Internet 信息服务”以安装默认的功能,然后在“应用程序开发功能”部分中选择以下附加功能:
CGI
- 单击“确定”以关闭“Windows 功能”对话框。
用于 FastCGI 配置。IIS 7.5 及以上无需操作此步骤。
下载地址:https://www.iis.net/downloads/microsoft/administration-pack
- 打开 IIS 管理器,选中根节点(或指定站点),在右侧“功能视图”中双击进入“处理程序映射”。
- 在右侧的“操作”面板中单击“添加模块映射”链接,将弹出“添加模块映射”对话框。
- 在“请求路径”中输入
*.ahtml
,在“模块”下拉框中选中“FastCgiModule”。 - 单击“可执行文件”右侧的“...”按钮,查找并选中刚才生成的
ahtmlcgi.exe
文件,在“名称”中填写ahtml
。 - 单击“请求限制...”按钮,在弹出的“请求限制”对话框中的“映射”选项卡中选中“仅当请求映射至以下内容时才调用处理程序”,并选择“文件”。
- 单击“确定”按钮关闭“请求限制”对话框。
- 单击“确定”按钮关闭“添加模块映射”对话框。
以上操作确认无误后,请重启 IIS。
使用管理员权限运行命令提示符,在命令提示符中输入并运行:iisreset
。
ahtml 以 AAuto 作为母语言,因此 ahtml 支持 AAuto 所有的语法特性(包括基本流程语句、库引用机制等)。
除 AAuto 内核库之外,ahtml 会自动引入一些标准库。另外,并不是所有的 AAuto 标准库都可以在 ahtml 中被引入。下面的表格展示了自动引入的标准库以及可引入的标准库。
库名称 | 是否自动引入 |
---|---|
com | 是 |
console | 是 |
fsys | 否 |
util | 是 |
ahtml 也会引入 AAuto 中的一些扩展库。
库名称 | 是否自动引入 |
---|---|
mysql | 是 |
preg | 否 |
除标准库、扩展库之外,用户可自定义用户库。ahtml 文件同目录下可以新建一个名为 lib
的文件夹,其中的库文件即为“用户库”,可在 ahtml 文件中被引入(用法同 AAuto 的用户库相同)。
ahtml 作为服务端语言,同时作为 FastCGI 应用,需要处理来自 Web 服务器的客户端请求并作出响应。
简单地说,ahtml 的扩展对象有两个:
类型 | 对象名 |
---|---|
请求对象 | request |
响应对象 | response |
请求对象是用来获取来自 Web 服务器的客户端请求信息的(如 Web 服务端、站点信息,Query String、POST Data、附加协议头等)。
就目前而言,request 对象有四个键值对成员:
成员名 | 用途 |
---|---|
server | 来源于服务器的信息,相当于 PHP 中的 ``$_SERVER`` 数组 |
post | 客户端的 POST Data,相当于 PHP 中的 ``$_POST`` 数组 |
get | 客户端的 Query String,相当于 PHP 中的 ``$_GET`` 数组 |
cookie | 客户端的 COOKIE,相当于 PHP 中的 ``$_COOKIE`` 数组 |
其操作方法如同 AAuto 中的普通键值对一样(需要注意的是,request.cookie
比较特殊,不支持直接遍历。
范例:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>request.server 测试</title>
</head>
<body>
<table>
<tr>
<th>键名</th>
<th>值</th>
</tr>
<? for key, value in request.server begin ?>
<tr>
<td><?=key?></td>
<td><?=value?></td>
</tr>
<? end ?>
</table>
</body>
</html>
需要注意的是,实际应用时应在输出前转义 html 字符,以避免 XSS 攻击。