Исходный текст приложения CallCGI
Исходный текст приложения CallCGI приведен в листинге 3.9.
Листинг 3.9. Файл CallCGI\CallCGI.java
// =========================================================
// Вызов расширения сервера Web на базе интерфейса CGI
// из приложения Java
//
// (C) Фролов А.В, 1997
//
// E-mail: frolov@glas.apc.org
// WWW: http://www.glasnet.ru/~frolov
// или
// http://www.dials.ccas.ru/frolov
// =========================================================
import java.io.*;
import java.net.*;
import java.util.*;
public class CallCGI
{
// -------------------------------------------------------
// main
// Метод, получающий управление при запуске приложения
// -------------------------------------------------------
public static void main(String args[])
{
// Массив для ввода строки с клавиатуры
byte bKbdInput[] = new byte[256];
// Размер принятого блока данных
int length;
// Рабочая строка
String str;
// Адрес URL вызываемой программы CGI
URL u;
// Канал связи с расширением CGI
URLConnection c;
// Выходной поток для передачи данных расширению CGI
PrintStream ps;
// Входной поток для получения данных от расширения CGI
DataInputStream is;
try
{
// Выводим строку приглашения
System.out.println("CGI extension call" +
"\nEnter any string for send to CGI...");
// Читаем строку, передаваемую расширению,
// с клавиатуры
length = System.in.read(bKbdInput);
// Если строка не пустая, обрабатываем ее
if(length != 1)
{
// Преобразуем строку в формат String
str = new String(bKbdInput, 0);
// Обрезаем строку, удаляя символ конца строки
StringTokenizer st;
st = new StringTokenizer(str, "\n");
str = new String((String)st.nextElement());
// Выполняем кодировку URL для передаваемой строки
String StrEncoded = URLEncoder.encode(str);
// Отображаем перекодированную строку
System.out.println("Encoded string: >" +
StrEncoded + "<");
// Создаем объект класса URL для расширения CGI
u = new URL(
"http://frolov/frolov-cgi/controls.exe");
// Открываем канал связи с расширением CGI
c = u.openConnection();
// Создаем выходной поток данных для передачи
// введенной строки серверу CGI
ps = new PrintStream(c.getOutputStream());
// Передаем закодированную строку расширению CGI
ps.println(StrEncoded);
// Закрываем выходной поток
ps.close();
// Создаем входной поток для приема данных от
// расширения CGI
is = new DataInputStream(c.getInputStream());
System.out.println(
"\n------------------------------------------" +
"\n Data from CGI extension" +
"\n------------------------------------------\n");
// Прием данных выполняем в цикле
while (true)
{
// Получаем очередную строку
str = is.readLine();
// Если последняя строка, прерываем цикл
if(str == null)
break;
// Отображаем принятую строку
System.out.println(str);
}
// Закрываем входной поток
is.close();
}
}
catch(Exception ioe)
{
System.out.println(ioe.toString());
}
try
{
System.out.println(
"Press <Enter> to terminate application...");
System.in.read(bKbdInput);
}
catch(Exception ioe)
{
System.out.println(ioe.toString());
}
}
}