淺析JSP HTTP服務(wù)器支持CGI
JSP HTTP服務(wù)器支持CGI簡而言之就是支持客戶端調(diào)用服務(wù)器端的CGI例程。在服務(wù)器端,CGI一般以可執(zhí)行文件的形式存放(例如:可執(zhí)行文件,可執(zhí)行腳本)。這些CGI執(zhí)行文件可以單獨運行也可以接受客戶端的請求作為參數(shù)運行。而HTTP服務(wù)器就要擔負起調(diào)用CGI可執(zhí)行文件以及將客戶端的請求參數(shù)傳遞給CGI程序,并將CGI的執(zhí)行結(jié)果反饋給客戶端。
1. JSP HTTP服務(wù)器不需要參數(shù)的CGI程序的調(diào)用
對于不需要參數(shù)的CGI程序,已經(jīng)將功能模塊固定設(shè)置到CGI程序中,當調(diào)用時,執(zhí)行該功能模塊即可。這種類型的CGI程序一般用于功能比較固定的場合。以下是既支持需要參數(shù)的CGI也支持無需參數(shù)的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接口調(diào)用CGI可執(zhí)行文件,并將CGI的執(zhí)行輸出返回給客戶端。
2. JSP HTTP服務(wù)器需要參數(shù)的CGI程序的調(diào)用
對于需要參數(shù)的CGI程序,功能模塊沒有固定,而是需要以及傳入?yún)?shù)才能執(zhí)行相應(yīng)的功能。這種類型的CGI程序相對比較靈活。被調(diào)用時,HTTP服務(wù)器必須將客戶端請求中的參數(shù)行傳入到CGI進程中,在CGI程序中對請求進行解析,進而執(zhí)行相應(yīng)的模塊。HTTP服務(wù)器與CGI進程的通信可以采用三種方式:
(1)以命令行的方式傳入執(zhí)行參數(shù)。參見以上代碼(“command = fileName + " " + params;”)中。將可執(zhí)行文件和參數(shù)作為命令行傳入調(diào)用。
(2)寫入到CGI進程的標準輸入(stdin)中,CGI程序只需要從標準輸入中讀取相應(yīng)的參數(shù)行即可。
(3)將參數(shù)行寫入到CGI進程的環(huán)境變量QUERY_STRING中。CGI從環(huán)境變量QUERY_STRING中讀取命令行參數(shù)。
【編輯推薦】