
WEB-模块详细设计说明.doc
14页技 术 文 件 技术文件名称:WEB软件模块详细设计说明 技术文件编号: 版 本:1.0 共 页(包括封面) 拟 制 审 核 会 签 标准化 批 准 住网通信技术有限公司修改记录文件编号版本号拟制人/修改人拟制/修改日期更改理由主要更改内容(写要点即可)1.0李建永2006-1-17初版注1:每次更改归档文件(指归档到事业部或公司档案室的文件)时,需填写此表。
注2:文件第一次归档时,“更改理由”、“主要更改内容”栏写“无”目 录1 编写目的 32 术语、定义和缩略语 32.1 术语、定义 32.2 缩略语 33 模块描述 34 模块设计 45 数据描述 105.1 数据结构说明 105.2 全局变量说明 106 函数定义 126.1 引用函数定义 126.2 内部函数定义 126.2.1 内部函数1 126.2.2 内部函数2 126.2.3 内部函数n 127 接口设计 127.1 用户接口 127.2 硬件接口 127.3 软件接口 137.3.1 规范接口 137.3.2 非规范接口 138 其它说明 139 参考资料 131 编写目的<要求:说明编写本文件的目的在于详细地说明××××模块中各成分的设计考虑,以利于程序员编制程序>2 术语、定义和缩略语2.1 术语、定义<要求:逐项列出本文中用到的难以理解或可能引起混淆的术语及其定义>CGI Common Gateway InterfaceCSS Cascading Style SheetsMIME Multipurpose Internet Mail ExtensionsFirmware 嵌入式设备的软件nph- No Parse HeaderMini-httpd 一种HTTP ServerIE Microsoft Internet Explorer Netscape Navigator Netscape 的WEB 浏览器2.2 缩略语本文件应用了以下缩略语:<要求:逐项列出本文中用到的缩略语及其原文和汉语含义。
>3 模块描述<要求:从模块在系统中的位置,实现原理及方式、实现的主要功能等方面来描述该模块的概貌>我们说的WEB 模块是指运行在系统中的一个WEB部件它由两大部分组成,一是指WEB-Server,这是我们选用一个开源的WEB Serever mini-httpd;另一个部分是指WEB 应用程序部分,它通常由静态的WEB页面(HTML文件)、图片及相关文件(如CSS文件)和动态的交互WEB部分,如CGI、ASP、JAVA SCRIPT等这里静态文件部分我们全部支持,动态WEB部分我们采用CGI + JAVA SCRIPT 的方式实现(这里JAVA SCRIPT是指运行在运行客户端的JAVA SCRIPT)因为HTML 我们使用HTML 4.0 以上版本,CSS使用2.0版及其以上,故客户端浏览器必须是 IE4.0 及更高版本、Netscape Navigator 4.0及更高的版本目前CGI已经发布了2.0及以上版本,但是主流WEB Server急乎还是仅支持到CGI1.1版,所以后文提到CGI的相关的内容全部以CGI1.1为准WEB 模块的工作流程如下:环境变量/及输入/输出流HTTP 应答HTTP 请求文件系统用户/浏览器WEB SERVERCGI脚本处理说明如下:1. 左边的虚框内代表用户及其浏览器,右边的虚框代表整个WEB模板。
2. 用户通过浏览器向WEB模块发出 HTTP请求3. 在WEB模块内部由 HTTP Server子模块接收请求4. HTTP Server 解析 HTTP头部,决定请求的类型为请求静态文件还是请求CGI处理5. 如果请求的为表态文件,如静态HTML页面,CSS文件,图片文件等,HTTP Server将从文件系统中读取该文件,并构造HTTP应答消息,返回客户端6. 如果请求的是CGI处理,HTTP Sever读取CGI脚本文件,并发起新的进程运行之7. CGI从环境变量和标准输入中获取输入参数,并解析输入处理请求,最后构造HTTP应答返通过标准输出将HTTP应答返回给客户浏览器8. CGI处理时可以从文件系统中读取必要的信息,也可以向文件系统中存入必要的处理结果,如用户上传的文件等重要注意:1. CGI脚本可以很多语言进行实现,如C、PERL、JAVA Script等,考虑嵌入式系统的特点,及在本系统中没有PERL、JAVA Script 等脚本解释器,故选择用 C 实现2. 本系统的参考实现为CE/3,在CE/3实现中HTTP Server并未发起新的进程来运行CGI脚本,而是修改了HTTP Server,让其直接调用CGI模块的处理入口函数。
这样实现性能比较高,没有发起新进程的开销;不足之处是,一旦 CGI处理模块出现问题,将可能影响HTTP Server的正常工作,甚至崩溃这要求在CGI设计时必须十分小心4 模块设计<要求:主要用文字、图表等形式详细描述该模块的状态迁移、信号流程、程序流程、界面安排、进程关系、异常处理、错误处理等方面详细说明本模块中的可测试性设计,包括提供的测试接口,测试内容和范围等>WEB模块 由 WEB Server子模块 、应用程序子模块组成应用程序子模块通常又可以划为CGI 处理子模块、静态文件组成静态文件是指服务于CGI处理子模块的处理,如CGI输出页面要访问的图片、CSS文件、HTML内容等故后文在描述应用程序子模块时将针对CGI处理和静态文件处理分开描述WEB Server子模块:WEB Server 的输入,WEB 浏览器(WEB Browser)向WEB Server 发出的请求最常的包括如下两类:GET 通过URL编码格式向WEB Server 请求指定的页面或文件,POST 向 WEB Server 传送数据;WEB Server 的输出:请求的静态文件作为输出、CGI 进行输出、HTTP请求错误输出等。
Mini-httpd 处理的流程如下:1. 用户可以通过命令行启动 WEB Server2. WEB Server 解析命令行输入,初始化WEB Server系统3. 设置系统对文件访问的权限4. 初始化侦听的 socket,initialize_listen_socket()5. Release 模式将进程自己置为守护进程daemon()6. 当有新的客户端连接时,将发起一个新进程来处理请求 fork()7. 子进程通过handle_request() 来处理该求, handle_request()处理如下:1. 接收HTTP 请求头,并解析请求头2. 设置 HTTP 请求应答处理的超时时间3. 如果请求头中未指明了请求的文件,将列举指定的目录,在CE/3的参考实现中是输出了一默认主面4. 否则调用 dofile() 来进行文件处理,即5. 首先对客户端进行验证6. 如果验证失败退出处理7. 验证OK,则将文件类型分为两类:CGI类型和静态文件类型8. CGI类型调用do_cgi()处理CGI9. 否则,从文件系统中读入文件并返回给客户端10. CGI处理过程如下:11. 构造环境变量,构造命令行参数12. 设置进程的标准输出、输出和出错描述描述符13. 调用execve()发起新进程 执行CGI脚本程序,在CE/3的参考实现中则是直接调用cgi_handler() 进行CGI处理过程14. 因此cgi_handler()是WEB Server 子模块和CGI处理模块的接口CGI子模块:CGI 是通用网接口 (Common Gateway Interface) 的缩写,用于动态处理来自客户端的HTTP请求,并以HTTP的格式对客户端做出应答。
HTTP的请求和应答包括两部分:前一部分是HTTP 头,后一部分HTTP体HTTP头与HTTP体用两个连续的换行符分隔HTTP头中指明CGI处理结果的状态(如200 OK,304 Not Modified,400 Bad Request,500 Internal Server Error等),HTTP体数据的格式(即MIME头,如,text/html,img/jpeg等)以及相关的信息(如Cookie信息,最大超期时限,是否允许代理缓存等)HTTP体可以是文本型数据也可以是流式数据,它的类型已经在HTTP头中用MIME头进行指明如传送一段HTML文本,它的MIME头必须为:Content-Type: text/html,在传送一个二进制的图片文件或Firmware文件时,它的MIME头必须为:Content-Type: img/xxx,后面的xxx代表文件的类型在代为应答时,客户浏览器可以xxx代表的类型对文件进行正确的显示,如xxx为jpeg时,客户端浏览器将以JPEG格式将图片显示通常,来自客户端的HTTP请求头会被WEB Server解析,并存入相应的环境变量中,它些环境变量在 CGI1.1中已经给出了定义,详见:http://hoohoo.ncsa.uiuc.edu/cgi/。
CGI脚本程序通过这些环境变量和标准输入stdin获取来自客户端的输入,所以通常CGI脚本程序不需要自己解析HTTP头部CGI脚本程序在做出应答时,必须指明自己输出HTTP头部和HTTP体,头部与体用两个连续的换行符进行分隔如下给出一个简单的示例:HTTP/1.0 200 OK\nContent-Type: text/html\n\n\n
\nHello world, this is an http respond sample.\n\n\n需要说明的,HTTP头部中的Content-Type: text/html是必须由CGI脚本程序输出的,因为它指示了HTTP体中的内容的类型HTTP/1.0 200 OK CG。