新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 一種實用的嵌入式Web服務器設計

        一種實用的嵌入式Web服務器設計

        作者: 時間:2012-05-08 來源:網絡 收藏

        對于EWS中動態頁面的生成則要經過動態數據解析以及解析數據的模板頁面回填這兩個過程。在通常的交互中,大量動態數據是通過表單的形式體現在html頁面之中的。而一般上送的表單數據(文件上傳除外)在GET和POST兩種方法下,除了在HTTP請求報文中小現位置的不同外(GET方法下位于請求行,POST方法下位于實體主體部分),其組織形式并無差別,如下所示:
        e_1-v 1&e 2=v 2…&e N=v N
        其中e_N代表表單數據中的元素名,v_N代表該元素的取值。
        因此,當連接管理模塊從請求報文中提取出表單數據后,即可對這兩種方法下的提交數據采用相同的解析方法。CGIC采用以下方法來實現其解析過程。
        首先,通過對表單數據字符串的節點分析,用一個單向鏈表來對表單數據中的每個元素進行維護,在鏈表成員中包括了對元素名及其值的管理,并針對不同的元素類型提供了一系列接口。解析步驟如下:
        ①用于獲取列表框取值的函數接口cgiFormSelectSingle。
        ②用于獲取文本框取值的函數接口cgiFormString。
        ③用于獲取復選框取值的函數接口cgiFormCheckboxMultiple。
        在需要訪問元素時,只需提供相應的元素名,就可方便地使用這些接口對管理鏈表遍歷來獲得相應元素的取值。
        當CGIC移植時,只需對相應元素解析對應的函數進行所選系統的修改即可。需要注意的是,對列表和復選框等非字符取值的獲取,還需按照用戶定義的取值設置,對相應的接口進行一定的修改,以適應用戶對元素取值范圍的靈活要求。
        所謂解析數據的模板頁面回填,是指在動態頁面中,按照模板中的頁面顯示格式,將頁面中各元素的取值寫入html模板文件中的對應位置。html標簽代碼如下:
        input name=“devName”type=“text”
        value=“***”size=“15”/>
        它在頁面上表示一元素名為“devName”,取值為“***”的文本框,在數據回填到模板頁面時,需要根據具體的取值如“devl”寫到原“***”的對應位置上去。結果如下:
        input name=“devName”type=“text”
        value=“devl”size=“15”/>
        本文采用以下方法來實現這一處理過程。首先,沒計頁面模板時在每個需要進行動態修改的頁面元素前加上不同的注釋語句,對以上html標簽,可加的注釋語句如下(單獨一行):
        !-devName_id->
        在每次解析完表單數據并且需要對動態頁面進行重新生成時,就可以通過對模板文件的逐行讀取,來查找相應的注釋語句,從而確定數據更新的位置。然后再根據具體的元素取值生成新的html標簽字符串,用來對注釋語句后的標簽字符串進行替換。通過以上過程,即可方便地實現解析數據的模板頁面回填,從而生成相應的動態頁面。
        2.4 文件下載和上傳的功能實現
        文件下載和上傳是經常具有的一項功能,相對來說文件下載較為簡單,只需將下載時訪問的URL定位于目標文件,然后再由將該文件的內容直接上送給瀏覽器。而文件上傳功能的實現則相對復雜,下面對其過程進行詳細的說明。
        首先,要實現文件的上傳,在其頁面設計時必須采用POST方法來對表單數據進行提交,并且需要在頁面中將其編碼方式修改為“multipa rt/form-data”,否則將無法在瀏覽器端進行文件上傳。然后,通過html表單中的文件元素來進行上傳文件的選擇。
        通過以上設置,上傳給的http報文數據將以multipart的編碼形式出現。其特點是,在每個表單元素項的前后均加有一行分界字符串。以文件元素為例,其格式如下:
        --------------------------------7db01d60ffc
        Content-Disposition:form-data;name=“file”; filename=“1.TXT”Content-Type:text/plain
        This is a txt file.
        --------------------------------7db01d60ffc
        其中,“----------------------------7db01d60ffc”為分界字符串。CGlC也提供了對該格式的解析支持。它首先提取出分界字符串,然后再通過cgiParsePostMultltpartInput函數的操作來實現報文中各表單元素數據以及文件數據的解析。提取出文件數據后,即可將文件內容按指定的路徑保存在相應的Flash存儲區中。

        3 性能測試
        通過以上各環節,即可實現一個相對完整的EWS。綜合以上各個模塊。
        在主頻600 MHz的TMS320DM642處理器上對該EWS從收到請求建立連接到響應結束斷開連接的時間進行測試,EWS性能測試如表1所列。

        本文引用地址:http://www.104case.com/article/149122.htm

        f.jpg


        其中,由于采用了框架結構進行設計,在訪問索引主頁時,涉及的訪問請求次數較多,所以其測試時間相比其他單次請求來說要較長一些。總體來看,該EWS具有比較快速的服務響應時間,能夠滿足具體應用環境的要求。

        結語
        本文在BOA和CGIC的基礎上,通過對其代碼的修改以及HTTP協議報文的分析,將原本運行于Linux平臺上獨立的兩個程序進行有機的結合,成功地將其整合為DSP/BIOS中的一個任務,并提出了一種適合一般系統使用的訪問權限及對頁面的管理及動態生成機制。同時,完成了文件的上傳與下載功能,成功實現了一個相對完整的EWS。

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        上一頁 1 2 3 4 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 通海县| 丰台区| 阿拉善右旗| 海宁市| 台湾省| 玉门市| 大渡口区| 郓城县| 凤阳县| 庆阳市| 正定县| 林西县| 安泽县| 霍州市| 崇礼县| 鞍山市| 正定县| 当雄县| 东阿县| 临泉县| 兰西县| 建昌县| 教育| 彩票| 郁南县| 兴化市| 商洛市| 荣成市| 革吉县| 襄城县| 中超| 华蓥市| 金华市| 宕昌县| 抚远县| 开远市| 无锡市| 邓州市| 平南县| 冕宁县| 荔浦县|