青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數(shù)據(jù)加載中……

利用GoAhead構(gòu)建嵌入式web應(yīng)用

關(guān)鍵字:GoAhead, 嵌入式web服務(wù)器, web應(yīng)用

摘要:詳細(xì)介紹了開源嵌入式web服務(wù)器GoAhead的原理,并結(jié)合具體實例說明如何利用它構(gòu)建嵌入式web應(yīng)用。

Key words: GoAhead, embedded web server, web application

Abstract: This paper introduces the principle of open source embedded web server GoAhead, and explains how to build embedded web application using GoAhead combined with practical examples.

1 簡介

廉價的硬件,功能強(qiáng)大的32操作系統(tǒng),以及無處不在的因特網(wǎng),它們一起促成了網(wǎng)絡(luò)應(yīng)用和設(shè)備的飛速增長。大量的設(shè)備連接到網(wǎng)絡(luò)上,于是人們希望通過一種通用、熟悉、快捷的方式來訪問和控制它們。嵌入式web服務(wù)器正好迎合了這種需求,它們嵌入在網(wǎng)絡(luò)設(shè)備之中,使用標(biāo)準(zhǔn)的瀏覽器就可以遠(yuǎn)程訪問和控制它們。

然而,并不是所有的web服務(wù)器都可以擔(dān)當(dāng)如此重任,我們需要的是一個強(qiáng)大,安全,標(biāo)準(zhǔn)的,而且最好是久經(jīng)考驗的嵌入式web服務(wù)器。這里將要介紹的GoAhead嵌入式web服務(wù)器能夠滿足所有這些需求,包括西門子,霍尼韋爾,惠普等大型企業(yè)都在使用GoAhead

2 嵌入式web服務(wù)器的要求

2.1 易于與設(shè)備集成

易于與設(shè)備集成包含兩個方面的意思,其一是將Web應(yīng)用程序集成到實時操作系統(tǒng),其二是可以在Web應(yīng)用中輕松訪問硬件功能。由于GoAhead是開放源代碼的,因此這一點不難做到。

2.2 支持將Web頁面存儲在ROM

許多嵌入式系統(tǒng)并沒有文件系統(tǒng),因此有必要將web頁面保存到ROM中。GoAhead支持對web頁面進(jìn)行編譯并將它們鏈接到最終的可執(zhí)行文件中。

2.3 加密和用戶管理

GoAhead服務(wù)器支持使用SSL進(jìn)行數(shù)據(jù)加密和認(rèn)證。同時,它也支持摘要認(rèn)證機(jī)制,一種總是加密密碼的更安全的認(rèn)證機(jī)制。用戶管理功能允許不同的用戶具有不同級別的訪問權(quán)限。

除了上述要求之外,是否能夠快速、方便的生成動態(tài)頁面是衡量一個嵌入式web服務(wù)器的重要指標(biāo)。GoAhead提供了多種方法編寫動態(tài)頁面,包括asp過程、GoForms過程和embedded JavaScriptGoAhead主要利用asp過程動態(tài)獲取系統(tǒng)信息然后顯示在頁面上,GoForms過程則主要用來處理用戶指令,例如控制設(shè)備和修改配置等。下面以一個動態(tài)顯示系統(tǒng)當(dāng)前正在運(yùn)行的進(jìn)程信息的小型web應(yīng)用程序為例,闡述如何利用GoAhead構(gòu)建嵌入式web應(yīng)用程序,特別是aspGoForms過程的使用方法。

3 動態(tài)頁面支持

在嵌入式設(shè)備中,大部分web頁面都是動態(tài)生成的。生成動態(tài)頁面的方法主要有兩種,通過C代碼生成HTML標(biāo)簽和在HTML頁面中嵌入表達(dá)式標(biāo)簽。直接通過C代碼生成頁面的優(yōu)點是靈活,但是卻犧牲了友好性,因為不到開始運(yùn)行程序的最后一刻,你不可能知道這個頁面看起來會是個什么樣子。相比之下,第二種方法更加直觀,你可以使用你所喜歡的工具以所見即所得的方式編輯頁面,在必要的地方添加占位符,運(yùn)行時它們會被動態(tài)產(chǎn)生的數(shù)據(jù)代替。GoAhead完全支持這兩種方式。

為了方便的創(chuàng)建具有高度交互性的動態(tài)網(wǎng)頁,GoAhead提供了asp過程和GoForms過程兩種武器。它們實際上都與定義在服務(wù)器端的某個C函數(shù)綁定在一起,只是分工不同,asp過程用來生成顯示在頁面中的動態(tài)數(shù)據(jù),而GoForms過程則用來處理用戶輸入和修改設(shè)置,它們一起構(gòu)成了GoAhead的核心。

3.1 ASP過程

ASP最初用于IIS中,它是微軟開發(fā)的生成動態(tài)Web頁面的服務(wù)器端技術(shù)。現(xiàn)在已經(jīng)被移植到包括GoAhead的各種平臺中,使用ASP的網(wǎng)頁的后綴一般為“.asp”。為了在Web頁面中嵌入ASP腳本,只需使用特殊的標(biāo)簽“<%” “%>”將腳本包裹起來。之所以使用ASP標(biāo)簽?zāi)康氖菫榱讼蛴脩麸@示動態(tài)內(nèi)容,例如系統(tǒng)進(jìn)程信息等。因為動態(tài)內(nèi)容實際上是在執(zhí)行特定的C函數(shù)生成的,所以需要將web頁面中的ASP標(biāo)簽與特定的C函數(shù)聯(lián)系在一起。一般,整個過程大致可以分成以下三個步驟:

1. 設(shè)計web頁面,動態(tài)內(nèi)容使用特定的asp過程名替代,也稱其為一個占位符。

2. 在某個.c文件中定義與asp過程對應(yīng)的C函數(shù)

3. main.c文件中的initWebs函數(shù)中使用websAspDefine注冊asp過程

以清單1中的<% UpdateProcInfor(); %>標(biāo)簽為例,此標(biāo)簽的目的是為了顯示系統(tǒng)當(dāng)前正在運(yùn)行的進(jìn)程的信息。獲取進(jìn)程信息實際上是由位于ui.c中的UpdateProcInfo函數(shù)完成的,詳見清單2,它負(fù)責(zé)獲取系統(tǒng)進(jìn)程信息,并格式化為HTML輸出。清單3中的websAspDefine函數(shù)將<% UpdateProcInfor(); %>標(biāo)簽與UpdateProcInfo函數(shù)關(guān)聯(lián)起來,這樣當(dāng)GoAhead解析home.asp頁面遇到<% UpdateProcInfor(); %>標(biāo)簽時,控制權(quán)就會跳轉(zhuǎn)到UpdateProcInfor()函數(shù),在輸出以HTML格式表示的進(jìn)程信息后,控制權(quán)轉(zhuǎn)交給GoAhead繼續(xù)解析home.asp頁面。

注意:asp過程必須符合原型:int AspProcName (int ejid, webs_t wp, int argc, chart_t **argv);
其中,ejid參數(shù)作為JavaScript解釋器句柄可以用來調(diào)用JavaScript相關(guān)函數(shù),例如ejGetVarejSetResultwp參數(shù)作為瀏覽器連接的句柄,可以用來調(diào)用很多有用的GoAhead服務(wù)器函數(shù),例如用來輸出HTML語句的websWrite等。argcargv包含傳遞給asp過程的實參的個數(shù)和內(nèi)容。

//清單1home.asp(省略了其它無關(guān)的部分,細(xì)節(jié)請參考附帶源代碼)

<html>

<head>

<% WriteMetaElement(); %>

</head>

<form action="/goform/UpdateConfig" method="post">

<input type="text" name="interval" value="" size="7" />

<input type="submit" name="ok" value="Update" />

<input type="reset" name="cancel" value="Reset" />

</form>

<% UpdateProcInfo(); %>

</html>

//清單2ui.c

#include "ui.h"

#include "..\webs.h"

//HTML格式輸出系統(tǒng)當(dāng)前進(jìn)程信息

int UpdateProcInfo(int ejid, webs_t wp, int argc, char_t *argv)

{

return WriteProcPage(wp);

}

//根據(jù)用戶輸入改變刷新間隔時間設(shè)置

void UpdateConfig(webs_t wp, char_t *path, char_t *query)

{

int tmpInterval=_ttoi(websGetVar(wp, L"interval", L"-1"));

if(tmpInterval>3)

{

s_interval=tmpInterval;

}

websRedirect(wp, L"home.asp");

}

//清單3main.c文件中的initWebs()函數(shù)

#include "ui.h"

//關(guān)聯(lián)asp標(biāo)簽和C函數(shù)名字

websAspDefine(T("UpdateProcInfo"), UpdateProcInfo);

websAspDefine(T("WriteMetaElement"), WriteMetaElement);

//關(guān)聯(lián)GoForms標(biāo)簽和C函數(shù)名字

websFormDefine(T("UpdateConfig"), UpdateConfig);

3.2 GoForms過程

GoAhead實現(xiàn)了稱為GoForms的標(biāo)準(zhǔn)的通用網(wǎng)關(guān)接口(CGI)處理用戶提交的表單。與傳統(tǒng)的CGI方法不同,GoForms過程不是為每個瀏覽器連接都創(chuàng)建一個新的進(jìn)程,而是通過與GoAhead服務(wù)器共享地址空間,于是可以直接訪問全部的請求上下文。GoForms處理器可以自動解析和訪問所有的POST和查詢數(shù)據(jù),它也提供了一組API可以輕松訪問CGI變量。

GoForms過程與ASP過程不同,它主要用來響應(yīng)用戶輸入以更新系統(tǒng)設(shè)置或者執(zhí)行特定的動作。在GoAhead中,GoForms實現(xiàn)為一個URL處理器,它會解釋以"/goform"開始的URLs。緊跟著"goform"之后的字符串定義了表單名字和用戶請求的細(xì)節(jié)。例如:“/goform/ UpdateConfig?interval=5”這個請求表示調(diào)用GoForms過程" UpdateConfig "GoForms變量interval表示用戶設(shè)置的新刷新間隔時間。GoAheadASP過程和GoForms過程的處理十分類似,只是GoForms過程通過websFormDefine函數(shù)調(diào)用進(jìn)行關(guān)聯(lián),并且必須遵守原型“void GoFormsProcName(webs_t wp, char_t *path, char_t *query);”。完整的GoForms過程示例請參考列表1-3中的用來處理用戶請求的UpdateConfig過程。

3.3 ROM化網(wǎng)頁

對于具有文件系統(tǒng)的嵌入式操作系統(tǒng)來說,可以將web應(yīng)用中用到的各種資源,例如html文件、圖片、css文件以及exe文件直接以文件的形式保存起來。除此以外還存在大量的不具備文件系統(tǒng)的嵌入式操作系統(tǒng),此時可以利用GoAheadROM化功能將所有資源集成到可執(zhí)行文件中。首先在E:\GoAhead目錄下創(chuàng)建一個files.txt文件,將web應(yīng)用中使用到的所有資源及其路徑都保存在這個文件中,如清單4所示:

//清單4files.txt文件

E:\GoAhead\home.asp

E:\GoAhead\graphics\topbar.gif

E:\GoAhead\style\base.css

然后構(gòu)建webcomp工程生成webcomp.exe。在命令行中輸入命令“webcomp E:\GoAhead files.txt >webrom.c”,此命令的目的是依次將files.txt中的每個資源文件都轉(zhuǎn)換為一個unsigned char數(shù)組,并將這些數(shù)組添加到自動生成的webrom.c源文件中。最后,只需在webs工程中定義宏WEBS_PAGE_ROM以使能ROM化網(wǎng)頁功能,同時使用生成的webrom.c替換webs工程中的原始webrom.c,重新構(gòu)建webs工程,這樣在生成的webs.exe中就包含了運(yùn)行web應(yīng)用所需的全部資源,大大簡化了部署過程。

3.4 測試web應(yīng)用程序

運(yùn)行webs.exe啟動GoAhead web服務(wù)器,打開瀏覽器在地址欄輸入http://localhost。默認(rèn)情況下會自動打開home.asp頁面,如圖1所示。

clip_image001

1 GoAhead服務(wù)器測試頁面

4 結(jié)語

GoAhead已經(jīng)被成功的移植到HP-UX, Windows CE, pSOS, QNX, IRIX, uCOS, eCOS, chorus RTEMS等眾多操作系統(tǒng)中。本文之所以使用Windows平臺上GoAhead移植為例進(jìn)行說明,一方面每個讀者都可以運(yùn)行附帶的源代碼親自進(jìn)行試驗以加深印象,另一方面也可以省略復(fù)雜的平臺介紹,從而重點掌握GoAhead本身的功能與特點。

筆者在利用GoAhead構(gòu)建遠(yuǎn)程監(jiān)控等嵌入式web應(yīng)用的過程中,發(fā)現(xiàn)有必要對GoAhead特有的一些編程技巧加以說明以少走彎路。GoAhead定義了宏T(x),可以根據(jù)是否定義了宏UNICODE使字符串在UnicodeANSI之間自由切換。當(dāng)使用websWrite函數(shù)輸出HTML語句時,請使用<br />而不是\n輸出換行符。GoAhead中的一些選項,例如默認(rèn)頁、端口號和重試次數(shù)等,都可以進(jìn)行配置以適應(yīng)自己的應(yīng)用程序。另外如果希望為用戶提供更加豐富的用戶體驗,可以考慮使用Java Applet技術(shù)。

5 參考文獻(xiàn)

1. Anthony J. Massa. Integrating GoAhead WebServer & eCos: Web-based remote management for small systems, http://www.ddj.com/mobile/184405201.

2. GoAhead Overview. http://www.goahead.com/products/webserver/default.aspx

3. Functionality Overview of an Open Source Embedded Web Server. http://data.goahead.com/webserver/WebServer2.1wp5-00.doc

 

posted on 2009-07-13 10:41 肥仔 閱讀(3238) 評論(3)  編輯 收藏 引用 所屬分類: Web-后臺

評論

# re: 利用GoAhead構(gòu)建嵌入式web應(yīng)用  回復(fù)  更多評論   

好好好好好
2014-07-21 21:41 | 11111111

# re: 利用GoAhead構(gòu)建嵌入式web應(yīng)用  回復(fù)  更多評論   

收錄卻不附上鏈接地址,有點過了,學(xué)這行基本的版權(quán)意識都沒有
2015-04-07 20:25 | fsa
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产成人91精品| 亚洲精品一区二区三区福利| 久久aⅴ国产欧美74aaa| 亚洲大片精品永久免费| 欧美呦呦网站| 国产精品视频成人| 亚洲自拍偷拍麻豆| 欧美一区二区啪啪| 国产日韩欧美精品一区| 亚久久调教视频| 欧美在线日韩在线| 亚洲国产清纯| 久久久久久有精品国产| 欧美精品网站| 亚洲国产精品久久久久婷婷884 | 欧美国产第二页| 国产精品久久久久久久久久久久久久| 欧美日韩一区二区视频在线观看 | 欧美国产精品劲爆| 亚洲综合视频在线| 欧美第一黄色网| 久久精品一区二区| 久久精品在线视频| 99精品欧美一区二区三区综合在线| 亚洲国产精品一区二区www| 欧美色欧美亚洲另类七区| 久久综合亚州| 亚洲精品在线视频| 欧美国产精品中文字幕| 亚洲一区二区免费视频| 久久亚洲精品视频| 欧美一区二区三区免费观看视频 | 亚洲国产欧美一区二区三区同亚洲| 欧美精品综合| 欧美成人国产一区二区| 国外成人性视频| 亚洲字幕一区二区| 亚洲一区二区黄色| 国产精品久久久久久福利一牛影视| 久久视频在线视频| 国产欧美精品| 亚洲综合二区| 久久精品亚洲热| 国产伦精品一区二区三区视频孕妇 | 欧美看片网站| 亚洲欧洲日本mm| 99精品欧美一区二区三区| 亚洲国产精品一区二区第四页av | 亚洲九九精品| 亚洲午夜羞羞片| 亚洲国产成人av在线| 欧美日韩第一区日日骚| 久久精品国产久精国产爱| 亚洲欧洲一区二区天堂久久| 欧美一区在线直播| 亚洲精品视频啊美女在线直播| 久久久xxx| 亚洲欧美一级二级三级| 亚洲图片欧美午夜| 在线亚洲精品| 亚洲精品美女| 亚洲第一区在线| 久久精品日产第一区二区三区| 亚洲黑丝在线| 娇妻被交换粗又大又硬视频欧美| 另类尿喷潮videofree| 亚洲午夜激情| 亚洲精品日韩在线| 亚洲第一中文字幕| 久久久7777| 欧美.www| 免费影视亚洲| 欧美日韩在线播| 亚洲国产精品第一区二区三区| 一区二区欧美日韩| 亚洲欧洲免费视频| 国产视频在线观看一区| 国产精品免费一区二区三区观看| 女女同性精品视频| 免费不卡在线视频| 久久久在线视频| 亚洲专区欧美专区| 欧美在线播放| 欧美激情久久久久| 欧美风情在线| 亚洲一级免费视频| 久久久久国色av免费观看性色| 亚洲欧美日韩精品| 欧美电影在线播放| 欧美精品在线观看播放| 国产日韩欧美一二三区| 亚洲激情影视| 欧美成人激情在线| 欧美日韩国产二区| 欧美日韩在线免费| 国产亚洲人成网站在线观看| 欧美日产一区二区三区在线观看| 国产午夜久久| 欧美顶级少妇做爰| 欧美视频在线观看视频极品| 亚洲一区二区伦理| 亚洲砖区区免费| 久久久国产精品一区| 欧美日韩视频专区在线播放| 亚洲高清视频的网址| 亚洲国产欧美精品| 亚洲视频二区| 中文日韩电影网站| 香蕉久久夜色精品国产使用方法| 麻豆精品网站| 一区二区三区久久网| 欧美日本韩国在线| 日韩亚洲一区二区| 亚洲第一福利视频| 亚洲国产精品高清久久久| 亚洲精品一线二线三线无人区| 久久综合婷婷| 99亚洲一区二区| 99精品国产热久久91蜜凸| 欧美成人一区在线| 国产精品久久久久久久久免费桃花 | 99视频精品全国免费| 在线日韩欧美视频| 亚洲欧洲中文日韩久久av乱码| 狠狠狠色丁香婷婷综合久久五月| 亚洲高清二区| 免费精品99久久国产综合精品| 久久综合婷婷| 亚洲精品日本| 亚洲精品黄网在线观看| 老司机午夜精品视频| 欧美jizzhd精品欧美喷水 | 亚洲欧美久久久| 欧美另类变人与禽xxxxx| 亚洲人成在线播放| 亚洲国产精品ⅴa在线观看 | 亚洲男人av电影| 欧美不卡激情三级在线观看| 国模大胆一区二区三区| 亚洲久久在线| 久久久国产精品一区二区三区| 国产欧美日韩精品a在线观看| 性欧美暴力猛交69hd| 免费视频一区| 在线亚洲免费视频| 国产精品国产a级| 老司机一区二区| 国产精品久久91| 欧美一区二区视频网站| 亚洲人体影院| 久久夜色精品国产欧美乱极品| 日韩视频一区二区三区在线播放免费观看 | 欧美大片国产精品| 久久综合久色欧美综合狠狠| 在线观看欧美| 激情久久综合| 农村妇女精品| 国产精品豆花视频| 久久久高清一区二区三区| 亚洲欧美成aⅴ人在线观看| 国产精品一区二区在线观看不卡| 亚洲欧美日韩系列| 欧美好骚综合网| 久久精品国产2020观看福利| 亚洲午夜伦理| 99在线精品视频| 亚洲国产日韩欧美在线动漫| 国产日韩精品在线观看| 欧美三级乱码| 欧美精品18+| 蜜桃av综合| 久久综合导航| 欧美在线播放视频| 亚洲欧美春色| 亚洲免费视频网站| 亚洲精选久久| 日韩一级精品| 一卡二卡3卡四卡高清精品视频| 久久一区二区三区av| 欧美一区2区视频在线观看| 这里只有精品丝袜| 亚洲小视频在线| 午夜精彩视频在线观看不卡| 亚洲一二区在线| 午夜精品一区二区三区四区| 亚洲一区二区视频在线| 一区二区日韩| 亚洲综合视频1区| 亚洲图片欧洲图片日韩av| 亚洲一区二区av电影| 亚洲色无码播放| 亚洲网站视频福利| 一本综合精品| 亚洲视频一区在线观看| 日韩亚洲不卡在线| 亚洲一区二区三| 欧美一区二视频在线免费观看| 香蕉久久久久久久av网站| 欧美一区二区在线免费观看| 性欧美videos另类喷潮|