response_header – HTTP响应的头信息数组,通过带有数字下标或响应头名称的中括号来访问
datetime – 系统日期时间数组,不带中括号是系统时间,带createtime或stamp的中括号则访问HTTPMsg创建时间和最后时间
date – 系统日期数组,同上
time – 系统时间,同上
随着应用场景的扩展,根据需要还可以扩展定义其他名称的参数变量。总体来说,使用上述参数变量,基本可以访问HTTP请求相关的所有信息,能满足绝大部分场景的需求。
系统中预定义的参数变量,都是指向特定的基础数据结构的某个成员变量,在该数据结构实例化后,其成员变量的地址指针就会被动态地赋值给预定义的参数变量,从而将地址指针指向的内容关联到参数变量上。
在设置预定义参数变量名时,一般需要设置关联的数据结构、数据结构的成员变量地址或位置、成员变量类型(字符、短整数、整数、长整数、字符串、字符指针、frame_t)、符号类型、存储长度等,eJet系统中维持一个这样的参数变量数组,分别完成参数变量数据的初始化,通过hashtab_t来快速定位和读写访问数组中的参数变量。
获取参数变量的实际值时,需要传递HTTPMsg这个数据结构的实例指针,根据参数变量名快速找到参数变量数组的参数变量实例,根据参数变量的信息,和传入的实例指针,定位到该实际成员变量的内存指针和大小,从内存中取出该成员变量的值。
五. HTTP Script脚本
5.1 HTTP Script脚本定义
eJet系统在配置文件上扩展了Script脚本语言的语法定义,对JSon语法规范进行扩展,定义了一套符合JavaScript和C语言的编程语法,并提供Script脚本解释器,实现一定的编程和解释执行功能。
Script脚本是由一系列符合定义的语法规则而编写的代码语句组成,代码语句风格类似Javascript和C语言,每条语句由一到多条指令构成,并以分号;结尾。
5.2 Script脚本嵌入位置
HTTP Script脚本程序的嵌入位置,共有两种。第一种嵌入位置是在配置文件的Listen、Host、Location下,通过增加JSon对象script,将脚本程序作为script对象的内容,来实现配置文件中嵌入脚本编程功能。在这种位置中,插入script脚本代码的语法共定义了三种:
script = {....}; script = if()... else...;
另外一种嵌入Script脚本程序的位置,是在JSon中的Key-Value对中,在Value里增加特殊闭合标签
,在标签里面嵌入Script脚本代码,执行完代码后返回的内容,作为Key的值,这种方式使得JSon规范中Key的值可以动态地由Script脚本程序计算得来。在Listen、Host或Location的常量赋值中,Value内容可以是script脚本,如
cache file =
对adif 基础库中的json.c文件做了修改扩展,使得Json对象都能支持script脚本定义的这几种语法,如果某个对象下有名称为script的数据项,就认为该数据项下的Value值为脚本内容。这就将名称script作为Json的缺省常量名称了,使用时轻易不要使用script作为变量名。
5.3 Script脚本范例
HTTP Script脚本程序示例如下:
script = { if ($query[fid]) "cache file" = $req_path_only$query[fid]$req_file_ext; else if ($req_file_only) "cache file" = ${req_path_only}index.html; else "cache file" = $req_path_only$req_file_only; } cache file =
HTTP Script脚本程序的解释执行,是在创建HTTPMsg实例并设置完DocURI后,开始执行资源位置实例化流程,在实例化过程中,分别执行HTTPListen的Script脚本、HTTPHost的Script脚本、HTTPLoc的Script脚本。
5.4 Script脚本语句
script脚本是由一系列语句构成的程序,语法类似于JavaScript和C语音,主要包括如下语句:
5.4.1 条件语句
条件语句主要以if、else if、else组成,基本语法为:
if (判断条件) { ... } else if (判断条件) { ... } else { ... }