廉价的硬件,功能强大的32 *** 作系统,以及无处不在的因特网,它们一起促成了网络应用和设备的飞速增长。大量的设备连接到网络上,于是人们希望通过一种通用、熟悉、快捷的方式来访问和控制它们。嵌入式web服务器正好迎合了这种需求,它们嵌入在网络设备之中,使用标准的浏览器就可以远程访问和控制它们。
然而,并不是所有的web服务器都可以担当如此重任,我们需要的是一个强大,安全,标准的,而且最好是久经考验的嵌入式web服务器。这里将要介绍的GoAhead嵌入式web服务器能够满足所有这些需求,包括西门子,霍尼韦尔,惠普等大型企业都在使用GoAhead。
2、 嵌入式web服务器的要求
2.1 易于与设备集成
易于与设备集成包含两个方面的意思,其一是将Web应用程序集成到实时 *** 作系统,其二是可以在Web应用中轻松访问硬件功能。由于GoAhead是开放源代码的,因此这一点不难做到。
2.2 支持将Web页面存储在ROM中
许多嵌入式系统并没有文件系统,因此有必要将web页面保存到ROM中。GoAhead支持对web页面进行编译并将它们链接到最终的可执行文件中。
2.3 加密和用户管理
GoAhead服务器支持使用SSL进行数据加密和认证。同时,它也支持摘要认证机制,一种总是加密密码的更安全的认证机制。用户管理功能允许不同的用户具有不同级别的访问权限。
除了上述要求之外,是否能够快速、方便的生成动态页面是衡量一个嵌入式web服务器的重要指标。GoAhead提供了多种方法编写动态页面,包括asp过程、GoForms过程和embedded JavaScript。GoAhead主要利用asp过程动态获取系统信息然后显示在页面上,GoForms过程则主要用来处理用户指令,例如控制设备和修改配置等。下面以一个动态显示系统当前正在运行的进程信息的小型web应用程序为例,阐述如何利用GoAhead构建嵌入式web应用程序,特别是asp和GoForms过程的使用方法。
GoAhead WebServer采用开放源代码方式,任何人都可以下载、评估并修改代码,目的是为了使GoAhead WebServer成为市场上最领先的嵌入式Web服务器。
支持的平台定制的平台
Windows NT/98/95ChorusOS
Windows CEpSOS
Embedd LinuxuCOS
LinuxIRIX
VxWorksHP-UX
QNXRTEMS
Lynx
3、Goahead Web Server 主要特性:
(1)支持ASP
(2)支持嵌入式JavaScript
(3)标准的CGI执行
(4)内存中的CGI处理GoFrom
(5)扩展的API
(6)快速响应,每秒可处理差超过50个请求
(7)完全和标准兼容
(8)如果不包含SSI,仅要求60K的内存,包含SSI,要求500K内存
(9)Web页面可以存在ROM或文件系统中
(10)支持多种 *** 作系统,包括eCos 、LINUX 、LynxOS 、QNX 、VxWorks 、WinCE、 pSOS等。
4、ASP技术介绍
ASP是Microsoft开发的代替CGI脚本的动态服务网页程序,可以实现与数据库和其他程序的交互。ASP程序允许用户使用包括VBScript,JavaScript等在内的许多已有的脚本语言写ASP应用程序,ASP程序的编制更方便,更灵活。除此之外ASP还具有无编译即可运行,良好的安全性,丰富的内置对象,提供和支持组建功能,瘦客户端等特点。ASP应用程序是在Web服务器上进行解析执行的,而浏览器只是接收和处理HTML流。ASP文件是以“.asp”为扩展名,在传送到浏览器之前用嵌入式脚本插入动态内容。Goahead Web Server支持一个运行时选择脚本引擎的开放式脚本结构。
要创建一个ASP脚本可以使用“<%”和“%>”定界符,例如,下面的JavaScript将在ASP定界符出现的地方,输出“Hello World”。
<h1>Today is <% write("Hello World")%></h1>当用户浏览器要读取ASP文件时,默认的URL程序通过检查文件的扩展名确定页面是否是ASP文件。出现“ .asp” 为扩展名的文件表示需要ASP处理程序来处理,它通过 *** 作从文件系统或ROM读出。在定界符前的内容被直接复制到发出请求的浏览器,当出现ASP定界符时,定界符之间的内容被传送的相关的脚本引擎执行,执行的结果立刻发送的浏览器,这种处理不断重复直到文件结束。
5、嵌入式JavaScript介绍
Goahead 开发了一个嵌入式版本的JavaScript叫做 Ejscript 。JavaScript 是一个非常庞大的语言,它的大小不适用于大部分嵌入式设备。Goahead设计了嵌入式JavaScript解决了这个问题。Ejscript 是JavaScript 的一个严格子集,执行了它基本的语言要素。Ejscript 可应用在ASP中更轻易的建立动态网页。
当JavaScript 用在ASP网页中时,它包含在ASP定界符内,基本格式是:<% function(arguments, ...)%>
JavaScript脚本能跨过多个“\”字符,用在ASP页面中时,函数参数包含了任何查询变量包括在URL查询串或者是标准变量中定义的。URL 查询串自动解码,JavaScript变量被定义了解码查询值。例如,用下面的代码解析名字和地址编码为一个在URL的查询串:
http://localhost/mypage?name=smith&age=35
int myAspProcedure(webs_t wp, int argc, char_t **argv)
{
char_t *name = websGetVar(wp, "name", "undefined")
char_t *age = websGetVar(wp, "age", "undefined")
websWrite(wp, "Name %s, Age", args)
}
JavaScript 程序用websAspDefine API 注册。这样发布了C程序作为JavaScript的全局变量。例如:
extern int outputMyTable(int ejid, webs_t wp, int argc, char_t **argv)
websAspDefine("outputTable", outputMyTable)
websAspDefine连接了JavaScript的命令“outputTable”和c程序“outputMyTable”。当一个ASP页面被浏览器请求时,任何在ASP脚本中出现的outputTable将调用outputMyTable函数。
6、标准的CGI执行介绍
CGI(Common Gate Interface)外部应用程序与信息服务器的标准接口,如HTTP或Web服务器。一个纯HTML是静态的只能检索web不能做改变。一个CGI 程序却可是实时的执行输出的动态内容。
CGI脚本可以用任何语言编写,这种语言能够读STDIN,写STDOUT和读环境变量。这意味着可以使用任何脚本语言,包括C,Perl,甚至shell 脚本。
当URL以/cgi-bin开始时,一个新的程序被调用。CGI可执行程序必须放在Web Server cgi-bin子目录里,每一个CGI请求建立一个独立的进程。
用ASP建造自己的聊天室聊天室想必你一定去过吧,但想不想建立自己的聊天室呢?其实这一点都不难,Active Server Script提供了Application对象和Session对象,Application对象代表了一个Active Server应用程序,也就是一个Web网页,Session对象则表示一个用户,代表一个用户对这个页面的一次访问,通过Application对象可以让访问它的所有用户共享信息,并可以在Web服务器运行期间持久地保存数据,而Session对象也可以在用户的一次访问期间持久地保持数据,利用这两个对象,就可以十分方便地建造自己的Chat应用程序。
---- 一、Application对象:
---- 1.属性:Application对象没有内置的属性,但用户可以定义自己的属性:
---- Application(“属性名称”)=值,一旦分配了属性,它就会一直存在,直到Web服务器关闭服务,而且它能被所有用户读取,所以可以用它在用户之间发送谈话内容。
---- 2.方法:当两个用户同时对Application属性的值进行写入 *** 作时,会出现一方的修改被另一方的 *** 作直接覆盖掉的情况,为了避免这种现象,用户可以调用Lock方法进行锁定,这样只有当前用户才能够对Application的属性进行 *** 作,用户完成 *** 作后调用Unlock方法解锁,使得其他用户也可以修改Application的属性。
---- 3.事件:创建Active Server应用程序需要在Web服务器上存放应用程序的虚拟主目录下创建Global.asa文件,它含有Application对象和Session对象的事件处理例程,通常,Application_Onstart事件用来定义应用级的属性。
---- 二、创建一个Chat应用程序:程序运行时如下图所示(略)
---- 1.设置应用程序的变量:这里需建立两个应用程序级的变量,gchars数组用来存放用户的谈话内容,gcounter用做计数器,控制页面的显示行数,在这里我们让页面最多显示最近的10行谈话内容。当应用程序启动时这些变量必须进行初始化,所以它们的创建都要在Global.asa文件中的Application_onstart事件中:
<script language="vbscript" runat="server" >
sub application_onstart()
dim lchars(10)
application("gchars")=lchars
application("gcounter")=0
end sub
</script >
---- 2.确定处理ASP的方式:当用户第一次请求这个ASP文件时,用的是GET方法,然后,当用户输入完谈话内容后提交时用的是POST方法,在这里表单是向自身提交的,所以这个ASP文件会被再次请求,我们通过测试Request . ServerVariales(“Request_Method”)变量来确定文件被请求的方式:IF Request . ServerVariales(“Request_Method”)=“POST” then
---- 3.确定讲话者:当用户第一次提交谈话内容时需输入自己的姓名,一旦在txtname框中输入数据后,程序将建立一个会话级变量来存放用户姓名,并自动显示在txtname框中,用户就不需再次输入了,除非你想用另一个名字加入会谈。
IF len(request(“txtname”)) >0 then
Session(“ssname”)=request(“txtname”)
End if
<h5 >您的姓名:
<input type=“type” name=“txtname”
length=“20” value=<%=session(“ssname”)% >>
----
---- 4.处理用户的谈话内容:首先要确定已经为Chat写入的谈话行数,为方便阅读,在这里将显示行数限定为10行,如果Application(“gcounter”)大于9,则将其置为0,然后将谈话者姓名和内容一起存放到Application(“gchars”)数组中:
Application(“gchars”)
(Application(“gcounter”))=Session(“ssname”) &
“:” &request(txttalk)
然后将计数器加1:Application(“gcounter”) =Application(“gcounter”)+1
---- 5.将数组内容写入到客户的浏览器中:用户提交谈话内容后,程序必须将数组内容写到客户的浏览器中,让聊天室中的所有人都能看到被提交的谈话内容:
if application("gcounter")=0 then
lstemp=application("gchars")(0)
else
for x=0 to application("gcounter")-1
lstemp=lstemp &"<br >" &application("gchars")(x)
next
end if
---- 最后,用Response.write方法将lstemp变量的值写到客户的浏览器中去:
response.write lstemp
---- 下面给出Default.asp的完整代码:
<%response.expires=0
response.buffer=true% >
<html ><head ><title >Chat sample</title ></head >
<body ><center >
<h3 >我的聊天室</h3 ></center ><hr >
<% if request.servervariables("request_method")="POST" then
if len(request("txtname")) >0 then
session("ssname")=request("txtname")
end if
application.lock
mcounter=application("gcounter")
mchars=application("gchars")
if mcounter >9 then
mcounter=0
end if
mchars(mcounter)=session("ssname")
&":" &request("txttalk")
mcounter=mcounter+1
application("gcounter")=mcounter
application("gchars")=mchars
application.unlock
end if % >
<% if application("gcounter")=0 then
lstemp=application("gchars")(0)
else
for x=0 to application("gcounter")-1
lstemp=lstemp &"<br >" &application("gchars")(x)
next
end if
response.write lstemp % >
<hr ><center >
<form action="default.asp" method=post name="aspform" >
<b ><a href="default.asp" >
更新显示</a ></b >
<h5 >发言:
<input type="text" name="txttalk" size="70" ><br >
<h5 >您的姓名:
<input type="text" name="txtname" length="20"
value=<%=session("ssname")% >>
<input type="submit" name="cmdpost" default="true" value="发送" >
</form ></center ></body ></html >
---- 以上代码在NT4.0、IIS4.0、IE4.0中和Pwin98、PWS、IE4.0中分别运行通过。
嵌入式sql语言是将sql语句直接嵌入到程序的源代码中,与其他程序设计语言语句混合.嵌入式sql的用途:它是数据库应用程序的一种开发方法.是一种应用程序进行数据库访问时所采取的编程式数据库语言.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)