mooc课程精选,成品人片观看入口众乐乐,久久久久人妻一区精品性色av,苍兰诀大结局是什么,白丝美女被狂躁免费视频网站

當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > BOA服務(wù)器與CGI

BOA服務(wù)器與CGI 時(shí)間:2018-09-28      來源:未知

在嵌入式設(shè)備的管理與交互中,基于Web方式的應(yīng)用成為目前的主流,這種程序結(jié)構(gòu)也就是大家非常熟悉的B/S結(jié)構(gòu),即在嵌入式設(shè)備上運(yùn)行一個(gè)支持腳本或CGI功能的Web服務(wù)器,能夠生成動(dòng)態(tài)頁面,在用戶端只需要通過Web瀏覽器就可以對(duì)嵌入式設(shè)備進(jìn)行管理和監(jiān)控,非常方便實(shí)用。本文主要介紹BOA服務(wù)器和CGI的工作原理。

一、BOA服務(wù)器

1.嵌入式WEB服務(wù)器常見的有l(wèi)ighttpd、shttpd、thttpd、boa、mathopd、minihttpd、appweb、goahead等,本文主要介紹BOA服務(wù)器。

它是一個(gè)非常小巧的服務(wù)器,執(zhí)行代碼大約60KB左右,是一個(gè)運(yùn)行于unix或linux下的,支持CGI的、適合于嵌入式系統(tǒng)的單任務(wù)的http服務(wù)器,源代碼開放、性能高。由于它是一個(gè)單任務(wù)的web服務(wù)器,只能一次完成用戶的請(qǐng)求,而不會(huì)fork出新的進(jìn)程來處理并發(fā)的鏈接請(qǐng)求。但是BOA支持CGI,能夠?yàn)镃GI程序fork出一個(gè)進(jìn)程來執(zhí)行相應(yīng)的客戶請(qǐng)求。它的主要功能是在互聯(lián)嵌入式設(shè)備之間進(jìn)行信息交互,達(dá)到通過網(wǎng)絡(luò)對(duì)嵌入式設(shè)備進(jìn)行監(jiān)控,并將反饋信息自動(dòng)上傳給主控設(shè)備的目的。它是基于HTTP超文本傳輸協(xié)議的,Web網(wǎng)頁是Web服務(wù)基本的傳輸單元。嵌入式Web服務(wù)的工作基于客戶機(jī)/服務(wù)器計(jì)算模型,由Web瀏覽器(客戶機(jī))和Web服務(wù)器(服務(wù)器)構(gòu)成,也即著名的B/S結(jié)構(gòu)。運(yùn)行于客戶端的瀏覽器首先要與嵌入式Web服務(wù)器BOA端建立連接,打開一個(gè)套接字虛擬文件,此文件建立標(biāo)志著SOCKET連接建立成功然后客戶端瀏覽器通過套接字SOCKET以GET或者POST參數(shù)傳遞方式向Web服務(wù)器提交請(qǐng)求,Web瀏覽器提交請(qǐng)求后,通過HTTP協(xié)議傳送給Web服務(wù)器。Web服務(wù)器接到請(qǐng)求后,根據(jù)請(qǐng)求的不同進(jìn)行事務(wù)處理,返回HTML文件或者通過CGI調(diào)用外部應(yīng)用程序,返回處理結(jié)果。服務(wù)器通過CGI與外部應(yīng)用程序和腳本之間進(jìn)行交互,根據(jù)客戶端瀏覽器在請(qǐng)求時(shí)所采用的方法,服務(wù)器會(huì)搜集客戶所提供的信息,并將該部分信息發(fā)送給指定的CGI擴(kuò)展程序,CGI擴(kuò)展程序進(jìn)行信息處理并將結(jié)果返回給服務(wù)器,然后服務(wù)器對(duì)信息進(jìn)行分析,并將結(jié)果發(fā)送回客戶端在瀏覽器上顯示出來。

2.服務(wù)器客戶端之間的通信,是客戶端的瀏覽器和服務(wù)器端的http服務(wù)器之間的HTTP通信,我們只需要知道瀏覽器請(qǐng)求執(zhí)行服務(wù)器上哪個(gè)CGI程序就可以了,其他不必深究細(xì)節(jié),以為這些過程不需要程序員去操作。服務(wù)器和CGI程序之間的通信才是我們關(guān)注的。

一般情況下,服務(wù)器和CGI程序之間是通過標(biāo)準(zhǔn)輸入輸出來進(jìn)行傳遞的,而這個(gè)過程需要環(huán)境變量的協(xié)作方可實(shí)現(xiàn)。

(1)服務(wù)器將URL指向一個(gè)應(yīng)用程序

(2)服務(wù)器為應(yīng)用程序執(zhí)行做準(zhǔn)備

(3)應(yīng)用程序執(zhí)行,讀取標(biāo)準(zhǔn)輸入輸出和有關(guān)環(huán)境變量

(4)應(yīng)用程序進(jìn)行標(biāo)準(zhǔn)輸出

注:對(duì)于Windows系統(tǒng)而言,還可以通過profile文件進(jìn)行數(shù)據(jù)傳輸

更通俗點(diǎn)講,網(wǎng)頁里面有個(gè)變量(環(huán)境變量),變量里面有個(gè)值, 通過某種方式把這個(gè)值傳到 cgi 程序中, cgi 程序中提取這個(gè)變量的值,根據(jù)這個(gè)值做出相應(yīng)的處理;那么這個(gè)變量是怎么在從網(wǎng)頁傳到 cgi 程序的呢?

3.在HTML中,當(dāng)客戶填寫了表單,并按下了發(fā)送(submit)按鈕后,表單的內(nèi)容被發(fā)送到了服務(wù)器端,一般的,這時(shí)就需要有一個(gè)服務(wù)器端腳本來對(duì)表單的內(nèi)容進(jìn)行一些處理,或者是把它們保存起來,或者是按內(nèi)容進(jìn)行一些查詢,或者是一些別的什么。沒有了 CGI,WEB 的世界就完全失去了它的交互性,所有的信息都變成單向的了,而不能夠有任何的反饋。這里就要說到表單了:

表單是html中

這個(gè)標(biāo)簽的翻譯,在網(wǎng)頁中主要負(fù)責(zé)數(shù)據(jù)采集功能。

 

一個(gè)表單有三個(gè)基本組成部分:表單標(biāo)簽:這里面包含了處理表單數(shù)據(jù)所用CGI程序的URL以及數(shù)據(jù)提交到服務(wù)器的方法。 表單域:包含了文本框、密碼框、隱藏域、多行文本框、復(fù)選框、單選框、下拉選擇框和文件上傳框等。 表單按鈕:包括提交按鈕、復(fù)位按鈕和一般按鈕;用于將數(shù)據(jù)傳送到服務(wù)器上的CGI腳本或者取消輸入,還可以用表單按鈕來控制其他定義了處理腳本的處理工作。這些東西只要打開 dreamweaver 隨便建個(gè) html 就可以看到它的表單元素; 當(dāng)你打開一個(gè)網(wǎng)頁的時(shí)候,你輸入的文字或者做出的選擇,類似等等要提交信息的地方基本上都是屬于表單元素; 這些表單元素(表單項(xiàng))都必須放在表單內(nèi), 而整個(gè)表單在網(wǎng)頁是看不到的,你可以理解它為一個(gè)容器,里面裝著你要發(fā)給服務(wù)器的東西。

由于 HTML 只能顯示靜態(tài)網(wǎng)頁,無法和服務(wù)器活動(dòng)數(shù)據(jù)進(jìn)行交互,所以要通過表單與服務(wù)器互動(dòng); 就跟你去銀行辦業(yè)務(wù),人家要你在表上填一堆東西,然后把表提交給業(yè)務(wù)員,那個(gè)表就是表單, 網(wǎng)站表單類似這種包含了許多用戶填寫的信息,提交給服務(wù)器,服務(wù)器獲取填寫的信息后執(zhí)行相應(yīng)操作。

圖為html文件中的一個(gè)代碼段,這就是表單的提交過程

這里的“submit”即為表單內(nèi)容,里面的數(shù)據(jù)會(huì)被提交到指定 URL(這個(gè) url 可以是服務(wù)器上的一個(gè) cgi程序,此處即為login.cgi)。

URL:統(tǒng)一資源定位符(Uniform Resource Locator,URL)是對(duì)可以從互聯(lián)網(wǎng)上得到的資源的位置和訪問方法的一種簡(jiǎn)潔的表示,是互聯(lián)網(wǎng)上標(biāo)準(zhǔn)資源的地址;ヂ(lián)網(wǎng)上的每個(gè)文件都有一個(gè)唯一的URL,它包含的信息指出文件的位置以及瀏覽器應(yīng)該怎么處理它。

4.在此處也簡(jiǎn)單的提一下網(wǎng)頁

網(wǎng)頁是一個(gè)純文本文件,是向?yàn)g覽者傳遞信息的載體,以超文本和超媒體為技術(shù),采用HTML、CSS、XML等語言來描述組成頁面的各種元素,包括文字、圖像、音樂等,并通過客戶端瀏覽器進(jìn)行解析,從而向?yàn)g覽器呈現(xiàn)網(wǎng)頁的各種內(nèi)容。做好的網(wǎng)頁放在BOA服務(wù)器的WWW文件里,客戶端瀏覽器對(duì)哪個(gè)網(wǎng)頁有請(qǐng)求服務(wù)器就把哪個(gè)頁面發(fā)送給瀏覽器。

二、CGI

CGI即通用網(wǎng)關(guān)接口(Common Gateway Interface),是一個(gè) Web 服務(wù)器主機(jī)提供信息服務(wù)的標(biāo)準(zhǔn)接口。通過CGI 接口,Web 服務(wù)器就能夠獲取客戶端提交的信息,轉(zhuǎn)交給服務(wù)端的CGI 程序進(jìn)行處理,后返回結(jié)果給客戶端。組成 CGI 通信系統(tǒng)的是兩部分:一部分是 html 頁面,就是在用戶端瀏覽器上顯示的頁面。另一部分則是運(yùn)行在服務(wù)器上的 Cgi 程序。它們之間的通訊方式如下圖:

客戶端(網(wǎng)頁)發(fā)送表單信息給服務(wù)器,服務(wù)器去調(diào)用CGI,CGI通過服務(wù)器將反饋信息發(fā)給客戶端,客戶端瀏覽器對(duì)信息進(jìn)行解析并顯示。

CGI程序被用來解釋處理來自表單的輸入信息,并在服務(wù)器產(chǎn)生相應(yīng)的處理,或?qū)⑾鄳?yīng)的信息反饋給瀏覽器。CGI使網(wǎng)頁不再是靜態(tài)的,而是具有交互功能。到時(shí)做好的 cgi 程序放在服務(wù)器 www/cgi-bin 里面,cgi 程序不能跳出 www文件夾取其他文件夾的資源。

對(duì)于 CGI 程序來說,它繼承了系統(tǒng)的環(huán)境變量。CGI 環(huán)境變量在 CGI 程序啟動(dòng)時(shí)初始化,在結(jié)束時(shí)銷毀。當(dāng)一個(gè) CGI 程序不是被 web服務(wù)器調(diào)用時(shí),它的環(huán)境變量幾乎是系統(tǒng)環(huán)境變量的復(fù)制。當(dāng)這個(gè) CGI 程序被 web服務(wù)器調(diào)用時(shí),它的環(huán)境變量就會(huì)多了以下關(guān)于 web服務(wù)器、客戶端、CGI 傳輸過程等項(xiàng)目。

有了表單,知道表單項(xiàng)中有個(gè)按鈕點(diǎn)一下就可以提交表單了, 那么這個(gè)表單是怎么提交到服務(wù)器上面的?

上面那個(gè)代碼段中 method 中的 get 和 post 就是提交表單的兩種方式;

GET: 對(duì)于那些使用了屬性“METHOD=GET”的表單(或者沒有 METHOD 屬性,這時(shí)候 GET 是其缺省值),CGI 定義為:當(dāng)表單被發(fā)送到服務(wù)器斷后,表單中的數(shù)據(jù)被保存在服務(wù)器上一個(gè)叫做 QUERY_STRING 的環(huán)境變量中。這種表單的處理相對(duì)簡(jiǎn)單,只要讀取環(huán)境變量就可以了。

POST:對(duì)于 POST 類型的表單,其內(nèi)容被送到 CGI 程序的標(biāo)準(zhǔn)輸入(在 C 語言中是stdin),而被傳送的長(zhǎng)度被放在環(huán)境變量 CONTENT_LENGTH 中。因而我們要做的就是,在標(biāo)準(zhǔn)輸入中讀入 CONTENT_LENGTH 長(zhǎng)度的字符串。從標(biāo)準(zhǔn)輸入讀入數(shù)據(jù)聽起來似乎要比從環(huán)境變量中讀數(shù)據(jù)來的要容易一些,其實(shí)則不然,有一些細(xì)節(jié)地方要注意,這在下面的程序中可以看到。特別要注意的一點(diǎn)就是:CGI 程序和一般的程序有所不同,一般的程序在讀完了一個(gè)文件流的內(nèi)容之后,會(huì)得到一個(gè)EOF標(biāo)志。但在 CGI 程序的表單處理過程中,EOF 是永遠(yuǎn)不會(huì)出現(xiàn)的,所以千萬不要讀多于 CONTENT_LENGTH 長(zhǎng)度的字符,否這會(huì)有什么后果,誰也不知道。

兩種表單提交方式之間的區(qū)別:

以GET方式接收的數(shù)據(jù)是有長(zhǎng)度限制,而用POST 方式接收的數(shù)據(jù)是沒有長(zhǎng)度限制的。并且,以GET方式發(fā)送數(shù)據(jù),可以通過URL的形式來發(fā)送,但POST方式發(fā)送數(shù)據(jù)必須要通過Form才到發(fā)送。

上一篇:JavaScript數(shù)組中的indexOf方法詳解

下一篇:Anddroid App和Java Web服務(wù)器間數(shù)據(jù)交互 之MySQL搭建

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5,京公海網(wǎng)安備11010802025203號(hào)

回到頂部