淺析JSP HTTP服務器支持CGI
JSP HTTP服務器支持CGI簡而言之就是支持客戶端調用服務器端的CGI例程。在服務器端,CGI一般以可執行文件的形式存放(例如:可執行文件,可執行腳本)。這些CGI執行文件可以單獨運行也可以接受客戶端的請求作為參數運行。而HTTP服務器就要擔負起調用CGI可執行文件以及將客戶端的請求參數傳遞給CGI程序,并將CGI的執行結果反饋給客戶端。
1. JSP HTTP服務器不需要參數的CGI程序的調用
對于不需要參數的CGI程序,已經將功能模塊固定設置到CGI程序中,當調用時,執行該功能模塊即可。這種類型的CGI程序一般用于功能比較固定的場合。以下是既支持需要參數的CGI也支持無需參數的CGI的代碼:
- //Parameter is null
- if(params.equals("") == true) {
- command = fileName;
- }
- else //Generate the command line {
- command = fileName + " " + params;
- }
- //Execute CGI process as child process Process proc = m_rt.exec(command, null);
- //Create CGI process output stream
- BufferedReader pin = new BufferedReader(new InputStreamReader(proc.getInputStream() ) );
- String line = null;
- //Get the output from CGI process
- while( (line = pin.readLine() ) != null) {
- m_sout.println(line);
- }
- //Wait for CGI process finish
- proc.waitFor();
以上代碼中,通過Java的Runtime類的exec接口調用CGI可執行文件,并將CGI的執行輸出返回給客戶端。
2. JSP HTTP服務器需要參數的CGI程序的調用
對于需要參數的CGI程序,功能模塊沒有固定,而是需要以及傳入參數才能執行相應的功能。這種類型的CGI程序相對比較靈活。被調用時,HTTP服務器必須將客戶端請求中的參數行傳入到CGI進程中,在CGI程序中對請求進行解析,進而執行相應的模塊。HTTP服務器與CGI進程的通信可以采用三種方式:
(1)以命令行的方式傳入執行參數。參見以上代碼(“command = fileName + " " + params;”)中。將可執行文件和參數作為命令行傳入調用。
(2)寫入到CGI進程的標準輸入(stdin)中,CGI程序只需要從標準輸入中讀取相應的參數行即可。
(3)將參數行寫入到CGI進程的環境變量QUERY_STRING中。CGI從環境變量QUERY_STRING中讀取命令行參數。
【編輯推薦】

















