基于FastCGI和HTML模板的嵌入式WEBMVC开发框架的制作方法

文档序号:6377393阅读:767来源:国知局
专利名称:基于FastCGI和HTML模板的嵌入式WEB MVC开发框架的制作方法
技术领域
本发明涉及一种基于FastCGI和HTML模板的嵌入式WEB MVC开发框架。
背景技术
目前市面上有不少嵌入式设备上WEB开发框架,如使用PHP、EJscript以及近来新起的服务端JavaScript等,但大多数都体积太大动辄好几兆。在一些小型嵌入式设备上因成本原因Flash空间都非常小,很多只有6-8M,在这点flash空间上大部分要用来存放业务程序代码,不可能为WEB应用使用太大的开发框架。
市面上也有些小型嵌入式设备上WEB开发框架,其实现方法为Web Server接受到Http请求解析出用户提交的数据放到环境变量,CGI程序从环境变量中读取用户数据进行相应业务处理后构造相应HTML页面打印输出。但这种方法实现的太简单,有的只是实现了一个类似HTML模板,将业务通过一个标签映射到业务代码,特制较多,不适用通用WEB开发且基本只适用于CGI,性能低下。有鉴于此,本发明人针对现有技术的缺陷深入研究,并有本案产生。

发明内容
本发明所要解决的技术问题在于提供一种基于FastCGI和HTML模板的嵌入式WEBMVC开发框架,适用于小型嵌入式设备,小巧、高效、结构优良,框架体积小巧只占用100K左右flash空间。本发明采用以下技术方案解决上述技术问题
基于FastCGI和HTML模板的嵌入式WEB MVC开发框架,该框架运行向下依赖FastCGI进程管理器及网页服务器,向上为WebApp Plugin业务逻辑处理模块提供服务;其特征在于该框架包括FastCGI子进程模块、请求派发控制模块、侦听器管理模块、业务插件管理模块、Session会话控制模块、编解码模块、数据接收模块、数据响应输出模块和HTML模板模块;
所述FastCGI子进程模块通过Socket或者PIPE与所述网页服务器通信,用于阻塞等待所述FastCGI进程管理器的连接;当接收到浏览器的请求时,所述网页服务器与该模块建立连接,将数据传递过来,该模块完成处理后将标准输出和错误信息从同一连接返回所述网页服务器;当该模块关闭连接时,请求便告处理完成;该模块接着等待并处理来自运行在网页服务器中的FastCGI进程管理器的下一个连接;若是在CGI模式中进程在此便退出了,再将结果数据传递给网页服务器并关闭连接,再阻塞等待下一次连接;
所述请求派发控制模块负责请求到来时,使用多线程对请求进行派发控制处理;该模块从FastCGI进程管理器获得请求,首先调用所述数据接收模块将页面数据封装,然后调用所述Session会话控制模块刷新Session,后将请求交给所述侦听器管理模块;
所述侦听器管理模块负责根据配置文件动态加载、管理所述WebApp Plugin业务逻辑处理模块的业务侦听器插件;侦听器容器从所述请求派发控制模块获得请求,根据配置将请求交给各侦听器逐一处理,侦听器处理完后根据返回结果决定是否继续处理该请求,如不需要处理则返回所述数据响应输出模块,如需处理则将请求交给所述业务插件管理模块;
所述业务插件管理模块负责根据配置文件动态加载业务插件,管理所述WebAppPlugin业务逻辑处理模块的业务处理插件;该模块接收到所述侦听器管理模块的请求后进行相应的业务逻辑处理,此时用户可视情况决定直接拼凑HTML将处理结果输出到客户端或者将结果数据封装到一个链表,并设置所述HTML模板模块通过该模板输出HTML到客户端;
所述Session会话控制模块为用户二次开发提供会话控制功能,该会话控制利用cookie实现,在向浏览器返回数据时设置上一个Cookie携带上一串随机生成的Sessionid,同时该Session id与Session容器中某个Session对象建立一对一关联;浏览器重 新发起请求时会带上Cookie,所述网页服务器获取该Cookie找到Session id再查找到 Session对象,以此对象维护多个请求间的会话;当浏览器一定时间没有和网页服务器请求时,Session自动超时销毁;
所述编解码模块完成URL,HTML特殊字符编解码;
所述数据接收模块对请求提交的数据进行统一封装,对应用层屏蔽GET提交和POST提交的差异,用户通过该模块API获取表单、cookie、文件上传数据;
所述数据响应输出模块J^HTTP响应信令进行封装提供重定向、状态码、响应内容类型、字符编码、HTML输出功能支持;
所述HTML模板模块通过使用服务端标签实现内容动态替换,标签包括数据输出标签、逻辑判断标签、循环控制标签、文件包含标签四类。进一步地,所述侦听器管理模块动态加载业务侦听器插件,具体包括框架定义侦听器接口,侦听器插件按照侦听接口规范实现插件类,将插件创建函数名添加到插件配置文件,侦听器模块启动时解析配置文件找到创建函数创建插件实例。进一步地,所述业务插件管理模块动态加载业务插件,具体包括框架定义业务插件接口,业务插件按照插件接口规范实现插件类,将插件创建函数名加入到插件配置文件中,业务插件模块启动时解析配置文件找到创建函数创建插件实例。本发明的优点在于本发明使用了 FastCGI技术解决了传统CGI速度响应慢的问题;使用了插件进行业务开发保证框架小巧灵活普遍使用;使用HTML模板技术实现页面显示和逻辑完全分离的MVC结构(这里视图层V即为HTML模板模块,而逻辑层M为业务插件管理模块,V与M通过控制层C进行交互,控制层由上面所述的请求派发控制模块、Session会话控制模块组成);使用二级压缩充分减小页面空间占用;对Session、HTTP header等常用操作API支持便于WEB业务开发。框架集中专注小型嵌入式设备上的应用场景实现了一个性能优越、开发快速、结构优良且体积小巧的WEB开发框架。


下面参照附图结合实施例对本发明作进一步的描述。图I是本发明中模块关系示意图。图2是本发明中FastCGI子模块关系示意图。
图3是本发明中FastCGI子进程模块流程示意图。图4是本发明中请求派发控制模块流程示意图。图5是本发明中框架定义侦听器接口示意图。图6是本发明中框架定义业务插件接口示意图。图7是本发明中Session会话控制模块的会话创建流程图。图8是本发明中Session会话控制模块的Session清理流程图。图9是使用本发明的框架的请求处理流程示意图。
具体实施方式
如图I所示,框架系统上下文定义,网页服务器是指Web前端服务器,此服务器负责完成连接管理,静态资源文件处理等,本发明所属网页服务器需支持FastCGI,参考服务器如Lighttpd, Apache等;FastCGI进程管理器是指实现了 FastCGI规范、能完成CGI解析器进程管理功能的中间件;FCGI Server是本发明所述框架部分,框架运行需向下依赖FastCGI进程管理器及网页服务器,向上为WebApp Plugin业务模块提供服务;WebAppPlugin是本发明所述用户基于框架做二次开发实现的业务逻辑处理模块,该模块需实现框架接口,以插件的形式存在独立编译成动态库,通过配置文件指定插件参数能被框架自动加载运行。其中包含业务侦听器插件和业务处理插件两类。侦听器插件是一种能接受所有请求插件,框架会将所有请求都交给侦听器插件逐一过滤,侦听器插件处理后同意执行的请求框架才会继续将该请求派发到具体的业务插件处理,给用户做全局请求控制处理能力;业务处理插件是完成某项具体任务的应用程序,框架会根据配置文件派发业务处理请求,只有该业务插件关心的请求才会被派发到该插件处理。本发明如图2所示,基于FastCGI和HTML模板的嵌入式WEB MVC开发框架,包括FastCGI子进程模块、请求派发控制模块、侦听器管理模块、业务插件管理模块、Session会话控制模块、编解码模块、数据接收模块、数据响应输出模块和HTML模板模块。FastCGI子进程模块通过Socket或者PIPE与所述网页服务器通信,用于阻塞等待所述FastCGI进程管理器的连接;当接收到浏览器的请求时,所述网页服务器与该模块建立连接,将数据传递过来,该模块完成处理后将标准输出和错误信息从同一连接返回所述网页服务器;当该模块关闭连接时,请求便告处理完成;该模块接着等待并处理来自运行在网页服务器中的FastCGI进程管理器的下一个连接;若是在CGI模式中进程在此便退出了,再将结果数据传递给网页服务器并关闭连接,再阻塞等待下一次连接。如图3所
/Jn ο请求派发控制模块负责请求到来时,使用多线程对请求进行派发控制处理。该模块从FastCGI进程管理器获得请求,首先调用所述数据接收模块将页面数据封装,然后调用所述Session会话控制模块刷新Session,后将请求交给所述侦听器管理模块。如图4所示。侦听器管理模块负责根据配置文件动态加载、管理业务侦听器插件。负责根据配置文件动态加载、管理所述WebApp Plugin业务逻辑处理模块的业务侦听器插件;侦听器容器从所述请求派发控制模块获得请求,根据配置将请求交给各侦听器逐一处理,侦听器处理完后根据返回结果决定是否继续处理该请求,如不需要处理则返回所述数据响应输出模块,如需处理则将请求交给所述业务插件管理模块。侦听器管理模块动态加载业务侦听器插件,具体包括框架定义侦听器接口,如图5所示;侦听器插件按照侦听接口规范实现插件类,将插件创建函数名添加到插件配置文件,如
< xml version=〃L 0〃 encoding=〃utf_8〃?>
〈lib path=,,/lib/mod—servlet. so,,>
〈listener createfunction=,,createLoginListener,,/>
</lib>
参数说明
path 指定插件库·
createfunction : 指定插件创建函数名
侦听器模块启动时解析配置文件找到创建函数创建插件实例。业务插件管理模块负责根据配置文件动态加载业务插件,管理业务插件。该模块接收到所述侦听器管理模块的请求后进行相应的业务逻辑处理,此时用户可视情况决定直接拼凑HTML将处理结果输出到客户端或者将结果数据封装到一个链表,并设置所述HTML模板模块通过该模板输出HTML到客户端;业务插件管理模块动态加载业务插件,具体包括框架定义业务插件接口,如图6所示;业务插件按照插件接口规范实现插件类,将插件创建函数名加入到插件配置文件中,如
< xml version=〃L 0〃 encoding=〃utf_8〃?>
〈lib path=,,/lib/mod—servlet. so〃>
〈servlet id=〃login〃 createfunction=〃createLoginServlet〃 />
〈servlet id=〃status〃 createfunction=〃createStatusServlet〃 />
</lib>
参数说明
Path :指定插件库
id 指定请求派发时映射标识
createfunction : 指定插件创建函数名
业务插件模块启动时解析配置文件找到创建函数创建插件实例。Session会话控制模块为用户二次开发提供会话控制功能,该会话控制利用cookie实现,在向浏览器返回数据时设置上一个Cookie携带上一串随机生成的sessionid,同时该Session id与session容器中某个session对象建立一对一关联;浏览器重新发起请求时会带上Cookie,服务器获取该Cookie找到session id再查找到session对象,以此对象维护多个请求间的会话;实现流程如图7所示。当浏览器一定时间没有来和网页服务器请求时,Session自动超时销毁;如图8所示。编解码模块完成URL,HTML特殊字符编解码。数据接收模块对请求提交的数据进行统一封装,对应用层屏蔽GET提交和POST提交差异,用户通过该模块API获取表单、cookie、文件上传数据;
数据响应输出模块J^HTTP响应信令进行封装提供重定向、状态码、响应内容类型、字符编码、HTML输出功能支持。
HTML模板模块通过使用服务端标签实现内容动态替换,标签包括数据输出标签、逻辑判断标签、循环控制标签、文件包含标签四类。数据输出标签,如
<csp:var name=〃varname〃 default=〃value〃/>
实现将数据varname动态填充到HTML页面中该标签所处位置。逻辑判断标签,如
<csp: if name=,,varname,,value=,,testvalue,,>
<hl>varname equal testvalue </hl>
<csp: elsif name =,,varname,,value=,,testvalue2,,>
<hI>varname equal testvalue2</hl>
<csp:else>
<hI>varname neither equal testvalue nor testvalue2</hl> </csp:if>
如果 varname 值与 testvalue 值相等将输出〈hl>varname equal testvalue </hl> 如果 varname 值与 testvalue2 值相等将输出〈hl>varname equal testvalue2 </
hl>
否则将输出 <hl>varname neither equal testvalue nor testvalue2</hl>
循环控制标签,如
<csp: loop name=〃loopname〃>
<hl>here is loop tag output〈/hl>
</csp:loop>
将根据loopname中数组或链表个数循环输出 <hl>here is loop tag output〈/hl>
文件包含标签,如
〈csp:include name=〃filename〃>
此标签将filename的页面内容拷贝到标签所在位置。使用本发明的框架,系统启动步骤为
网页服务器启动时加载FastCGI进程管理器创建一个或多个CGI解析进程(FCGIServer)并等待来自网页服务器的链接;
框架启动时解析XML配置文件,发现有插件动态库的配置则打开动态库,再查找插件配置,发现插件配置后解析出插件入口函数通过入口函数创建插件实例;如果插件是配置成懒加载的,则在启动时不创建插件实例,只有在有请求调用的时候才创建插件实例,尽量减少内存空间占用。使用本发明的框架,请求处理步骤为
网页服务器接收到浏览器请求,判断该请求是需要FCGIServer处理的,则FastCGI进程管理器选择并连接到一个FCGIServer。网页服务器将CGI环境变量和标准输入发送到FCGIServer ;
FCGIServer接收到请求后交给请求派发控制模块;
请求派发控制模块将页面数据封装、调用Sessions会话控制模块刷新Session,后将请求交给侦听器容器,侦听器容器根据配置将请求交给各个侦听器逐一处理;
侦听器处理完后根据返回结果决定是否继续处理该请求,如不需要处理则返回,如需处理则将请求按照配置规则在插件容器中查找匹配到相应的处理插件,若找到对应的插件则将请求交给插件,同时将页面数据注入给插件;
插件接收到请求后进行相应的业务逻辑处理,此时用户可视情况决定直接拼凑HTML将处理结果输出到客户端或者将结果数据封装到一个链表,并设置HTML模板通过模板输出HTML到客户端;
通常简单是结果输出可直接拼凑HTML ;若需要返回一个较多内容和样式的页面则使用HTML模板能更好将数据和样式分离;
插件处理完业务逻辑返回后框架接着处理,框架将插件设置的数据链表和HTML模板绑定将链表的数据输出到HTML模板中。 具体可参阅图9。使用本发明的框架,WEB发布步骤为
步骤一将HTML,HTML模板进行多余字符压缩,此不影响浏览器解析但能减少字符
数;
减小文件体积;
去除注释;
去除HTML、HTML模板文件中“ ”、“\t\n”等格式控制字符;
将内容为空的标签压缩如〈a href=”#” ></a>压缩为〈a href=”#”/> ;
将javascript中较长的函数名替换成短函数名;
步骤二 使用gzip做二级压缩
使用GZIP将HTML模板页面压缩,读取HTML模板时判断如果文件后缀是.gz压缩的,则由原来的直接读取文件改为从压缩包中解压出文件数据,以一定的时间消耗换取空间;引入GZIP压缩后页面空间占用减少达到60%以上。本发明使用了 FastCGI技术解决了传统CGI速度响应慢的问题;使用了插件进行业务开发保证框架小巧灵活普遍使用;使用HTML模板技术实现页面显示和逻辑完全分离的MVC结构;使用二级压缩充分减小页面空间占用;对Session、HTTP header等常用操作API支持便于WEB业务开发。框架集中专注小型嵌入式设备上的应用场景实现了一个性能优越、开发快速、结构优良且体积小巧的WEB开发框架。以上所述仅为本发明的较佳实施用例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应包含在本发明的保护范围之内。
权利要求
1.基于FastCGI和HTML模板的嵌入式WEBMVC开发框架,该框架运行向下依赖FastCGI进程管理器及网页服务器,向上为WebApp Plugin业务逻辑处理模块提供服务;其特征在于该框架包括FastCGI子进程模块、请求派发控制模块、侦听器管理模块、业务插件管理模块、Session会话控制模块、编解码模块、数据接收模块、数据响应输出模块和HTML模板模块; 所述FastCGI子进程模块通过Socket或者PIPE与所述网页服务器通信,用于阻塞等待所述FastCGI进程管理器的连接;当接收到浏览器的请求时,所述网页服务器与该模块建立连接,将数据传递过来,该模块完成处理后将标准输出和错误信息从同一连接返回所述网页服务器;当该模块关闭连接时,请求便告处理完成;该模块接着等待并处理来自运行在网页服务器中的FastCGI进程管理器的下一个连接;若是在CGI模式中进程在此便退出了,再将结果数据传递给网页服务器并关闭连接,再阻塞等待下一次连接; 所述请求派发控制模块负责请求到来时,使用多线程对请求进行派发控制处理;该模块从FastCGI进程管理器获得请求,首先调用所述数据接收模块将页面数据封装,然后调用所述Session会话控制模块刷新Session,后将请求交给所述侦听器管理模块; 所述侦听器管理模块负责根据配置文件动态加载、管理所述WebApp Plugin业务逻辑处理模块的业务侦听器插件;侦听器容器从所述请求派发控制模块获得请求,根据配置将请求交给各侦听器逐一处理,侦听器处理完后根据返回结果决定是否继续处理该请求,如不需要处理则返回所述数据响应输出模块,如需处理则将请求交给所述业务插件管理模块; 所述业务插件管理模块负责根据配置文件动态加载业务插件,管理所述WebAppPlugin业务逻辑处理模块的业务处理插件;该模块接收到所述侦听器管理模块的请求后进行相应的业务逻辑处理,此时用户可视情况决定直接拼凑HTML将处理结果输出到客户端或者将结果数据封装到一个链表,并设置所述HTML模板模块通过该模板输出HTML到客户端; 所述Session会话控制模块为用户二次开发提供会话控制功能,该会话控制利用cookie实现,在向浏览器返回数据时设置上一个Cookie携带上一串随机生成的Sessionid,同时该Session id与Session容器中某个Session对象建立一对一关联;浏览器重新发起请求时会带上Cookie,所述网页服务器获取该Cookie找到Session id再查找到Session对象,以此对象维护多个请求间的会话;当浏览器一定时间没有和网页服务器请求时,Session自动超时销毁; 所述编解码模块完成URL,HTML特殊字符编解码; 所述数据接收模块对请求提交的数据进行统一封装,对应用层屏蔽GET提交和POST提交的差异,用户通过该模块API获取表单、cookie、文件上传数据; 所述数据响应输出模块J^HTTP响应信令进行封装提供重定向、状态码、响应内容类型、字符编码、HTML输出功能支持; 所述HTML模板模块通过使用服务端标签实现内容动态替换,标签包括数据输出标签、逻辑判断标签、循环控制标签、文件包含标签四类。
2.如权利要求I所述的基于FastCGI和HTML模板的嵌入式WEBMVC开发框架,其特征在于所述侦听器管理模块动态加载业务侦听器插件,具体包括框架定义侦听器接口,侦听器插件按照侦听接口规范实现插件类,将插件创建函数名添加到插件配置文件,侦听器模块启动时解析配置文件找到创建函数创建插件实例。
3.如权利要求I所述的基于FastCGI和HTML模板的嵌入式WEB MVC开发框架,其特征在于所述业务插件管理模块动态加载业务插件,具体包括框架定义业务插件接口,业务插件按照插件接口规范实现插件类,将插件创建函数名加入到插件配置文件中,业务插件模块启动时解析配置文件找到创建函数创建插件实例。
全文摘要
基于FastCGI和HTML模板的嵌入式WEBMVC开发框架,该框架运行向下依赖FastCGI进程管理器及网页服务器,向上为WebAppPlugin业务逻辑处理模块提供服务;该框架包括FastCGI子进程模块、请求派发控制模块、侦听器管理模块、业务插件管理模块、Session会话控制模块、编解码模块、数据接收模块、数据响应输出模块和HTML模板模块。本发明提供了一种基于FastCGI和HTML模板的嵌入式WEBMVC开发框架,适用于小型嵌入式设备,小巧、高效、结构优良,框架体积小巧只占用100K左右flash空间。
文档编号G06F9/44GK102902537SQ20121035059
公开日2013年1月30日 申请日期2012年9月19日 优先权日2012年9月19日
发明者黄庆文 申请人:厦门亿联网络技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1