版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、BOA服務(wù)器搭建與簡單運(yùn)用一、 確定任務(wù)1、掌握boa服務(wù)器的工作原理和應(yīng)用;2、熟悉基本網(wǎng)頁編程。3、熟悉CGI編程。二、 學(xué)習(xí)內(nèi)容 網(wǎng)頁實(shí)現(xiàn)獲取zigbee節(jié)點(diǎn)數(shù)據(jù),并且不斷更新。三、 原理知識1、Boa服務(wù)器原理:(1)服務(wù)器軟件(BOA)始終在HTTP 端口守候客戶端的連接請求,當(dāng)客戶端向服務(wù)器發(fā)起一個連接請求后,客戶端和服務(wù)器之間經(jīng)過“三步握手”建立起連接。(2)在接收到客戶端的HTTP 請求消息后,服務(wù)器對消息進(jìn)行解析,包括:讀取請求URL、映射到對應(yīng)的物理文件、區(qū)分客戶端請求的資源是靜態(tài)頁面還是CGI 應(yīng)用程序等。(3)如果客戶請求的是靜態(tài)文件,那么服務(wù)器讀取相應(yīng)的磁盤文件,并將
2、其作為HTTP 響應(yīng)消息中的實(shí)體返回給客戶端,如果客戶端請求的是CGI 應(yīng)用程序,那么服務(wù)器將創(chuàng)建相應(yīng)的CGI 應(yīng)用程序進(jìn)程,并將各種所需信息(客戶端請求信息、服務(wù)器端相關(guān)信息等)按CGI 規(guī)范傳遞給CGI 應(yīng)用程序進(jìn)程,此后由CGI 應(yīng)用程序接管控制。2、 CGI 應(yīng)用程序的工作原理(1)CGI 應(yīng)用程序讀取從Web 服務(wù)器傳遞來的各種信息,并對客戶端的請求進(jìn)行解釋和處理,如:使用SQL 語句來檢索或者更新數(shù)據(jù)庫。(2)CGI 應(yīng)用程序?qū)⑻幚斫Y(jié)果按照CGI 規(guī)范返回給Web 服務(wù)器,Web 服務(wù)器會對CGI 應(yīng)用程序的處理結(jié)果進(jìn)行解析,并在此基礎(chǔ)上生成HTTP 響應(yīng)信息返回給客戶端。3、嵌入
3、式Web服務(wù)器軟件構(gòu)成與工作原理圖三、操作步驟移植boa服務(wù)器::開發(fā)平臺:主機(jī):VMWare-Ubuntu 10.04 LTS 開發(fā)板: 編譯器: 所需軟件:下載:b1、移植步驟BOA 服務(wù)程序編譯1、設(shè)置好交叉編譯工具鏈路徑:export PATH=/usr2、解壓下載好的BOA 壓縮包tar zxvf3、進(jìn)入解壓后的目錄cd4、進(jìn)入BOA 源碼包的src 目錄(下面操作均在該目錄下進(jìn)行)cd src5、利用configure 工具配置生成Makefile 文件./configure6、修改生成的Makefile 文件(設(shè)置交叉編譯器)將CC = gccCPP = gcc E修改為:CC=
4、arm-linux-gccCPP=arm-linux-gcc E7、修改defines.h 文件將#define SERVER_ROOT “/etc/boa”修改為#define SERVER_ROOT “/gec/web”該處定義的是WEB 服務(wù)器的文件根目錄,跟boa.conf 文件中的DocumentRoot 一致即可。8、修改compat.h 文件將#define TIMEZONE_OFFSET(foo) foo#->tm_gmtoff修改成#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff防止在make 時出現(xiàn)如下錯誤提示:util
5、.c:100:1: pasting "t" and "->" does not give a valid preprocessing token9、修改boa.c 文件注釋掉下面兩句話:#if 0if (passwdbuf = NULL) DIE(”getpwuid”);if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) = -1) DIE(”initgroups”);#endif否則會出現(xiàn)錯誤: getpwuid: No such file or directory注釋掉下面語句
6、:#if 0if (setuid(0) != -1) DIE(”icky Linux kernel bug!”);#endif否則會出現(xiàn)錯誤: - icky Linux kernel bug!: No such file or directory10、編譯boamake至此,在src 目錄中將得到交叉編譯后的boa 程序,可以使用以下方法縮小程序的體積arm-linux-strip boa /去掉相關(guān)調(diào)試信息,對交叉編譯生成的boa 程序瘦身。編譯錯誤(1):yacc -d boa_grammar.ymake: yacc:命令未找到make: * 解決辦法:#apt-get ins
7、tall bison,安裝完成后要再一次執(zhí)行 #./configure再執(zhí)行 #make編譯錯誤(2):: 在函數(shù)yyparse中:警告:隱式聲明函數(shù)yylexlex boa_lexer.lmake: lex:命令未找到make: * 錯誤127解決辦法:#apt-get install flex安裝完成,再#make就可以了2、 BOA 服務(wù)器運(yùn)行環(huán)境搭建在解壓后的boa 源碼目錄下有個boa.conf 文件,根據(jù)GEC210 根文件系統(tǒng)的設(shè)計(jì),對它進(jìn)行如下修改:(1)修改用戶與用戶組信息User 的修改:將User nobody 修改為User 0Group 的修改:將Grou
8、p nogroup 修改為Group 0在根文件系統(tǒng)中的/etc/passwd 文件中沒有nobody 用戶,所以設(shè)成0。在根文件系統(tǒng)中的/etc/group 文件中沒有nogroup 組,所以設(shè)成0。(2)相關(guān)日志文件存放位置項(xiàng),保留將保存日志文件,根據(jù)需要可以選擇是否注釋掉#ErrorLog /var/log/boa/error_log#AccessLog /var/log/boa/access_log(3)打開ServerName 的設(shè)置:將#ServerName前面的#號去掉,該項(xiàng)默認(rèn)為未打開,執(zhí)行Boa 會異常退出,提示“gethostbyname:No such file or d
9、irectory”,所以必須打開。(4)將DocumentRoot /var/www 修改為:DocumentRoot /gec/web,不然會提示錯誤GET / HTTP/1.1" ("/var/www/"): document open: No such file or directory(5)將DirectoryMaker /usr/lib/boa/boa_indexer 注釋掉。(6)將MimeTypes /etc/mime.types 修改為:MimeTypes /gec/web/mime.types(7)將DefaultType text/plain
10、修改為:DefaultType text/html。(8)將Alias /doc /usr/doc 注釋掉。(9)SccriptAlias 的設(shè)置:將ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/修改為:ScriptAlias /cgi-bin/ /gec/web/cgi-bin/至此,BOA 服務(wù)器配置已經(jīng)完成,接下來完善根文件系統(tǒng)即可在GEC210 上運(yùn)行。3、完善根文件系統(tǒng)1)、在開發(fā)板的根文件系統(tǒng)根目錄創(chuàng)建必要的BOA 服務(wù)器運(yùn)行目錄:在根文件系統(tǒng)的根目錄下創(chuàng)建/gec/web 目錄:cd /root/rootfsmkdir -p gec/web進(jìn)入到創(chuàng)
11、建好的web 目錄下,創(chuàng)建cgi-bin 目錄:mkdir cgi-bin2)、把交叉編譯生成的boa 程序和配置好的boa.conf 文件及主機(jī)下的/etc/mime.types 文件都復(fù)制到板上的/gec/web 目錄下,并在該目錄下創(chuàng)建一文件index.html,文件內(nèi)容可以參考如下:<html><head><title>BOA TEST</title></head><body><h1>BOA TEST</h1></body></html>3)、進(jìn)入到板上的/gec/w
12、eb 目錄下,執(zhí)行./boa,可以看到如下啟動信息:在主機(jī)上啟動瀏覽器,輸入U(xiǎn)RL 為,訪問板上的BOA 服務(wù),效果如下4)、測試完靜態(tài)頁面后,接下來測試CGI 腳本文件:在主機(jī)上創(chuàng)建一文件test.c,文件內(nèi)容如下:include <stdio.h> int main(void)printf("Contenttype:text/htmlnn");printf("<html>n");printf("<head><title>BOA CGI TEST</title></head&g
13、t;n");printf("<body>n");printf("<h1>BOA CGI TEST</h1>n");printf("</body>n");printf("</html>n"); return 0;編譯:arm-linux-gcc test.c o test.cgi然后用交叉編譯工具鏈編譯,將得到的test.cgi 文件復(fù)制到板上的/gec/web/cgi-bin 目錄下:在瀏覽器輸入,可以看到如下效果:4、boa服務(wù)器運(yùn)用經(jīng)過前面學(xué)
14、習(xí),大概知道boa的工作原理和流程,那現(xiàn)在我們繼續(xù)學(xué)習(xí)html和cgi傳參問題。CGI 程序通過兩種方式來獲取瀏覽器發(fā)送過來的表單數(shù)據(jù): QUERY_STRING 環(huán)境變量和標(biāo)準(zhǔn)輸入。兩種方式分別對應(yīng)于瀏覽器的“GET”和“POST”兩種提交表單的方式。當(dāng)瀏覽器使用 GET 方式來提交表單時, CGI 程序必須通過 QUERY_STRING 環(huán)境變量來獲取表單內(nèi)容。例如,按照本實(shí)驗(yàn)的實(shí)驗(yàn)要求,可以編寫一個如下的網(wǎng)頁:<HTML><HEAD><META http-equiv="content-type" content="text/ht
15、ml; charset=utf-8" /><TITLE> Gec BOA Test Page </TITLE></HEAD><BODY><FORM action="/cgi-bin/config.cgi" method="get">Username:<input type="text" name="username"><br />Password:<input type="password"
16、 name="password"><br /><input type="button" name="Submit" value="提交"></FORM></BODY></HTML>網(wǎng)頁中包含一個表單,該表單的 action 指向/cgi-bin/config.cgi,它是一個 CGI 程序。表單中包含兩個個文本框,分別名為“username”和“password”,還包含一個提交按鈕,名為“Submit”。假設(shè)我們在兩個文本框中分別輸入“gec”和“
17、123456”,當(dāng)點(diǎn)擊提交時, config.cgi 可以通過下面的代碼獲取到表單內(nèi)容:const char *query = getenv("QUERY_STRING"); / 獲取 GET 方式提交的表單內(nèi)容/ 這里,query 字符串應(yīng)該等于“username=gec&password=123456&Submit=提交”。其中,getenv()函數(shù)用來獲取環(huán)境變量。QUERY_STRING 環(huán)境變量中則包含了所有表單的內(nèi)容。當(dāng)瀏覽器使用 POST 方式提交表單時,CGI 程序必須通過標(biāo)準(zhǔn)輸入獲取表單內(nèi)容,同時,可以通過CONTENT_LENGTH 環(huán)境
18、變量來獲取到表單內(nèi)容的大小。例如,將上面的網(wǎng)頁中的 method=”get”修改為 method=”post”,那么 test.cgi 的程序需要變?yōu)椋篶onst char *slen = getenv("CONTENT_LENGTH"); / 獲取 POST 方式提交的表單內(nèi)容大小int len = atoi(slen); / 將字符串形式的長度轉(zhuǎn)換為整數(shù)char *query = (char *)malloc(len + 1); / 分配空間,用來保存表單內(nèi)容memset(query, 0, len + 1); / 將分配到的空間的內(nèi)容清空read(0, query, len); / 讀取表單內(nèi)容/ 這里,query 字符串應(yīng)該等于“username=gec&password=123456&Submit=提交”其中,read()函數(shù)用來讀取文件中的數(shù)據(jù),它包含三個參數(shù):第一個參數(shù)表示文件序號,0 即為標(biāo)準(zhǔn)輸入文件;第二個參數(shù)為保存讀取到的數(shù)據(jù)的緩沖區(qū);第三個參數(shù)為讀取的長度。 經(jīng)過上面的操作,我們可以獲得網(wǎng)頁上傳過來的表單內(nèi)容,于是,我們需要針對字符串操作,獲取我們需要的信息并且認(rèn)證。處理表單數(shù)據(jù)無論使用 GET 或 POST 兩種方式的哪一種,一旦表單內(nèi)容被 CGI 獲取到之后,即可開始進(jìn)一步的處
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年綜合商業(yè)體售樓處動態(tài)沙盤供應(yīng)協(xié)議版B版
- 2024年門店裝修工程承包合同樣本版B版
- 2024院內(nèi)醫(yī)療廢物焚燒處理設(shè)施改造合同3篇
- 2024年版藥材種子種苗銷售合同3篇
- 2022年運(yùn)城學(xué)院公共課《C語言》科目期末試卷A(有答案)
- 2025年度瓷磚生產(chǎn)節(jié)能減排合同2篇
- 2025年度彩板房租賃與安裝合同范本3篇
- 2024版居家育兒服務(wù)協(xié)議范本:育兒嫂條款一
- 河套學(xué)院《國際投資與信貸》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年度生態(tài)保護(hù)區(qū)拆遷補(bǔ)償及生態(tài)補(bǔ)償協(xié)議范本3篇
- 2024年鄂爾多斯市國資產(chǎn)投資控股集團(tuán)限公司招聘管理單位遴選500模擬題附帶答案詳解
- 杵針療法課件
- 船形烏頭提取工藝優(yōu)化
- 財(cái)務(wù)總監(jiān)個人述職報(bào)告
- 軟件企業(yè)戰(zhàn)略規(guī)劃
- 護(hù)理安全隱患及風(fēng)險(xiǎn)防范
- 居家養(yǎng)老護(hù)理人員培訓(xùn)方案
- 臨床成人失禁相關(guān)性皮炎的預(yù)防與護(hù)理團(tuán)體標(biāo)準(zhǔn)解讀
- 期末復(fù)習(xí)試題(試題)-2024-2025學(xué)年三年級上冊數(shù)學(xué)蘇教版
- 江蘇省無錫市2024年中考語文試卷【附答案】
- JGJT46-2024《建筑與市政工程施工現(xiàn)場臨時用電安全技術(shù)標(biāo)準(zhǔn)》知識培訓(xùn)
評論
0/150
提交評論