嵌入式WEB伺服器BOA的移植方法(三)

來源:互聯網
上載者:User
  嵌入式WEB伺服器BOA的移植方法(三)

作者:李駒光、鄭耿

本文摘自作者《嵌入式Linux系統開發詳解-基於EP93XX系列ARM》一書的相關章節。

     目前Web技術中產生動態Web頁面的方法有CGI和伺服器指令碼,如JSP, ASP等,但後者需要Web伺服器具有這些指令碼的運行支援模組。在嵌入式Web伺服器中,考慮到資源限制問題,一般都只提供CGI支援,因此在嵌入式裝置 中Web方式應用實際上就是基於CGI的程式開發。    CGI(Common Gate Intergace)是一段運行在Web伺服器上的程式,提供同用戶端Html頁面的介面。我們看一個實際例子:常見的個人首頁上大都有一個留言本,留言 本的工作方式是這樣的:先由使用者輸入一些資訊,如名字之類的東西,接著使用者按一下“留言”(到目前為止工作都在用戶端),瀏覽器就把這些資訊傳送到伺服器 的CGI程式中,於是CGI程式在伺服器上按照預定的方法進行處理,在本例中就是把使用者提交的資訊存入指定的檔案中,最後CGI程式給用戶端發回一個“留 言結束”字樣的頁面,使用者可以在瀏覽器裡看到。
    在進行CGI編程之前,我們先瞭解HTML的一些知識。

    CGI 可以使用多種程式設計語言來實現,包括C、 C++、Perl等,但在嵌入式裝置的開發中,一般都不會採用Perl等解釋性語言,因為這種語言還需要有解釋執行的支撐模組,會佔用存貯空間和記憶體,最 常用的方法當然是用C來編寫,但C並不是很適合開發象CGI這種需要大量進行字串操作的程式,編程比較煩瑣,因此,對於一個專業的開發人員來說,首先想 到的應該是有沒有可複用的庫來支援快速高效的開發CGI程式。幸運的是目前就有不少開放源碼的支援CGI開發的 C庫。我們在此只介紹CGIC,有興趣的朋友可以自己在Internet上搜尋其他的C庫。

    CGIC庫的移植

    CGIC是一個支援CGI開發的開放源碼的標準C庫,可以免費使用,只需要在開發的網站和程式文檔中有個公開聲明即可,表明程式使用了CGIC庫,使用者也可以購買商業授權而無需公開聲明。
    CGIC能夠提供以下功能:

    1  分析資料,並自動校正一些有缺陷的瀏覽器發來的資料;

    2  透明接收用GET或 POST方法發來的From資料;

    3   能接受上傳檔案;

    4   能夠設定和接收cookies;

    5   用一致的方式處理From元素裡的斷行符號;

    6   提供字串,整數,浮點數,單選或多選功能來接收資料;

    7   提供數字欄位的邊界檢查;

    8   能夠將CGI環境變數轉化成C中的非Null 字元串;

    9   提供CGI程式的調試手段,能夠回放CGI程式執行時的CGI狀態;

     總之,CGIC是一個功能比較強大的支援CGI開發的標準C庫,並支援Linux, Unix 和Windows等多作業系統。
     以下描述CGIC的移植過程。

    從CGIC的主要站台http://www.boutell.com/cgic/下載源碼,當前最新版本是2.05版。將其解壓並進入源碼目錄

    # tar xzf cgic205.tar.gz

    # cd cgic205

     修改Makefile檔案,找到CC=gcc,將其改成CC=arm-linux-gcc,找到AR=ar,將其改成AR=arm-linux-ar,找 到RANLIB=ranlib,將其改成RANLIB=arm-linux-ranlib。找到gcc cgictest.o -o cgictest.cgi ${LIBS},將其改成$(CC) $(CFLAGS) cgictest.o -o cgictest.cgi ${LIBS},找到gcc capture.o -o capture ${LIBS},將其改成$(CC) $(CFLAGS) capture.o -o capture ${LIBS},並儲存退出。

    然後運行make進行編譯,得到的CGIC庫libcgic.a,我們通過調試輔助程式capture和測試程式cgictest.cgi,來驗證產生CGIC庫的正確性。

    將capture和cgictest.cgi拷貝到主機的/nfs/www/cgi-bin目錄下。

     在工作站的瀏覽器地址欄輸入http://192.168.67.16/cgi-bin/cgictest.cgi,可以看到頁面,表示CGIC庫和測試 指令碼都移植成功。cgictest.cgi比較完整的展現了CGIC庫的功能,在開發基於CGIC庫的CGI程式前最好先掌握cgictest.cgi程 序,也是使用者開發特定應用程式時的參考範例。

  HTML模板的製作

Web方式的應用開發一般都會將介面和程式邏輯脫離開 來,允許在一定程度下更改介面,如改變介面文本的屬性,建立多語言版本等,而無需改動程式邏輯。介面一般由美工來進行製作,而程式員負責具體功能的實現。 在 HTML中,表單 (FORM)是最主要的傳遞資訊的手段,它適用於任何瀏覽器。表單中有很多元素,包括輸入文字框,單選框,多選框,按鈕,等等,可以提供資訊的互動。具體 對象說明和文法請參見其他HTML書籍,在這裡不作介紹。根據應用需求,美工或其他設計人員將最後的Web頁面設計出來,作為程式員進行開發的模板。

    CGI 程式的工作一般就是接收表單資料,進行資料處理,最後根據處理結果產生新的頁面返回給瀏覽器。表單資料一般是以POST方法提交給伺服器,由CGI程式獲 得,程式必須要將介面資料和內部資料對應起來才能夠進行下一步的處理。CGI程式從頁面擷取資料就根據元素名字/值中的元素名字來進行區分。但CGI返回 頁面就比較麻煩。由於介面在程式開發完成後還有可能會改變,而且有些需要程式處理的地方可能沒有表單元素,因此對程式來說,不能以表單元素名作為區分的基 礎,一般方法是採用HTML中的注釋<!-xxx-->來標記。    程式 員需要在模板中為每一個表單元素以及其他任何需要程式處理的地方,按照一定規則,如注釋的下一行就是表單元素行,建立其注釋標記。CGI程式就可以根據注 釋標記來判斷表單元素資訊並進行處理。程式逐行讀模數板檔案,檢查有無注釋標記,如有的話,則下一行需要進行處理,給表單元素賦上資料,最後就可以返回帶 資料的頁面給瀏覽器。

    HTML模板還需要關注的是輸入的檢查。根據輸入檢查越早越好的原則,需要在使用者介面上就對使用者提交 的資料進行檢查。目前一般是採用javascript指令碼的方式。當使用者提交資料時,表單對象的onSubmit方法就會被調用,在該方法裡就可以對使用者 的輸入進行檢查。常用的檢查有是否必需、最大/小長度、是否字元、是否數字、email地址、IP地址是否正確、是否匹配一個Regex等。

CGI程式的開發
    CGI 程式的工作一般就是接收表單資料,根據應用需求進行資料處理,最後根據處理結果產生新的頁面返回給瀏覽器。表單資料一般是以POST方法提交給伺服器,由 CGI程式獲得,程式根據元素名字/值中的元素名字來區分資料,完成資料處理後,再讀取相應的模板檔案,根據注釋標記將對應的資料填充到HTML文本中 去,產生最後的頁面返回給瀏覽器。

    程式一般邏輯為:

    1.  安全性檢查,是否允許運行指令碼;

    2.  處理使用者提交的資料,根據元素名字/值中的元素名字來區分資料,然後根據應用需求進行資料處理;

    3.  將處理結果填充表單,根據注釋標記將對應的資料填充到HTML文本中去,產生最後的頁面返回給瀏覽器。

    關於具體的代碼實現細節,使用者可以參考《嵌入式Linux系統開發詳解-基於EP93XX系列ARM》一書的相關章節。(全文完)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.