版本状态
|
文件状态: [
] 草稿 [√] 正式发布 [ ] 正在修改 |
文件标识: |
eyBuild Group |
|
当前版本: |
0.4.0 |
|
|
作 者: |
newzy |
|
|
完成日期: |
2006-4-25 |
修订日志
|
版本 |
日期 |
变更位置 |
变更内容 |
变更者 |
|
0.1.0 |
2006-1-22 |
|
新建 |
newzy |
|
0.2.0 |
2006-2-6 |
全部 |
完成初版 |
newzy |
|
0.2.1 |
2006-2-9 |
CSP注释符 |
修改CSP注释符 |
newzy |
|
0.2.2 |
2006-2-13 |
头部 |
CSP的解释、联系信息等 |
newzy |
|
0.3.0 |
2006-3-25 |
全文 |
为eybuild-0.8更新 |
newzy |
|
2006-3-28 |
||||
|
0.4.0 |
2006-4-23 |
全文 |
添加 FastCGI |
newzy |
|
2006-4-25 |
||||
|
|
|
|
|
|
更多信息:
请访问eyBuild的网站 http://www.eybuild.com
或发送email到: eybuild@hotmail.com, newzy@eybuild.com, xxt@eybuild.com
在线支持Skype: newzyx86 MSN:
eybuild@hotmail.com QQ: 178565448
目录
VB/JAVA/PHP等脚本直接嵌入在HTML中叫 ASP/JSP/PHP,那么用 C 直接嵌入在HTML中叫 CSP 吗?
是的, 现在我们可以直接将 C 语句嵌入在HTML中并叫它 CSP。C 语言天然好的"移植性/高效性/灵活性",一直以来都是最受程序员青睐的语言。现在用CSP 技术我们就可以轻松地将 C 语句直接嵌入到 HTML 源文件来快速编写CGI程序。
一般工作步骤:
编辑好的 CSP 源程序,用eyBuild开发包提供的 CSP2BIN 工具将 CSP 源文件生成 C 程序的源文件,再链接上 eyBuild 提供的高效 CGI 运行库,就可以在各种平台生成移植性非常高的 CGI 程序。
CSP VS cgilib:
传统的cgilib的直接使用标准函数printf等语句输出HTML代码。不但使得C程序和HTML程序交织的混乱不堪,还使得页面输出的流程控制变得异常复杂。现在ASP/JPS/PHP等几乎完全取代用cgilib。CSP与cgilib的开发模式不同,它充分吸取了ASP/JSP/PHP等以HTML/XML为模板嵌入脚本等诸多优点,并充分融合C语言的语言特性。使得CSP的开发变得快速、高效,并大大提了最终代码的可读性和维护性。CSP及其开发环境eyBuild是cgilib的继承和发展,同时目前也是开发高效率WEB应用的最佳选择。
FastCGI 组件:
众所周知,FastCGI程序比CGI程序响应速度高3至5倍。eyBuild提供的编译选项HAVE_FASTCGI,可以使原有的CGI源程序在不作任何修改的情况下作为FastCGI程序使用,这使得编写FastCGI程序更容易。同时,eyBuild提供样板程序,可以在编译FastCGI和CGI程序之间切换更容易,调试更方便。
To ASP/JSP/PHP 的程序员:
编写 CSP 程序就跟编写 ASP/JSP/PHP 一样,可以以先编写 HTML 文件为模板, 再在其中插入CSP 的语句。 甚至有些时候,就可以直接拿 ASP/JSP/PHP 的源文件稍加修改后作为 CSP 的源文件了,因为它们都用类似 <% 和 %> 的标签进行标记的嘛。 如果你是 ASP/JSP/PHP的程序员,并熟悉 C语言,半天时间你就能把 CSP 全学会。
To 嵌入式WEB开发:
CSP 设计的最原始的初衷,就是要为嵌入式开发定制的一套类似 ASP/JSP/PHP的C语言开发工具。 因为嵌入式设备(如路由器/交换机/VoIP网关PBX等)上用的开发语言主要是 C,而传统的 CGI 库 cgilib 以及开发模式远远不能跟上现代的开发需求。
现在 CSP 的eybuild开发环境提供的PC和嵌入式设备上高效移植的开发库,让服务器上应用和嵌入开发进行了有效统一,使得两者上的开发变得更为容易。 同时,优秀的跨平台的移植性也是eybuild的重要特性。
实践证明,CSP 及其开发工具 eybuild是嵌入式设备WEB开发的最理想工具,它能大大节缩短发周期(一般提高4-6倍),提高最终代码的可读性、可维护性(HTML 和 C 代码进行了有效的分离,所以代码维护更容易)。
高效的页面/图片/CSS集成技术:
通过eyBuild提供的集成技术,你可以把许多CSP/HTML页面集成生成到一个CGI中(包括页面相关的图片,CSS 文件及其它静态文件)。 甚至,你可以将一个小型的网站或WEB应用生成到一个CGI文件中,这使得最终的可执行脚本文件管理变得异常简单。 这一点在嵌入式设备上特别有用,因为它们中的很多只有有限的外存储器(如Flash ROM)和文件系统。 eyBuild为最后生成的 CGI 程序在其内部建立了虚拟目录,使得页面间的链接和引用跟一般HTML的编写方法一样,非常方便建立和维护。同时对服务器级应用,这也将是一个非常有利的选择。
可以直接调用任意
C 的函数
在 CSP 源程序中还可以非常容易地包含C 程序的头文件,这样在 HTML 代码中你就可以像写编写 C 文件一样调用外部函数或系统函数了,跟直接编辑 C 程序几乎没有差别。
CSP 的宏指令指示符
@
用宏指令指示符不仅可以进行包含 C 程序的头文件,还可以包含其它CSP文件。 这样当许多页面需要引用共通的一部分时(如页头/页脚或其它部分),包含其它 CSP 源文件这个功能显示特别有用。
有效的页面输出缓冲控制
跟 ASP/JSP/PHP一样,通过宏指令指示符还可以有效控制页面输出时的 MIME 头,页面缓冲区大小等等。这种使得页面上的流程控制变得更简单更直观。
eyBuild,是 Easy Build 的简写,它是CSP(C Language Service Page)开发套件的总称。eyBuild是嵌入式设备上WEB应用的最理想的开发工具,同是也是服务器WEB应用开发最有益的补充,它主要包括CSP2BIN、WEB2BIN、DONEMAP、eyBuildLib等开发组件。
CSP是C Language Service Page 的缩写,它是一种基于C语言的脚本开发技术。跟ASP、JSP类似,它们都是CGI(Common Gateway Interface)的一种变种。我们可以直接将C语句插入到HTML/XML等模板文件中来编写CSP的源文件,用CSP2BIN将该文件转换成C语言的源程序。
自CGI产生以来,C语言以其高效性、灵活性和通用性一直是开发交互式WEB应用的最有吸引力的选择。但近年来,能直接内嵌于HTML文档中间的各种脚本工具,以其简便性易用性使一部分用户开始放弃了直接用C来开发CGI脚本。
但还有两类用户没有放弃用C来开发它们的应用,一是对性能追求较高的高端开发者,二是嵌入式设备的开者。前者选择C语言来开发它们的WEB应用,是因为C高效性、灵活性和通用性是各种脚本工具无法取代的。后者选择C语言,是因嵌入式设备的特点(内存、CPU等资源有限等,不可在设备上运行如ASP,PHP,PERL等的脚本的运行环境)决定的(另外,目前嵌入式设备主要以C语言开发为主)。
自CGI出现以来,就有人开发方便C语言开发的开发库cgilib,从目前的情况看cgilib并没有得到广泛的应用;反观下各种脚本开发工具,它们则受到WEB开发者的直接异常青睐。对比后不难发现,基于C语言的cgilib并没有从根本上解决交互式WEB应用的真正需求,这是因为直接用C语言无法像其它脚本一样嵌入在HTML文档中间,使得用输出HTML文档时非常烦琐,源代码可读性较差,维护困难。
现在用CSP来开发WEB应用程序则与之不同,我们可以像ASP、JSP、PHP等工具一样直接将脚本语言(这里指C语言)的语句嵌入到HTML/XML等模板文件中。因为在源文件中用<% %>标记分隔,使得C程序和HTML/XML代码程序进行了有效的分离,同时也使得代码的可读性、可维护性大大增强,开发周期大大缩短。
如果你是个C/C++或JAVA程序员,你不必重新学习任何一种新语言,即可以像高效地开发WEB应用,工作模式跟原来几乎一样。如果曾经用ASP、JSP、JSP开发过并有一定的C语言基础,你会发现CSP简单就是它们的一种变种。无需太多学习即可用CSP做开发了。
下面是一段简单的CSP代码(头文件包含不是必须的,仅用作示范),它是将一段C程序直接嵌套在HTML模板文件中:
|
1 |
<html> |
|
|
2 |
<body> |
|
|
3 |
<% |
语句起始标签 |
|
4 |
@ include
<stdio.h> |
C 语言头文件包含 |
|
5 |
@ include
<my_header.h> |
C 语言头文件包含 |
|
6 |
%> |
语句结束标签 |
|
7 |
输出:<% = “hello world<BR>” %> |
输出字符串 |
|
8 |
也可以这样输出: |
|
|
9 |
<% |
|
|
10 |
$print (“%s<BR>”,
“*** hello world ***”); |
C 语句 |
|
11 |
%> |
|
|
12 |
</body> |
|
|
13 |
</html> |
|
eyBuild 是基于CSP技术的开发套件的总称,它具有如下特点:
1. 嵌入式设备WEB应用开发的最佳选择
目前嵌入式设备上的WEB应用最主要还是C语言直接开发CGI程序。除在序言中提到了直接用C开发CGI的诸多缺点外,直接将HTML代码用C语句输出,不能对两都进行有效的分离,将大大降低HTML源程序和C源程序的可读性、维护性;直接用C语言开发还必须手工对页面输出的流程进行控制,还将大大降低了开发的效率。
eyBuild提供的CSP翻译工具,将CSP源程序翻译成C语言源程序。开发都只要编辑好HTML页面模板,然后在适当地方嵌入C语句即可以有效控制页面的输出;上文提到,还可以通过指示指令对输出页面的进行控制。使得WEB界面的开发和执行控制动作进行了有效的分离。使得嵌入式设备的WEB开发变得高效、有序。
2. 服务器WEB应用开发工具的最有益补充
用eyBuild开发的WEB应用程序可与任意服务器WEB应用进行有效的接合,因为eyBuild开发的WEB应用程序是一个独立的自治单元,它不依赖于WEB Serever或其它脚本程序。所以你可以在其它任意脚本程序中通过URL发起eyBuild开发程序。eyBuild最终会将源文件生成C代码,它生成的应用具有极高的执行效率。这样,你就可以用eyBuild来开发所需要的脚本组件,以解决效率的瓶颈。
3. 通用、高效、跨平台性
这是因为:(1)eyBuild会将CSP源文件及其它非程序文件翻译成C语言的源程序,所以CSP天然地继承了C语言的一切特性。(2)eyBuild库的实现是完全遵循CGI1.1标准,所以你可以在任意操作系统(支持:Windows、Linux、BSD Unix、Free BSD、Sun Solaris、VxWorks、WinCE、uC/OS-II)上任意遵循CGI1.1标准的WEB服务器(支持Apache,IIS,GoAhead,httpd,mini-httpd ……)下运行最终的CGI程序。
4. 规则简单,易学易用
简单的说CSP就是直接C语句嵌入到HTML页面中,用C语言来响应请求、控制页面的动态输出行为,并通过简单的指令来控制页面的流程。用翻译器将CSP源文件翻译成C程序的文件。eyBuild还提供了MAP工具,通过它可以非常容易将CSP源程序和其它非程序文件(如图片、静态HTML文件、CSS文件)集成。
5.
用FastCGI使最终程序执行更高效
众所周知,CGI 程序效率的瓶颈在于每次发起一个新的进程处理请求,而FastCGI 则通过后台守护进程等方式使得处理效率能提高4~5 倍。eyBuild提供的HAVE_FASTCGI组件,使CGI源程序在不作任何修改的情况下即可转化为FastCGI程序,FastCGI程序开发更简单。
6. 模板选择有更大的灵活性
很幸运,你几乎可以以任意文本文件(如HTML、XML、JS、CSS、TXT)为模板,在其中插入CSP语句。这一点与其它解释性脚本语言大不相同,这是因为CSP2BIN仅从中卒取CSP语句解析翻译,而视其它的数据为普通文本。这一特性,给CSP模板的选择大大增加了灵活性。
7. 上传文件更容易
eyBuild专为大量数据传送(如提供一般表单项同时上传文件,见“在CSP中获取输入”)提供了一个API接口。使得多个文件上传,以及上传到服务器后的文件管理更加简单。同时还为特殊应用提供了场合提供了HOOKS接口。
8. eyBuild提供了高效的运行库
eyBuild为不同操作系统平台提供了高效的运行库,可以直接在CSP中的C语句直接调用也可以在独立的C文件中调用。eyBuild运行库类似于cgilib,如获取用户输入参数、进行页面输出缓冲、处理文件上传)。
9. 使得脚本程序管理更简单
eyBuild提供了模块化处理功能,即将许多相关的CGI处理页面及相关文件(如:图片、CSS、.js文件)生成到一个cgi执行文件中,并为每个处理页面或文件在cgi执行文件内部提供虚路径的映射。这样,每个最终生成的cgi文件就一个具有相关页面集合的功能单。甚至将整个站点生成在一个cgi文件中,或者作为一个独立的模块集成到其它应用程序中。这一点在站点的发布和维护有用上非常有用,应用实例见后文。
10. 源程序安全保密
因为最终会将所有的CSP源文件生成C文件并最终编译成在一个二进制文件,而不像其它脚本程序一样由脚本解释器解释脚本源程序执行,所以并不存在源代码安全隐患。对源代码具有很好的保密性。
在CSP源文件中界于<%和%>之间的语句(可以跨越多行)都被称为CSP语句,CSP翻译工具CSP2BIN将对<%和%>之间CSP语句进行解释。在CSP语句的任意字符都将被视为HTML源程序的语句,CSP2BIN工具一般不对其进行解析。
CSP语句包括单行语句和多行语句。凡<%和%>出现在同一个自然行的CSP语句称为单行语句;凡<%和%>跨越两个或两个以上的自然行的CSP语句称为多行语句。如下所示:
单行语句输出的例子:
|
1 |
单行语句输出:<% = “hello world<BR>” %>再输出一次<% =
“hello world<BR>” %> |
多行语句输出的例子:
|
1 |
<% |
|
2 |
= “这是第二行<BR>” |
|
3 |
= “这是第三行<BR>” |
|
4 |
%> |
CSP语句以行为解析单位,每一行作为一个独立的语句CSP语句行的格式如下:
CSP语句总是以上边界符“<%”为开始,以下边界符“%>”为结束。CSP语句内部每一个自然行为一个CSP语句行。CSP翻译器以CSP语句行为单位对CSP语句进行解析。每一个语句行由三部分组成:前缀符、语句体、分号。如下所示:
|
1 |
<% |
[前缀符] |
[语句体1] |
[;] |
|
|
|
2 |
|
[前缀符] |
[语句体2] |
[;] |
|
|
|
3 |
|
[前缀符] |
[语句体3] |
[;] |
%> |
|
CSP 语句行中的三部分全部省略时,称为空语句。空语句用于书写时的格式控制,翻译时翻译器将跳过空语句行。
宏定义前缀符是在CSP源文件被翻译成C程序源程序时处理,它主要用于简单页面处理的工作流程,目前eyBuild的CSP语句行包括如下宏定义前缀符:
|
前缀符 |
意 义 |
|
// |
注释,// 后的内容不作任何解释 |
|
@ |
指令指示符,用于对CSP进行特殊控制,如包含头文件、包含其它CSP页面 |
|
$ |
调用页面内建函数,如$echo, $print (两者功能相同) |
|
= |
字符串输出,计算 = 后面的函数、变量或常量的值并作为字符串进行输出 |
|
=$ |
数字输出,计算 = 后面的函数、变量或常量的值并作为十进制数字进行输出 |
|
=% |
自定义格式输出, |
|
% |
保留,未定义 |
|
? |
保留,未定义 |
|
备注: |
其它可打印字符视为C语句的一部分,不作为前缀符解释,如&, !, ~ |
说明:
1. 当CSP语句行包含前缀符时,行末的分号不是必须的,翻译器会根据需要为最终果添加必要的C语句结束符——分号(;)。
2. 当CSP语句行没有前缀符时,翻译器会将其作为C 语言的语句直接输出,且不会自动在语句最后为其加上分号。
3. 类似于ASP、JSP等,CSP也可以用等进行语句输出,等号后面可以是一个常量、变量或一个函数,但是值(如函数返回的值)必须是一个字符串;当输出数据时可使用前缀符 “=$”,相当于printf格式化字符中的“%d”;同时,可用“=%”输出任意指定格式的数据类型。
4. 在CSP语句行中插入C语句时,注意行首字符不要跟CSP的前缀符冲突(如将所有运符写在行尾等方法)。一般地,按K&R著的The C Programming Language的C程序风格式,一般就不会与CSP语法冲突。
例1:加与不加分号:
|
1 |
<% @ include
<my_header.h> |
语句最后不必加分号 |
|
2 |
$print(“xx”, “yyy”); |
语句最后不必加分号 |
|
3 |
$echo(“xx”, “yyy”); |
. . |
|
4 |
my_func ( |
语句最后不能加分号 |
|
5 |
parameter1, |
. . |
|
6 |
parameter2, |
. . |
|
7 |
parameter3 |
. . |
|
8 |
); |
必须手工加上分号 |
|
9 |
%> |
|
例2:用 = 进行输出:
|
1 |
<% { |
|
|
2 |
char * pstr = “this is
a test<BR>”; |
定义一个C变量 |
|
3 |
= "Build Date:"
__DATE__ __TIME__ "<BR>" |
输出常 |
|
4 |
= pstr |
输出变量 |
|
5 |
= cgiPrefix() |
输出函数返回的字符串 |
|
6 |
=$ (123+456) |
输出数值 |
|
7 |
=%x, 128 |
输出按16进制输出 128 |
|
8 |
} %> |
|
如果CSP语句行以前缀符“//”为开头,那么该行将被作为注释处理,即忽略#后面的任何内容。当然,也可以直接用C的注释:“/* xxx */”。它们的区别是,翻译器会将C/C++的注释语句写入目录C程序中去,而“//”则注释语句则不会。注释行的语句体格式如下:
|
// |
任意内容 |
例1:CSP 的注释和C的注释
|
1 |
<% |
|
|
2 |
// This is CSP comment |
CSP 注释 |
|
3 |
var++; /* this is C/C++ comment */ |
C 语句 + 注释 |
|
4 |
%> |
|
包含前缀符“@”的语句行,被称为指令行。指令语句可以写在CSP源文件的任意处,因为它总是在翻译阶段被处理。指令行的语句体格式如下:
|
指令 |
分隔符 |
["] |
指令的值1 |
["] |
[, {指令的值2}] |
1. CSP的指令定义及其意义如下:
|
设置页面缓冲区的大小,默认为4K |
|
|
autoflush |
是否允许自动 Flush 缓冲区,默认为TRUE |
|
mimeheader |
设置页面的MIMI 头 |
|
require |
指令所在处语句处插入另外一个页面 |
|
include |
C 语言的文件包含语句,相当于 #include |
2. 分隔符可以为:空格、TAB或等号,等号两边的空格或TAB将被忽略
3. 指令值两边的双引号是可选的,即可以输入也可以不输入,但必须成对出现。
例1:指令分隔符
|
1 |
<% |
|
|
2 |
@pagesize = 4K |
用 = 作分隔 |
|
3 |
@pagesize 4K |
用空格或TAB分隔 |
|
4 |
%> |
|
例2:指令两边的分号
|
1 |
<% |
|
|
2 |
@ autoflush = “TRUE” |
加上引号 |
|
3 |
@ autoflush = FALSE |
不加引号 |
|
4 |
%> |
|
例3:其它例子:
|
1 |
<% |
|
|
2 |
@mimeheader =
“Content-Type=html/text\n” |
MIME 第一句 |
|
3 |
@mimeheader = “Cache-Control:
no-cache\n\n” |
将连在上一句后面 |
|
4 |
@include “myheader.h” |
包含头文件 |
|
5 |
@include
<myheader.h> |
包含头文件 |
|
6 |
%> |
|
require指令用于在请求处插入另外一个页面。在翻译时仅是做了一个标记,并不把请求的文件原样复制到请求处。脚本程序执行时,会根据标记将请求页面的执行结果插入到请求处。被请求页面与请求页面共用一个请求页面的缓冲区,必要时可以通过pagesize指令设置请求页面的缓冲区大小。另外,require 的最大引用深度为6级。
require 指令可以包含最多两个参数,参数间用逗号分隔。第一个参数用于指明被请求页面的虚路径,第二个参数用于向被请求页面传递参数。参数的类型被定义为 void * __handle,所以可以被请求页面中使用 __handle 来获取传入的参数。
需要特别说明的是,require只能引用当前模块(即同一CGI脚本程序)中的已存在的页面,否则C连接器会报告找不到所需要的函数错误。
例1:用require其它CSP引用页面
|
1 |
Hello world. This is
an English Version |
文件:/demo/body_en.csp |
|
2 |
<Add any thing
here> |
|
|
1 |
你好,这是一个中文版 |
文件:/demo/body_ch.csp |
|
2 |
<添加其它内容> |
|
|
1 |
<html><body> |
文件:/demo/main.csp |
|
2 |
<% |
|
|
3 |
if (!strcmp(“English”, getParameter(“version”)) |
获取版本类型 |
|
4 |
@require
“/demo/body_en.csp”; |
引用英文版的内容 |
|
5 |
else |
|
|
6 |
@require “/demo/body_ch.csp”; |
引用中文版的内容 |
|
7 |
%> |
|
|
8 |
</body></html> |
|
例2:引用其它页面,带参数:
|
1 |
<% char * title =
“Hello world.” |
|
|
2 |
@require
“/demo/header.csp” |
将另一页面插入在此处 |
|
3 |
@require
“/demo/header.csp”, “This title” |
带一个字符串常参数 |
|
4 |
@require
“/demo/header.csp”, title |
带一个字符串指针参数 |
|
5 |
%> |
|
注意:在被请求的 “/demo/header.csp”页面中,可通过指针变量__handle获取传入参数(__handle 被定义成void * __handle),如:
|
1 |
<html> |
|
|
3 |
<head> |
|
|
2 |
<% if (NULL !=
__handle) { %> |
如果指定了 title 则输出 |
|
4 |
<title> |
|
|
5 |
<% =(char*)__handle
%> |
输出 title |
|
6 |
</title> |
|
|
7 |
<% } %> |
|
|
8 |
</head> |
|
前缀符“$”用于指示内建函数。目前支持的内建函数有:echo和print。翻译器翻译CSP源文件时会将echo或print替换成ebprintf(__ebfp, fmt, …)格式输出。目的是为了兼容书写习惯,同时简化输出语句。格式参考C标准函数printf()。
|
1 |
<% |
|
|
2 |
$echo “hello
word<BR>” |
输出常字符串 |
|
3 |
$echo (“%s”, “hello
world<BR>”) |
|
|
4 |
$print “hello
word<BR>” |
输出常字符串 |
|
5 |
$print (“%d
<BR>”, 123) |
输出数值常量 |
|
6 |
%> |
|
类似于ASP、JSP等,CSP也可以用等号进行输出字符串常量、变量、和函数返回值。由于C语言是一种强类型语言,对字符串和数值类型严格区分,所以在输出十进制数值时可使用数值输出类型“=$”。当然对于复杂的数据输出我们也可以通过=%自己控制输出格式化输出,语句行的格式如下:
|
输出前缀符 |
任意C语句表达式 |
[;] |
例1:用字符串输出前缀符输出
|
1 |
<% |
|
|
2 |
char * pstr = “Hello
world.<BR>”; |
定义并初始化C 变量 |
|
3 |
= “Build Date:”
__DATE__ __TIME__<BR> |
输出常字符串 |
|
4 |
= pstr |
输出变量 |
|
5 |
= strchr(pstr, ‘w’) |
输出函数返回值 |
|
6 |
= (TRUE==FALSE) ?
“ERROR”: “RIGHT” |
输出表达式的结果 |
|
7 |
= “<BR>” |
|
|
8 |
%> |
|
例2:用数值常输出前缀符输出
|
1 |
<% |
|
|
2 |
int var=123; |
定义并初始化C 变量 |
|
3 |
=$var |
输出数值常量 |
|
4 |
=$var+128 |
输出数值表达式 |
|
5 |
%> |
|
例3:格式化输出前缀符输出
|
1 |
<% |
|
|
2 |
int var=123; |
定义并初始化C 变量 |
|
3 |
=%d-%02x, var, var |
输出两个变量 |
|
4 |
=%s=%d<br>, “var”,
var |
输出两个变量 |
|
5 |
%> |
|
注意,格式化字符串中以逗号结束,当格式化字符串中需要包含逗号时请选择 $echo或$print 进行格式化输出。
从前文已经看到,这里只是做一些补充和总结:
1. 直接“=”,“=$”,“=%”等前缀符输出
2. 用 $echo, $print 输出
3.
直接调用eyBuildLib中库函数 ebprintf输出
注意:
无论在CSP源文件中还是在与基相关的C程序源文件中都不要直接用标准输出函数printf()等进行输出,因为页面是不会对它们的输出进行缓冲的,当后文通过ebHeader等控制输出“Cookie”或其它“HTTP”控制信息时,这些信息将不能正确的输出。另外它们的输出还会打乱正常的输出次序,使输出结果中的次序错乱。
通常,客户端通过URL和表单(FORM)两种形式进行提交请求。通过URL时采用的是HTTP的GET方法,通过FORM形式提交时我们可以指定是采用GET方法还是POST方法。在采用POST方法时,我可以通过“ENCTYPE”在表单中指明采用的编码方式为“application/x-www-form-urlencoded”或“multipart/form-data”(前者为默认的编码方式)。我们知道,在上传文件时必须采用“multipart/form-data”编码方式。
eyBuildLib提供了两类API函数,它们分别用于:
(1)从URL或POST方法application/x-www-form-urlencoded编码方式中获取数据(参阅getParameter()及其相关API)
(2)从POST方法下编码方式为“multipart/form-data”的提交方式取得数据(参阅 dopost()及其相关API
下面给出向个例子以说明如何使用它们。
例1.
从URL中获得请求参数
|
1 |
<html><body> |
|
2 |
连接到页面: |
|
3 |
<a href="<% =cgiPrefix(NULL) %>/demo.csp&arg1=Hello+world"> |
|
4 |
demo.csp |
|
5 |
</a> |
|
6 |
</body></html> |
|
1 |
<html><body> |
|
|
2 |
这是在demo.csp页面中,参数 arg1= |
|
|
3 |
<% =getParameter(“arg1”)
%> |
|
|
4 |
</a> |
|
|
5 |
</body></html> |
|
|
1 |
这是在demo.csp页面中,参数 arg1= Hello world |
|
说明:
第一段程序用于显示在客户端,提交参数arg1=Hello+world
第二段程序为服务器端程序
第三段为当点击了客户端的超级连接后在浏览器上的输出结果
其中的“cgiPrefix(NULL) ”用于设置CGI 前缀。
例2.
通过表单提交
|
1 |
<form action="<%
=cgiPrefix(NULL) %>/demo.csp" method="post"> |
|
2 |
请在输入: <input type="text" name="inputbox1"><br> |
|
3 |
<input type="submit" name="testit" value="testit"><br> |
|
4 |
</form> |
|
1 |
<html><body> |
|
2 |
你输入的是: <% =getParameter("inputbox1") %><BR> |