梅剛 林齡 潘峰
摘 要: 為了提供一種即上網即使用的編譯環(huán)境,提出了一種基于Web應用模式的在線式編譯環(huán)境的設計方法。該方法設計一種中間件來無縫集成編譯器等實用軟件工具,將用戶提交的程序在服務器端編譯并運行,將運行結果返回客戶端;運行時所需要的數據采用I/O重定向技術傳給執(zhí)行程序。實驗表明,該設計方法是可行的,在線式編譯環(huán)境為編程人員提供了一種便捷的開發(fā)與測試環(huán)境。
關鍵詞: 在線編譯環(huán)境; 中間件; I/O重定向; Web應用
中圖分類號:TP311 文獻標志碼:A 文章編號:1006-8228(2015)05-29-03
Abstract: In order to provide a conveniently used compilation environment, this paper proposes a design of Web-based online compilation environment. The design integrates a set of practical software tools such as a compiler by using middleware, to compile the program submitted by the user and run it on the server, and return the results back to the user, the run-time data is transferrd to the program via the I/O redirection technology. Experiments show that the design is feasible, the on-line compilation environment provides the programmer with a convenient test and development environment.
Key words: online compile environment; middleware; I/O redirection; Web application
0 引言
以集成開發(fā)環(huán)境IDE(Integrated Development Environment)為主流平臺的軟件開發(fā)工具集成了編輯、編譯和調試等實用且強大的功能,但也顯現出它的一些不足。在Windows系統中使用Visual Studio,Mac OS系統中使用XCode,以及可以在多種系統中使用的Netbeans等為典型的IDE,適合于桌面系統上使用,但不能通過瀏覽器使用,這樣就使得它們難以在線共享使用。IDE盡管功能強大,但也相當復雜,對于僅僅需要編譯功能的編程者而言,IDE的大部分功能是閑置的。將復雜而龐大的IDE裁剪,提煉出最基本功能,使這些功能能夠共享使用,提供一個容易使用的接口是本文設計的目標。
從軟件使用者角度而言,簡單、方便、功能完善且成本低廉是選擇軟件系統的重要條件。Internet的迅速發(fā)展和深入應用正逐漸改變軟件的設計模式和應用模式,其中基于Web的軟件系統已成為一種最為成功的設計標準?;赪eb的軟件系統具有面向大眾和良好的跨平臺應用特性,它以Web瀏覽器作為用戶與系統的標準接口。
基于Web的軟件工程逐漸成為眾多學者研究的熱點,基于Web的系統已成為未來軟件發(fā)展的一個重要方向,文獻[1-7]中實現了基于Web的軟件系統,提供了一種基于Web的應用環(huán)境。本文通過對網絡中間組件的有效集成,提供了一個簡單易用的基于Web的在線式編譯環(huán)境,以下詳細描述它的應用實例及關鍵實現技術。
1 系統設計
1.1 系統基本設計思想
系統客戶端采用Web界面,用戶通過Web表單提交程序;服務器端由Web服務器、中間組件和編譯工具組成。中間組件主要功能分為四個功能模塊:讀程序和保存模塊,調用編譯器編譯程序并捕捉編譯信息模塊,加載運行程序并捕捉運行結果模塊,分析編譯或運行結果文件并給出評判模塊。
1.2 系統工作原理
如圖1所示,用戶的HTTP請求提交給Web服務器,Web服務器調用中間組件處理提交數據,中間組件首先將相關數據寫入文件,然后調用編譯器或解釋器等工具處理寫入文件,處理產生的信息使用重定向技術寫入文件。中間組件集是一些運行在Ch環(huán)境[8]的Ch腳本,使用C語言編寫。文件集在這里主要是指文本文件,它包括兩類,一類是高級語言的源程序代碼和數據文件,它們由Web表單提交,并由中間組件讀取生成;另一類是結果文件,它們由編譯器或其他命令行工具執(zhí)行時產生,是通過重定向技術寫入的標準輸出(STDOUT)或標準錯誤(STDERR),由Web服務器向客戶端返回。
1.3 功能模塊設計
1.3.1 用戶界面設計
用戶界面是編程者與系統交互的接口,源程序通過Web中表單進行提交,系統對程序的處理結果也采用Web文件形式在客戶端瀏覽器中顯示。這里我們采用Web框架集形式,即把瀏覽器客戶區(qū)分割為若干個矩形區(qū)域,使得輸入輸出都在同一個界面中,類似一個集成開發(fā)環(huán)境。簡單地把用戶界面劃分為以下三個部分。
⑴ 功能選擇界面。該界面主要供用戶選擇相關功能和服務。主要采用超鏈接標題實現導航功能。
⑵ 編輯與提交界面。該界面既作為功能選題界面的輸出區(qū)域,又是用戶提交任務的輸入區(qū)域,它采用嵌入式Web框架實現。
⑶ 輸出界面。該界面與提交界面一樣,采用嵌入式Web框架實現,主要作為服務器端的返回結果顯示。
如圖2所示,功能選擇界面作為導航界面,用戶選擇鏈接頁面在提交界面中顯示,提交界面提交的請求結果在結果頁面中顯示。
[功能選擇界面\&編輯與提交界面\&處理結果界面\&]
圖2 基于Web框架的用戶界面
1.3.2 中間件設計
網絡中間組件是系統業(yè)務中心,接受Web服務器的調用,擴展了Web服務器功能。它讀取HTTP請求數據,將讀取的程序源代碼寫入文件,同時調用服務器端編譯器編譯程序,通過編譯的程序裝載于Shell外殼運行。編譯結果或運行結果采用重定向到文件,向客戶端返回結果文件的URL,以便用戶查看。
1.4 關鍵應用技術
實現用戶與遠程軟件工具的交互主要是使用重定向技術實現。操作系統Shell環(huán)境中支持輸入輸出重定向,用符號"<"和">"來表示。0、1和2分別表示標準輸入STDIN、標準輸出STDOUT和標準錯誤STDERR信息輸出,可以用來指定需要重定向的標準輸入或輸出,比如2>error.txt表示將錯誤信息輸出到文件error.txt中。又比如用ls命令時,本來是查看目錄內容,而用了重定向">"后可以直接把屏幕輸出寫入一個文件中,再到文件里去看結果。輸入也是一樣,可以把輸入重定向到一個文件里,重定向操作符可以用來將命令輸入和輸出數據流從默認位置重定向到其他位置,其輸入或輸出數據流的位置稱為句柄;常見的句柄有三種,即:標準輸入、標準輸出和標準錯誤。如表1所示。
2 系統實現
2.1 用戶界面實現
用戶界面主要包括頁面功能導航區(qū)域、編輯與提交區(qū)域和處理結果顯示區(qū)域。在三個區(qū)域所在的Web頁中,使用頁內框架標簽標注區(qū)域名。導航區(qū)域使用超鏈接標簽…鏈接Java程序的編輯頁面javaPro.html和顯示位置EditFrame。
在上面HTML代碼片段中,標注編輯代碼的文本區(qū)域,