eyBuild中文手册

 

 

 

 

版本状态

文件状态:

[  ] 草稿

[√] 正式发布

[  ] 正在修改

文件标识:

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   

 


目录

 

1 序言... 4

2 什么是eyBuild. 6

2.1 CSPCGI 6

2.2 为什么要选择eyBuild开发Web站点... 7

3 CSP的语法... 9

3.1 CSP的语句... 9

3.2 语句格式... 9

3.3 CSP的语句行宏定义前缀符... 9

3.4 CSP的注释前缀符(//... 11

3.5 CSP的指令前缀符(@... 11

3.6 CSPrequire指令... 12

3.7 CSP的内建函数前缀符($... 14

3.8 CSP的字符串输出前缀符(==$ =%... 14

3.9 CSP中输出总结... 15

3.10 CSP中获取输入... 15

3.11 CGI前缀和ROM前缀... 19

4 eyBuild开发环境简介... 21

4.1 安装eyBuild. 21

4.2 eyBuild目录结构... 21

4.3 project 的目录结构... 24

4.4 有用的 project-map. 25

4.5 CGI程序的入口cgimain() 25

4.6 在项目中添加FastCGI组件... 27

4.7 CSP 页面内置对象... 28

4.8 什么是虚目录... 28

4.9 MAP文件... 28

4.10 WEB2BIN.. 30

4.11 CSP2BIN.. 30

4.12 DONEMAP. 31

5 建立工程并生成CGI可执行文件... 33

5.1 建立工程的一般步骤... 33

5.2 示例... 33

5.2.1 环境准备:... 33

5.2.2 创建源文件... 33

5.2.3 配置翻译器... 34

5.2.4 翻译CSP文件和ROM文件... 35

5.2.5 创建项目编译环境... 36

5.2.6 运行结果... 37

6 调试... 38

6.1 ebSetDebug()调试... 38

6.2 异常中断调试... 38

附录A,如何安装和配置FastCGI环境... 39

 


第1章  序言

VB/JAVA/PHP等脚本直接嵌入在HTML中叫 ASP/JSP/PHP,那么用 C 直接嵌入在HTML中叫 CSP ?

是的, 现在我们可以直接将 C 语句嵌入在HTML中并叫它 CSPC 语言天然好的"移植性/高效性/灵活性",一直以来都是最受程序员青睐的语言。现在用CSP 技术我们就可以轻松地将 C 语句直接嵌入到 HTML 源文件来快速编写CGI程序。

一般工作步骤:

编辑好的 CSP 源程序,用eyBuild开发包提供的 CSP2BIN 工具将 CSP 源文件生成 C 程序的源文件,再链接上 eyBuild 提供的高效 CGI 运行库,就可以在各种平台生成移植性非常高的 CGI 程序。

CSP VS cgilib:

传统的cgilib的直接使用标准函数printf等语句输出HTML代码。不但使得C程序和HTML程序交织的混乱不堪,还使得页面输出的流程控制变得异常复杂。现在ASP/JPS/PHP等几乎完全取代用cgilibCSPcgilib的开发模式不同,它充分吸取了ASP/JSP/PHP等以HTML/XML为模板嵌入脚本等诸多优点,并充分融合C语言的语言特性。使得CSP的开发变得快速、高效,并大大提了最终代码的可读性和维护性。CSP及其开发环境eyBuildcgilib的继承和发展,同时目前也是开发高效率WEB应用的最佳选择。

FastCGI 组件:

众所周知,FastCGI程序比CGI程序响应速度高35倍。eyBuild提供的编译选项HAVE_FASTCGI,可以使原有的CGI源程序在不作任何修改的情况下作为FastCGI程序使用,这使得编写FastCGI程序更容易。同时,eyBuild提供样板程序,可以在编译FastCGICGI程序之间切换更容易,调试更方便。

To ASP/JSP/PHP 的程序员:

编写 CSP 程序就跟编写 ASP/JSP/PHP 一样,可以以先编写 HTML 文件为模板, 再在其中插入CSP 的语句。 甚至有些时候,就可以直接拿 ASP/JSP/PHP 的源文件稍加修改后作为 CSP 的源文件了,因为它们都用类似 <% %> 的标签进行标记的嘛。 如果你是 ASP/JSP/PHP的程序员,并熟悉 C语言,半天时间你就能把 CSP 全学会。

To 嵌入式WEB开发:

CSP 设计的最原始的初衷,就是要为嵌入式开发定制的一套类似 ASP/JSP/PHPC语言开发工具。 因为嵌入式设备(如路由器/交换机/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 头,页面缓冲区大小等等。这种使得页面上的流程控制变得更简单更直观。


第2章  什么是eyBuild

eyBuild,是 Easy Build 的简写,它是CSPC Language Service Page)开发套件的总称。eyBuild是嵌入式设备上WEB应用的最理想的开发工具,同是也是服务器WEB应用开发最有益的补充,它主要包括CSP2BINWEB2BINDONEMAPeyBuildLib等开发组件。

CSPC Language Service Page 的缩写,它是一种基于C语言的脚本开发技术。跟ASPJSP类似,它们都是CGICommon Gateway Interface)的一种变种。我们可以直接将C语句插入到HTML/XML等模板文件中来编写CSP的源文件,用CSP2BIN将该文件转换成C语言的源程序。

2.1  CSPCGI

CGI产生以来,C语言以其高效性、灵活性和通用性一直是开发交互式WEB应用的最有吸引力的选择。但近年来,能直接内嵌于HTML文档中间的各种脚本工具,以其简便性易用性使一部分用户开始放弃了直接用C来开发CGI脚本。

但还有两类用户没有放弃用C来开发它们的应用,一是对性能追求较高的高端开发者,二是嵌入式设备的开者。前者选择C语言来开发它们的WEB应用,是因为C高效性、灵活性和通用性是各种脚本工具无法取代的。后者选择C语言,是因嵌入式设备的特点(内存、CPU等资源有限等,不可在设备上运行如ASPPHPPERL等的脚本的运行环境)决定的(另外,目前嵌入式设备主要以C语言开发为主)。

CGI出现以来,就有人开发方便C语言开发的开发库cgilib,从目前的情况看cgilib并没有得到广泛的应用;反观下各种脚本开发工具,它们则受到WEB开发者的直接异常青睐。对比后不难发现,基于C语言的cgilib并没有从根本上解决交互式WEB应用的真正需求,这是因为直接用C语言无法像其它脚本一样嵌入在HTML文档中间,使得用输出HTML文档时非常烦琐,源代码可读性较差,维护困难。

 

现在用CSP来开发WEB应用程序则与之不同,我们可以像ASPJSPPHP等工具一样直接将脚本语言(这里指C语言)的语句嵌入到HTML/XML等模板文件中。因为在源文件中用<% %>标记分隔,使得C程序和HTML/XML代码程序进行了有效的分离,同时也使得代码的可读性、可维护性大大增强,开发周期大大缩短。

如果你是个C/C++JAVA程序员,你不必重新学习任何一种新语言,即可以像高效地开发WEB应用,工作模式跟原来几乎一样。如果曾经用ASPJSPJSP开发过并有一定的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>

 

 

 

2.2  为什么要选择eyBuild开发Web站点

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.      通用、高效、跨平台性

这是因为:(1eyBuild会将CSP源文件及其它非程序文件翻译成C语言的源程序,所以CSP天然地继承了C语言的一切特性。(2eyBuild库的实现是完全遵循CGI1.1标准,所以你可以在任意操作系统(支持:WindowsLinuxBSD UnixFree BSDSun SolarisVxWorksWinCEuC/OS-II)上任意遵循CGI1.1标准的WEB服务器(支持ApacheIISGoAheadhttpdmini-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.      模板选择有更大的灵活性

很幸运,你几乎可以以任意文本文件(如HTMLXMLJSCSSTXT)为模板,在其中插入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文件并最终编译成在一个二进制文件,而不像其它脚本程序一样由脚本解释器解释脚本源程序执行,所以并不存在源代码安全隐患。对源代码具有很好的保密性。

 


第3章  CSP的语法

CSP源文件中界于<%%>之间的语句(可以跨越多行)都被称为CSP语句,CSP翻译工具CSP2BIN将对<%%>之间CSP语句进行解释。在CSP语句的任意字符都将被视为HTML源程序的语句,CSP2BIN工具一般不对其进行解析。

3.1  CSP的语句

CSP语句包括单行语句和多行语句。凡<%%>出现在同一个自然行的CSP语句称为单行语句;凡<%%>跨越两个或两个以上的自然行的CSP语句称为多行语句。如下所示:

 

单行语句输出的例子:

1

单行语句输出:<% = “hello world<BR>” %>再输出一次<% = “hello world<BR>” %>

 

多行语句输出的例子:

1

<%

2

= “这是第二行<BR>”

3

= “这是第三行<BR>”

4

%>

3.2  语句格式

CSP语句以行为解析单位,每一行作为一个独立的语句CSP语句行的格式如下:

CSP语句总是以上边界符“<%”为开始,以下边界符“%>”为结束。CSP语句内部每一个自然行为一个CSP语句行。CSP翻译器以CSP语句行为单位对CSP语句进行解析。每一个语句行由三部分组成:前缀符、语句体、分号。如下所示:

 

 

1

<%

[前缀符]

[语句体1]

[;]

 

 

2

 

[前缀符]

[语句体2]

[;]

 

 

3

 

[前缀符]

[语句体3]

[;]

%>

 

 

CSP 语句行中的三部分全部省略时,称为空语句。空语句用于书写时的格式控制,翻译时翻译器将跳过空语句行。

3.3  CSP的语句行宏定义前缀符

宏定义前缀符是在CSP源文件被翻译成C程序源程序时处理,它主要用于简单页面处理的工作流程,目前eyBuildCSP语句行包括如下宏定义前缀符:

前缀符

//

注释,// 后的内容不作任何解释

@

指令指示符,用于对CSP进行特殊控制,如包含头文件、包含其它CSP页面

$

调用页面内建函数,如$echo, $print (两者功能相同)

=

字符串输出,计算 = 后面的函数、变量或常量的值并作为字符串进行输出

=$

数字输出,计算 = 后面的函数、变量或常量的值并作为十进制数字进行输出

=%

自定义格式输出,

%

保留,未定义

?

保留,未定义

备注:

其它可打印字符视为C语句的一部分,不作为前缀符解释,如&, !, ~

 

说明:

1.  CSP语句行包含前缀符时,行末的分号不是必须的,翻译器会根据需要为最终果添加必要的C语句结束符——分号(;)。

2.  CSP语句行有前缀符时,翻译器会将其作为C 语言的语句直接输出,且会自动在语句最后为其加上分号。

3.  类似于ASPJSP等,CSP也可以用等进行语句输出,等号后面可以是一个常量、变量或一个函数,但是值(如函数返回的值)必须是一个字符串;当输出数据时可使用前缀符 =$”,相当于printf格式化字符中的“%d”;同时,可用“=%”输出任意指定格式的数据类型。

4.  CSP语句行中插入C语句时,注意行首字符不要跟CSP的前缀符冲突(如将所有运符写在行尾等方法)。一般地,按K&R著的The C Programming LanguageC程序风格式,一般就不会与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

} %>

 

 

 

3.4  CSP的注释前缀符(//

如果CSP语句行以前缀符“//”为开头,那么该行将被作为注释处理,即忽略#后面的任何内容。当然,也可以直接用C的注释:“/* xxx */”。它们的区别是,翻译器会将C/C++的注释语句写入目录C程序中去,而“//”则注释语句则不会。注释行的语句体格式如下:

 

//

任意内容

 

1CSP 的注释和C的注释

 

1

<%

 

2

// This is CSP comment

CSP 注释

3

var++;  /* this is C/C++ comment */

C 语句 + 注释

4

%>

 

 

 

3.5  CSP的指令前缀符(@

包含前缀符“@”的语句行,被称为指令行。指令语句可以写在CSP源文件的任意处,因为它总是在翻译阶段被处理。指令行的语句体格式如下:

 

指令

分隔符

["]

指令的值1

["]

[, {指令的值2}]

 

1.  CSP的指令定义及其意义如下:

 

pagesize

设置页面缓冲区的大小,默认为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

%>

 

  

 

3.6  CSPrequire指令

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>

 

 

 

3.7  CSP的内建函数前缀符($

前缀符“$”用于指示内建函数。目前支持的内建函数有:echoprint。翻译器翻译CSP源文件时会将echoprint替换成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

%>

 

 

3.8  CSP的字符串输出前缀符(==$ =%

类似于ASPJSP等,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 进行格式化输出。

3.9  CSP中输出总结

从前文已经看到,这里只是做一些补充和总结:

1.  直接“=”,“=$”,“=%”等前缀符输出

2.  $echo, $print 输出

3.  直接调用eyBuildLib中库函数 ebprintf输出

 

注意:

无论在CSP源文件中还是在与基相关的C程序源文件中都不要直接用标准输出函数printf()等进行输出,因为页面是不会对它们的输出进行缓冲的,当后文通过ebHeader等控制输出“Cookie”或其它“HTTP”控制信息时,这些信息将不能正确的输出。另外它们的输出还会打乱正常的输出次序,使输出结果中的次序错乱。

 

3.10  CSP中获取输入

通常,客户端通过URL和表单(FORM)两种形式进行提交请求。通过URL时采用的是HTTPGET方法,通过FORM形式提交时我们可以指定是采用GET方法还是POST方法。在采用POST方法时,我可以通过“ENCTYPE”在表单中指明采用的编码方式为“application/x-www-form-urlencoded”或“multipart/form-data”(前者为默认的编码方式)。我们知道,在上传文件时必须采用multipart/form-data”编码方式。

 

eyBuildLib提供了两类API函数,它们分别用于:

1)从URLPOST方法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>